2016-11-15 12 views
0

Web APIを初めて使用しており、解決できない質問があります。ASP.NET - 複数の異なるパラメータを使用してWeb APIを呼び出して処理する

これは私の質問です:どのように複数のパラメータ(ストリームまたはオブジェクトと2つまたは3つの文字列)を必要とするWeb APIを呼び出しますか?そして、どのようにWeb APIの内部でこのパラメータを扱うのですか?ストリームは、ファイルのストリーム(またはその他の場合にはオブジェクト)をある

public class MyController : ApiController 
{ 
    [HttpPost] 
    public MyObject Method(Stream s, string first, string second) 
    { 
     // take the parameters and do something 
    } 
} 

は例えば、私は私のウェブAPIでこのメソッドを持っています。 これらのパラメータをすべてクライアント依頼の本文に追加するにはどうすればよいですか?そしてそこから彼らを奪い取ってその方法で使う方法は?

編集: この解決策は良いですか? ここではクライアント:

{ 
     var client = new HttpClient(); 
     var queryString = HttpUtility.ParseQueryString(string.Empty); 

     queryString["first"] = "true"; 
     queryString["second"] = "false"; 
     var uri = "https://myapi.com/api/mycontroller/method?" + queryString; 

     HttpResponseMessage response; 

     byte[] byteData = Encoding.UTF8.GetBytes(myFile); 

     using (var content = new ByteArrayContent(byteData)) 
     { 
      content.Headers.ContentType = new MediaTypeHeaderValue("<application/json >"); 
      response = await client.PostAsync(uri, content); 
     } 

    } 

そして、ここでのWeb API:

[HttpPost] 
public MyObject Method([FromBody]Stream s, [FromUri]string first, [FromUri]string second) 
{ 
    //do something 
} 
+0

あなたは、このようにWEBAPIに複数のパラメータを渡すことはできません。 '[FromBody]'を使用してください –

+0

ありがとう、ありがとう!しかし、私の最初の問題は、リクエストボディにオブジェクトを追加する方法です。そして、2回目には、Web APIメソッドでそれらをどのように処理するか。 – Giobbo

+0

代わりにgetを使うことができます!あなたが実際に望むものであなたの投稿を明示的に更新する場合は、 – Aravind

答えて

0

WEBAPIは、単にあなたがDTO /モデルクラスを作成し、そのクラスを渡すことができ、このように複数のパラメータを渡すには対応していません。体から方法まで

public class Foo 
{ 
    public Byte[] s {get;set;} 
    public string first {get;set;} 
    public string second {get;set;} 
} 

WepApiコントローラ:

public HttpResponseMessage Register([FromBody] Foo foo) 
{ 
    //do something 
    return Ok(); 
} 

更新:

あなたは、各メソッドのクラスを作成したくない場合は。次に、次のように使用できますが、最初のものを使用することをお勧めします。ここで

public HttpResponseMessage Register([FromBody]dynamic value) 
{ 
    //convert to attribute 
    string first = value.first.ToString(); 
    string second = value.second.ToString(); 
} 

は良い読み物です:Getting Started with ASP.NET Web API 2 (C#)

+0

ありがとう!私がappositeクラスを作成したくない場合は、 'Dictionary 'を使用して、すべてのオブジェクトを直列化するのが良い解決策ですか?あなたが投稿した "Get Started"を読んでいますが、その例ではWeb APIへの呼び出しはAjaxでjavascriptから作成されています。私はC#から電話をかけます。 – Giobbo

+0

私の意見によると、それは良くない。それはあまりにもコンパクトです! –

+0

各メソッドのクラスを作成したくない場合は、もう1つの解決策があります。 –

関連する問題