Leiten Sie alle Web-API-Anfragen an eine Controller-Methode weiter

9

Ist es möglich, den Routing-Mechanismus der ASP.NET-Web-API so anzupassen, dass alle Anfragen an die API an eine Controller-Methode weitergeleitet werden?

Wenn eine Anfrage zu

kommt %Vor%

oder

%Vor%

Alle würden an die Methode Get () meines SuperDuperControllers weitergeleitet werden?

    
msk 24.06.2015, 09:21
quelle

2 Antworten

7

Ich stieß auf einen Fall, wo ich das tun musste. (Web API 2)

Ich habe zuerst die benutzerdefinierten IHttpControllerSelector und IHttpActionSelector s erstellt. Das war allerdings ein bisschen düster. So entschied ich mich schließlich für diese tote einfache Implementierung. Alles, was Sie tun müssen, ist eine Wildcard-Route einzurichten. Beispiel:

%Vor%

Jede GET-Anfrage, die mit "api /" beginnt, wird an die obige Methode weitergeleitet. Dazu gehören die oben genannten URLs in Ihrer Frage. Sie müssen Informationen aus den Request- oder Context-Objekten selbst ausgraben, da dies den automatischen Routenwert und das Modell-Parsing umgeht.

Das Gute daran ist, dass Sie auch andere Controller verwenden können (solange ihre Routen nicht mit "api /").

beginnen     
Kasey Speakman 17.07.2016 04:10
quelle
1

Ich weiß nicht, warum Sie das machen wollen und ich würde Ihnen sicher nicht empfehlen, alles über einen Controller zu routen, aber Sie können dies wie folgt erreichen. Angenommen, Sie werden nur eine Ressource mit einer optionalen ID in Ihren Aufrufen haben, fügen Sie dies Ihrer WebApiConfig hinzu:

%Vor%

Definieren Sie dann Ihre Controller-Methode wie folgt:

%Vor%

Sie müssten sich für eine geeignete IHttpActionResult entscheiden, die für jede andere Art von Ressource zurückgegeben wird.

Stellen Sie alternativ mithilfe von Attribut-Routing sicher, dass config.MapHttpAttributeRoutes() in Ihrer WebApiConfig vorhanden ist und fügen Sie Ihrer Controller-Methode die folgenden Attribute hinzu:

%Vor%     
Jon Susiak 06.07.2015 09:43
quelle