C# ASP.NET Web Api 2路由约定的实现

C# ASP.NET Web Api 2路由约定的实现,c#,asp.net,asp.net-web-api,routing,C#,Asp.net,Asp.net Web Api,Routing,我们都知道Web API 2路由约定,以及如何使用以下内容自动映射到ApicController类型和操作: config.Routes.MapHttpRoute( "Default", "api/{controller}/{action}" ); public class AbcdefghijklmnoController : ApiController { public int Test() {

我们都知道Web API 2路由约定,以及如何使用以下内容自动映射到ApicController类型和操作:

config.Routes.MapHttpRoute(
            "Default",
            "api/{controller}/{action}"
        );


public class AbcdefghijklmnoController : ApiController
{
    public int Test()
    {
        return 5;
    }
}
这和预期的一样,调用api/Abcdefghijklmno/test时我得到了5。但是现在我想创建一些控制器类型,这些控制器类型最终不会以Controller结尾,并结合一个定制的控制器发现机制,如中所述


疯狂的是,现在我可以从route api/abcde/test获得值5,因此基于约定的路由真正做的是从类型名称中切掉字符串“Controller”的长度。除了WebAPI 2的这种非常幼稚的实现之外,还有什么方法可以避免这种情况吗?

好吧,你可以使用WebAPI 2框架中最好的功能之一,我正在构建一个通用框架,在这个框架中,我将接口实现直接映射到API控制器,所以我的案例就不适合这样:)这听起来很可怕,如果我写的是一个经典的WebAPI项目,我也会同意,但是这些东西隐藏在一个固执己见的框架层中,实现者甚至不知道它是隐藏在幕后的WebAPI。
public class Abcdefghijklmno : ApiController
{
    public int Test()
    {
        return 5;
    }
}