Asp.net web api WebApi中控制器名称的连字符URL
我正在尝试将类似于Asp.net web api WebApi中控制器名称的连字符URL,asp.net-web-api,url-routing,Asp.net Web Api,Url Routing,我正在尝试将类似于/action-figure/的URL映射到action-figure-controller。i、 例如,为控制器将我的url用连字符分隔 类似于,但用于WebApi而不是MVC路由 请问如何在WebApi中配置我的URL 几乎所有谷歌搜索都会将我引向MVC路由配置,但我无法找到与之相当的MVC路由配置: config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi",
/action-figure/
的URL映射到action-figure-controller
。i、 例如,为控制器将我的url用连字符分隔
类似于,但用于WebApi而不是MVC路由
请问如何在WebApi中配置我的URL
几乎所有谷歌搜索都会将我引向MVC路由配置,但我无法找到与之相当的MVC路由配置:
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
由于
MvcRouteHandler
不适用于此,我甚至不确定在哪里传递自定义路由配置。虽然在ASP.NET MVC中可能无法设置多个路由,但请尝试使用易于使用的注释来指定路由
要启用属性路由,您需要在Register
方法中设置:
config.MapHttpAttributeRoutes();
这为您设置每种方法的路由提供了便利:
[Route("customers/{customerId}/orders")]
public IEnumerable<Order> GetOrdersByCustomer(int customerId) { ... }
编辑返回您的评论:
看看这一点以及DefaultHttpControllerSelector
是如何派生并填充一些逻辑的:
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Dispatcher;
public class ApiControllerSelector : DefaultHttpControllerSelector
{
public ApiControllerSelector (HttpConfiguration configuration) : base(configuration) { }
public override string GetControllerName(HttpRequestMessage request)
{
// add logic to remove hyphen from controller name lookup of the controller
return base.GetControllerName(request).Replace("-", string.Empty);
}
}
要实现此功能,您需要在配置中指定自定义的ApiControllerSelector
,如下所示:
config.Services.Replace(typeof(IHttpControllerSelector),
new ApiControllerSelector(config));
您好,谢谢,有没有办法通过一点逻辑来全局配置,将驼峰式控制器转换为连字符分隔的URL?请参阅更新的答案,至少有一种方法可以拦截请求并在那里更改控制器参数。
config.Services.Replace(typeof(IHttpControllerSelector),
new ApiControllerSelector(config));