在派生的DefaultHttpControllerSelector实现中没有调用GetControllerName

时间:2016-11-03 14:47:21

标签: asp.net asp.net-web-api versioning

我正在尝试使用ASP.NET Web API进行版本控制。我创建了一个简单的controllerselector,它派生自DefaultHttpControllerSelector。

public class MyHttpControllerSelector : DefaultHttpControllerSelector
{
    public MyHttpControllerSelector(HttpConfiguration config) : base(config) { }

    public override string GetControllerName(HttpRequestMessage request)
    {
        return "SomeControllerName";
    }
}

在我的WebApiConfig.Register中:

config.MapHttpAttributeRoutes();

config.Services.Replace(typeof(IHttpControllerSelector), new MyHttpControllerSelector(config));

我的问题是从不调用GetControllerName。我可能误解了这个函数的意图,但是我看到了很多例子,有些是微软使用这种方法的。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

在我的情况下,这是因为我没有调用config.Routes.MapHttpRoute()。我刚刚使用属性路由。一旦我使用MapHttpRoute(),它似乎开始调用GetControllerName。