2016-12-23 1 views
0

Die Hintergrundgeschichte ist ich habe eine Web-API, die einfach als ein Gateway dient, um externe Dienste aufzurufen. Der Grund dafür ist, dass ich die echte Business-API nicht für externe Services verfügbar machen möchte. In diesem Gateway-Controller empfängt es einfach die Informationen von der Business-API, ruft externe Services auf und gibt die Antwort an den Client zurück, der die Business-API darstellt. In meinem Gateway Controller habe ich eine POST-Aktion, die einen Parameter vom Typ HttpContent, so etwas wie dies geschieht:Wie kann ich Parameter des Typs HttpContent in Web API übergeben?

[Route("api/test")] 
    public void Test(HttpContent content) 
    { 
    } 

aber die Web-API-Infrastruktur nicht weiß, wie zu serialisiert und deserialisiert HttpContent Typen. Gibt es eine Möglichkeit, mein Szenario zu unterstützen? Vielen Dank.

Antwort

0

Der Zugriff auf den Inhalt der Anfrage in einem Controller-Controller ist ganz natürlich. Rufen Sie einfach Request.Content innen an. Sie können es nicht als Parameter verwenden, da es sich weder um ein Mapping als um ein URI-Segment handelt, noch um einen serialisierten Inhalt.

Versuchen Sie so etwas wie:

using System.Net; 
using System.Net.Http; 

// namespace + controller definition... 

[Route("api/test")] 
public HttpResponseMessage GetTest() // This is a GET handler 
{ 
    var myRequestContext = Request.Content; 

    // Do something with the content e.g 
    if (!myRequestContext.IsMimeMultipartContent()) 
    { 
     Request.CreateResponse(HttpStatusCode.UnsupportedMediaType); 
    } 
} 

BTW, vorausgesetzt, Sie eine REST-API-Controller von erstellen, was Sie gesagt haben, vergessen Sie nicht das Verb, um anzuzeigen, diese Handler zugeordnet ist, entweder durch die Verwendung von [Http<REST_verb>] Attribut in System.Web.Http auf dem Handler oder durch Voranstellen des Handler-Namens durch das Verb.

Hoffe, dass hilft!

+0

Das Problem ist, einige der externen Dienste akzeptiert GET und einige POST und sogar der Inhaltstyp kann auch variieren. Daher sehe ich keine einfache Möglichkeit, die Anfrage von der Business-API weiterzuleiten und an entfernte externe Dienste zu senden. – Nico

+0

Sie könnten vielleicht einen Blick auf die http-Message-Handler [hier] (https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/http-message-handlers) werfen und Ihre aber rollen Das ist eine andere Geschichte. Wenn dieser Beitrag Ihre Frage beantwortet, akzeptieren Sie sie bitte. – gfache

Verwandte Themen