WebApi-Routen mit gleichen routeTemplate mit version Einschränkung

Baue ich eine api mit WebAPI. Was bin ich für ein shooting ist die Schaffung einer externen Bibliothek, die pro-version der API, die die WebAPI-app die Abfrage bei der Registrierung seine Routen in WebApiConfig

Beispiel: Api.v1 und Api.v2


Teilen ähnliche Funktionalität basiert aber auf version bestanden in der Kopfzeile wählt es die richtige API-Version:

/{controller}/{action} - HTTP-HEADER: version=1 Karten zu Api.v1.Controller/Action

/{controller}/{action} - HTTP-HEADER: version=2 Karten zu Api.v2.Controller/Action


Ziel ist es zu vermeiden, indem /{ver}/{controller}/{action}. Ich weiß, dass routeTemplates mit dem gleichen Wert wird nicht unterstützt, aber ich dachte, ich konnte binden Sie die route zu einem bestimmten namespace und eine Einschränkung könnte helfen, zu bestimmen, welche abgestimmt ist:

namespace Api.v1
{
    public static class Routing
    {
        public static void MapRoutes(HttpConfiguration config)
        {
            IHttpRoute r = config.Routes.MapHttpRoute(
                name: "",
                routeTemplate: "{controller}/{action}/{id}",
                defaults: new 
                {
                    id = RouteParameter.Optional, 
                    namespaces = new string[] { "Api.v1.Controllers" } 
                },
                constraints: new VersionConstraint(2)
            );
        }
    }
}

public class VersionConstraint : IRouteConstraint
{
    int _version;
    public VersionConstraint(int version)
    {
        _version = version;
    }

    public bool Match(
        HttpContextBase httpContext, 
        Route route, 
        string parameterName, 
        RouteValueDictionary values, 
        RouteDirection routeDirection)
    {
        int version;
        int.TryParse(httpContext.Request.Headers["version"], out version);
        return version == _version;
    }
}

Versuchen, zu injizieren, die namespaces für jede route hat nicht wirklich geholfen, entweder. Die DataTokens Eigenschaft ist null, und readonly.


Eine Idee, wie das zu tun, was ich Tue? Eine Möglichkeit zu haben, den gleichen Weg anzeigen, um verschiedene Controller mit dem gleichen Namen aber mit unterschiedlichen Funktionen und namespace?

InformationsquelleAutor hunter | 2012-10-18
Schreibe einen Kommentar