2016-12-23 9 views
0

バックストーリーは、単に外部サービスを呼び出すためのゲートウェイとして機能するWeb APIを持っています。その理由は、私は実際のビジネスAPIを外部サービスに公開したくないからです。したがって、このゲートウェイ・コントローラーでは、単にビジネスAPIから情報を受け取り、外部サービスを呼び出し、ビジネスAPIであるクライアントに応答を返します。私のゲートウェイコントローラで 私は、このような何かタイプHttpContentのパラメータを取るPOSTアクションを持っている:Web APIでHttpContent型のパラメータを渡すにはどうすればよいですか?

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

が、ウェブAPIインフラストラクチャがHttpContentタイプをシリアライズとデシリアライズする方法を知りませんが。私のシナリオをサポートする方法はありますか?ありがとう。

答えて

0

コントローラのハンドラでリクエストの内容にアクセスするのは非常に自然です。中にRequest.Contentと電話するだけです。 URIセグメントやシリアル化されたコンテンツのマッピングではないため、パラメータとして使用することはできません。 、どちらか[Http<REST_verb>]属性を使用して、このハンドラがにマッピングされている動詞を指示することを忘れないでください、あなたはあなたが言ったことからREST APIのコントローラを作成していると仮定すると、ところで

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); 
    } 
} 

のようなものを試してみてくださいハンドラ上でSystem.Web.Httpに、または動詞でハンドラ名の接頭辞を付けることにより、

希望に役立ちます!

+0

問題は、外部サービスの中にはGETとPOSTを受け付けるものがあり、コンテンツタイプも変わる可能性があることです。だから私は、ビジネスAPIからリクエストを転送し、リモートの外部サービスに送信する簡単な方法は見当たりません。 – Nico

+0

あなたはhttpメッセージハンドラ[ここ](https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/http-message-handlers)を見て、それは別の話です。この投稿があなたの質問に答えるなら、それを受け入れてください。 – gfache

関連する問題