2016-05-27 4 views
3

URL内にオプションのプレフィックスを付けてWebAPI RoutePrefixを設定することが可能かどうか、疑問に思っていますか?私が達成しようとしているのは、WebAPIルートのロケール言語をオプションで渡すことができるかどうかです。私は同じ結果をもたらす2つの可能なルートを持っていたいと思います。 (ロケールで)ASP WebAPIオプションのRoutePrefixを使用できますか?

URL 1 http://localhost/en-US/api/users/1

URL 2、私は私のWebAPIのコントローラに次のコードを追加してみました http://localhost/api/users/1

//WebApiConfig.cs 
config.Routes.MapHttpRoute(
      name: "ApiWithLanguage", 
      routeTemplate: "{language}/api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional }, 
      constraints: new { language = @"^(([a-z]{2})|([a-z]{2}-[a-zA-Z]{2}))$" } // can be:: en, en-CA, fr, fr-CA, ... 
); 

config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
); 

(ロケールなし):

// UserController.cs 
[System.Web.Http.RoutePrefix("{language?}/api")] 
public class UserController : ApiController 

それを提供されているロケールで動作しますが、それがなければ動作しません...私は?と思ったouldはオプションですが、何の効果もないようです。それはできますか、それとも不可能なのでしょうか?

答えて

1

属性ルーティングと従来のルーティングが混在しているため、機能しません。 この作業を行うには、従来のルーティングを使用し、コントローラからRoutePrefixとその他のRoute属性を削除します。

+0

問題は、私がこのようにすれば、コントローラとアクションの 'http:// localhost/api/User/GetUser/1'を使って古いファッションのルートを取得し、私はそれを回避しようとしていたことです – ghiscoding

関連する問題