В приложении mvc, как вы можете использовать IHttpControllerSeelector по умолчанию, если пользовательское приложение не соответствует URL-пути

Я прочитал эту статью, чтобы попытаться создать версионный контроллер webapi, используя пространство имен:

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

Я не хочу нарушать существующие маршруты, поэтому для меня очень важно быть обратно совместимым.

и в конечной ноте звучит тривиально - использовать стандартную, если маршруты не совпадают, но для меня это не тривиально. Если вы можете помочь, это было бы здорово.

Спасибо

1 ответ

Решение

Предполагая, что вы используете код, указанный в статье, вы можете сделать это в методе 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.

Другие вопросы по тегам