2016-11-15 24 views
0

我是Web API的新手,我有問題無法解決。ASP.NET - 調用並處理具有多個不同參數的Web API

這是我的問題:如何調用需要多個參數(流或對象以及兩個或三個字符串)的Web API?以及如何處理Web API內的這些參數?

例如,我在我的網頁API這種方法:

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

哪裏流是文件流(或在其他情況下的對象)。 如何將所有這些參數添加到客戶端請求主體?以及如何從那裏拿走他們並用於該方法?

編輯: 這個解決方案好嗎? 這裏的客戶端:

{ 
     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

好的,謝謝!但我的第一個問題是如何將對象添加到請求主體。第二次如何在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

謝謝!如果我不想創建一個適用類,使用'Dictionary '並序列化每個對象是一個很好的解決方案?我閱讀了您發佈的「入門」,但在該示例中,調用web api是使用Ajax製作的。我會打電話從C#。 – Giobbo

+0

根據我的意見。這不好。它也被複制! –

+0

如果您不想爲每種方法創建類,那麼還有第二種解決方案。 –

相關問題