我想知道是否可以通过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
它可以与提供的语言环境一起使用,但没有它就无法工作...我认为
?
可以将其设为可选,但似乎没有任何作用。可以做到吗,还是根本不可能呢? 最佳答案
它不起作用,因为您将属性路由和常规路由混合使用!
要使此工作正常,请使用常规路由,并从控制器中删除RoutePrefix
和任何其他Route
属性。
关于c# - ASP WebAPI是否可以有可选的RoutePrefix?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37493334/