ASP.NET Web-API benutzerdefinierte IHttpControllerSelector für eine einzelne route
Brauche ich eine custom IHttpControllerSelector
angewendet werden sollte, um eine bestimmte Strecke nur. Alle anderen web-api-Routen sollten die default-Implementierung von IHttpControllerSelector
.
Während der recherche fand ich folgenden code, der dazu bestimmt ist, zu ersetzen, die IHttpControllerSelector beim starten der Anwendung, aber es ersetzt die Standard-controller-Selektor komplett, die bewirkt, dass alle Routen in der Anwendung verwenden Sie meine benutzerdefinierte controller-Auswahl:
config.Services.Replace(typeof(IHttpControllerSelector),
new CustomControllerSelector(config));
Gibt es eine Möglichkeit, konfigurieren Sie die IHttpControllerSelector
für eine einfache Strecke?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einen pro-route message handler auf die route, braucht einen anderen controller-Auswahl-Logik. Diese Prozedur würde mark die
HttpRequestMessage
mit einer fahne, die diese Anforderung muss anders behandelt werden.Dann machen Sie einfach die
CustomControllerSelector
Erben vonDefaultHttpControllerSelector
und überprüfen, dass die Flagge:DefaultHttpControllerSelector
)Hier ist der code:
1) message handler setzen der Flagge
2) Zuweisung pro route message handler, um die bestimmte route (nur laufen nicht für andere Routen)
3) benutzerdefinierte selector Wahrung der Flagge:
4) die Registrierung der Wähler:
Bearbeiten
Wenn Sie nicht wünschen, Erben von
DefaultHttpControllerSelector
- dann implementierenIHttpControllerSelector
direkt, und anstelle von aufrufen derbase.SelectController(request)
speichern Sie die alt-Selektor als ein Feld/property in der KlasseDann ändern Sie einfach die Anmeldung:
IHttpControllerSelector
war dieDefaultHttpControllerSelector
? Ich arbeite an einer Erweiterung für ein CMS, wo andere Erweiterungen vielleicht auch überschreiben Sie dieIHttpControllerSelector
. Vorausgesetzt, dass meine Erweiterung ist die zweite einem übergeordneten es, die erste ErweiterungIHttpControllerSelector
nicht mehr verwendet werden.