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

10-14 10:29
查看更多