【发布时间】:2016-09-26 09:00:11
【问题描述】:
我想知道是否可以在 URL 中使用可选前缀设置 WebAPI RoutePrefix?我想要实现的是能够在我的 WebAPI 路由中可选地传递(或不传递)语言环境。我希望有 2 条可能的路线提供相同的结果。
URL 1(带区域设置)
http://localhost/en-US/api/users/1
URL 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
它适用于提供的语言环境,但没有它就无法工作......我认为? 会使它成为可选的,但它似乎没有任何效果。能做到吗,还是根本做不到?
【问题讨论】:
标签: c# asp.net asp.net-web-api asp.net-web-api-routing