我想知道是否可以在URL中设置带有可选前缀的WebAPI RoutePrefix?我想要实现的是能够在我的WebAPI路由中传递(或不传递)语言环境语言。我想有两条可能的路线提供相同的结果。
网址1(包含区域设置)
http://localhost/en-US/api/users/1
网址2(没有区域设置)
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 }
);
我尝试在WebAPI控制器中添加以下代码:
// UserController.cs
[System.Web.Http.RoutePrefix("{language?}/api")]
public class UserController : ApiController
它适用于所提供的语言环境,但没有它就无法工作......我认为?
会使它成为可选项,但它似乎没有任何效果。它可以完成,还是根本不可能?
答案 0 :(得分:1)
由于您混合了属性路由和传统路由,它无法正常工作!
要使其正常工作,请使用传统路由并从控制器中删除RoutePrefix
和任何其他Route
属性。