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はオプションですが、何の効果もないようです。それはできますか、それとも不可能なのでしょうか?
問題は、私がこのようにすれば、コントローラとアクションの 'http:// localhost/api/User/GetUser/1'を使って古いファッションのルートを取得し、私はそれを回避しようとしていたことです – ghiscoding