在mvc应用程序中,如果自定义IHttpControllerSelector与url路径不匹配,如何回退到默认IHttpControllerSelector

时间:2013-08-29 21:24:40

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

我阅读本文试图使用命名空间创建一个版本化的webapi控制器:

  

http://blogs.msdn.com/b/webdev/archive/2013/03/08/using-namespaces-to-version-web-apis.aspx

我不想打破现有路线,因此向后兼容对我来说非常重要。

如果路线不匹配,它会在尾注中使用默认值,但这对我来说并不简单。如果你能提供帮助那就太棒了。

感谢

1 个答案:

答案 0 :(得分:2)

假设您正在使用Code中提到的Article,您可以在SelectController方法中执行此操作:

public HttpControllerDescriptor SelectController(HttpRequestMessage request)
{
    IHttpRouteData routeData = request.GetRouteData();
    if (routeData == null)
    {
        throw new HttpResponseException(HttpStatusCode.NotFound);
    }

    // Get the namespace and controller variables from the route data.
    string namespaceName = GetRouteVariable<string>(routeData, NamespaceKey);
    if (namespaceName == null)
    {
        DefaultHttpControllerSelector selector = new DefaultHttpControllerSelector(_configuration);
        return selector.SelectController(request);
    }

    // ... remaining code from article
}

当路由不包含版本参数时,创建DefaultControllerSelector的实例并从其SelectController方法返回值。