2013-09-27 90 views
3

如何將複雜對象(可能有大量數據)發送到Web API獲取方法? 我知道我可以使用'FromUri'選項,但由於數據太大,我無法使用該選項。我想要用戶'FromBody'選項。但我可以發佈數據到Get Method ?????以複雜對象爲參數的Web API獲取方法

提前

回答

15

如何發送一個複雜的對象(其中可能有巨大的數據)到Web API請指引我在這裏...感謝GET方法?

你不行。 GET方法沒有請求體。你必須發送有限制的查詢字符串中的所有內容。

您應該使用POST代替。

+0

所以在這種情況...「WCF」與「WebAPI」相比是更好的選擇。因爲在GET中發佈巨大的數據可能不是一個好主意? –

+3

@KokiralaSudheer,你不能在GET中發佈數據:-)你自相矛盾。 WCF根本無法幫到你。我建議你閱讀HTTP協議規範,熟悉GET和POST動詞,最重要的是要區分它們的差異。當您使用GET謂詞時,請求沒有任何主體。您只能使用查詢字符串參數將值發送到服務器。如果你需要發送大量數據到服務器,你應該使用POST。 –

+0

@KokiralaSudheer想一想吧: 'GET:提供了一個URL,會得到一些數據.' 'POST:提供了一個URL和一些數據,將發送一些數據並獲得一些數據作爲回報.' –

1

你需要創建一個類似於下面的方法:

[HttpPost] 
public HttpResponseMessage MyMethod([FromBody] MyComplexObject body) 
{ 
    try 
    { 
     // Do stuff with 'body' 
     myService.Process(body); 
    } 
    catch (MyCustomException) 
    { 
     return new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent("FAILED") }; 
    } 

    return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent("OK") }; 
} 

如果你的帳數據低於4MB大的,那麼你就需要調整你的web.config配置IIS以接受更多,下面示例設置的maxRequestLength和maxAllowedContentLength到10MB:

<system.web> 
    <httpRuntime maxRequestLength="10240" /> 
</system.web> 

<system.webServer> 
     <security> 
      <requestFiltering> 
      <requestLimits maxAllowedContentLength="10485760" /> 
      </requestFiltering> 
     </security> 
</system.webServer> 
+0

So In這種情況...「WCF」與「WebAPI」相比是更好的選擇。因爲在GET中發佈巨大的數據可能不是一個好主意? –

+0

您無法使用HTTP GET發送數據,但您被限制爲通常少於2000個字符的URI。如果您需要將大量數據發佈到服務端點,則應使用HTTP POST並將數據放入主體中。 –

+0

我不會比較WCF或Web API。每個都有其適當的應用。 –

相關問題