2016-08-15 21 views
3

POSTメソッドを持つWeb APIコントローラが次のように用意されています。POSTメソッドにパラメータとして渡すことができるオブジェクトの最大サイズ

public class MyController : ApiController 
{ 
    // POST: api/Scoring 
    public HttpResponseMessage Post([FromBody]MyClass request) 
    { 
     // some processing of request object 
     return Request.CreateResponse(HttpStatusCode.OK, someResponseObject); 
    } 
    .... 
} 

これは

HttpClient httpClient = new HttpClient(); 
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
httpClient.BaseAddress = new Uri("http://localhost"); 
MyClass requestClient = new MyClass(); 
var task = httpClient.PostAsJsonAsync("api/my", requestClient) 

を次のようにMyObjectにオブジェクトのサイズがコントローラのPOSTメソッドのパラメータに渡されたときに素晴らしい作品のHTTPClientによって消費されるサイズが小さいです。しかし、このオブジェクトのサイズが大きい場合、私はPOSTメソッドのパラメータで要求オブジェクトのnullを取得します。 1つのケースでは、クライアントサイドリクエストから渡されたrequestClientオブジェクトのサイズは〜5 MBであり、POSTメソッドでは、リクエストオブジェクトをnullとして取得します。 Web APIはIISでホストされていることに注意してください。許容サイズを変更する必要がある設定はありますか?

更新: 次のweb.configを追加すると、POSTメソッドのパラメータにヌルオブジェクトの問題が解決されました。

のhttpRuntime maxRequestLength = "2147483647" />

私はその後〜50メガバイトにrequestClientオブジェクトのサイズを増加させました。 POSTメソッドのコードが決して命中することはありません。クライアント側では、PostAsJsonAsynを呼び出すと、次のメッセージでSystem.Net.HttpRequestExceptionが発生します。

応答ステータスコードが成功を示していない:404(見つかりません)。

ここでmaxRequestLengthを変更しても影響はありません。 OPから

+1

の可能性のある重複(HTTP [ポスト要求のサイズの上限は?] ://stackoverflow.com/questions/2364840/what-is-the-size-limit-of-a-post-request) – ssbb

+0

@ssbbただし、このリンクはAPIの問題を解決する方法を教えてくれませんIISでホストされている –

答えて

4

> then increased the size of requestClient object to ~50MB. Now the code in POST method never getting hit. On the client side, at the call to PostAsJsonAsyn, I get System.Net.HttpRequestException with following message. 

Response status code does not indicate success: 404 (Not Found). 

Now changing maxRequestLength doesn’t seem to have any impact. 

場合リクエストフィルタリングブロックHTTPリクエストのHTTPリクエストは、リクエストの制限を超えているため、IISは、クライアントにHTTP 404エラーを返すとして次のHTTPステータスのいずれかを記録します要求が拒否されたことを理由識別する固有の副状態:最大の制限の問題を解決するための

HTTP Substatus  Description 
404.13     Content Length Too Large 
404.14     URL Too Long 
404.15     Query String Too Long 
..etc 

は、((IIS)7.0以上で導入された組み込みのセキュリティ機能)要求のフィルタリング役割サービスをする必要があります構成:SERVER MA NAGER GUIまたはコマンドユーティリティAppcmd.exeのか、Configuration詳細レビューのweb.config

<configuration> 
     <system.webServer> 
      <security> 
      <requestFiltering> 
       ..... 

       <!-- limit post size to 10mb, query string to 256 chars, url to 1024 chars --> 
       <requestLimits maxQueryString="256" maxUrl="1024" maxAllowedContentLength="102400000" /> 

       ..... 
      </requestFiltering> 
      </security> 
     </system.webServer> 
    </configuration> 

を変更:

https://www.iis.net/configreference/system.webserver/security/requestfiltering

関連する問題