Wie einrichten von Web-API-Routing für einen Proxy-Controller?
Teil meiner Anwendung muss als Proxy-Server für einen Dritten RESTful-web-service. Gibt es eine Möglichkeit einrichten von Web-API-routing, so dass alle Anfragen von der gleichen Art auf die gleiche Methode?
Zum Beispiel, wenn der client sendet in beiden Anfragen BEKOMMEN ich möchte Sie zu gehen, um in einer einzigen Aktion zu ERHALTEN Methode, die dann sendet die Anfrage an die downstream-server.
api/Proxy/Customers/10045
api/Proxy/Customers/10045/orders
api/Proxy/Customers?lastname=smith
Den single-action-Methode für BEKOMMEN würde abholen eine dieser drei Anforderungen und senden Sie Sie an den entsprechenden Dienst (ich weiß, wie man mit HttpClient zu machen, dass passieren effektiv):
http://otherwebservice.com/Customers/10045
http://otherwebservice.com/Customers/10045/orders
http://otherwebservice.com/Customers?lastname=smith
Ich nicht wollen, haben zu eng paar meiner web-service an den Dritten web-service und replizieren Sie Ihre gesamte API-Methodenaufrufe innerhalb mine.
Einen workaround, dass ich dachte, einfach codieren Sie die Ziel-URL in JavaScript auf dem client und übergeben Sie diese in das Web-API, welche dann immer nur einen parameter. Es würde funktionieren, aber ich würde es vorziehen, verwenden Sie die routing-Funktionen in Web-API, wenn möglich.
- Haben Sie jemals herausfinden? Ich bin versucht, das gleiche zu tun.
- Noch nicht. Ich fühle mich wie ich bin immer in der Nähe aber mit dem parameter-routing.
- Ich habe es funktioniert für meine Anforderungen - siehe Antwort gepostet.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist, wie ich diese zu arbeiten. Erstellen Sie zuerst einen controller mit einer Methode, die für jedes verb Sie unterstützen möchten:
Den async-Methoden sind, weil Sie sich auf eine HttpClient. Anzeigen Ihrer route wie diese:
Nun wieder zurück auf die Get-Methode in der controller. Erstellen Sie ein HttpClient-Objekt, erstellen Sie eine neue HttpRequestMessage-Objekt mit der entsprechenden Url, kopieren Sie alles (oder fast alles) aus dem ursprünglichen request-Nachricht, dann Aufruf von SendAsync():
Die URL die Kombination könnte komplizierter sein, aber das ist die grundlegende Idee.
Für den Post-und Put-Methoden, werden Sie auch brauchen, um kopieren Sie die request-body
Bitte beachten Sie auch eine
HttpCompletionOption.ResponseContentRead
parameter übergebenSendAsync
nennen, weil ohne Sie, ASP.NET verbringen Sie einen exremeley lange Zeit mit dem Lesen der Inhalt, wenn der Inhalt groß ist (in meinem Fall, es verändert einen 500KB 100ms Anfrage in einem 60er Anfrage).Could not establish a trust relationship for the SSL/TLS secure channel
. Es könnte im Zusammenhang mit Ihrem Kommentar. Ich gefiltert aus dem Kopf.SchlüsselHost
und nicht die Ausnahme mehr. Ich denke, das ist die Lösung - aber ist es "richtig" zu machen? Gibt es irgendwelche anderen Header, die herausgefiltert werden soll?ExceptionMessage": "The request was aborted: Could not create SSL/TLS secure channel."
Fehler.