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));