ASP WebAPI我们可以选择RoutePrefix吗?

时间:2016-05-27 22:49:08

标签: c# asp.net asp.net-web-api asp.net-web-api-routing

我想知道是否可以在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

它适用于所提供的语言环境,但没有它就无法工作......我认为?会使它成为可选项,但它似乎没有任何效果。它可以完成,还是根本不可能?

1 个答案:

答案 0 :(得分:1)

由于您混合了属性路由和传统路由,它无法正常工作! 要使其正常工作,请使用传统路由并从控制器中删除RoutePrefix和任何其他Route属性。