2019年2月22日金曜日

サイズの大きいデータをPOSTすると404エラーが発生する

ASP.NETで作成したWeb APIに対し、HttpClientを使用して、JSONデータをPOSTするコードを書きました。

using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.Clear();
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

    var content = new StringContent(jsonString, Encoding.UTF8, "application/json");
    var task= client.PostAsync(uri, content).ContinueWith(x =>
    {
        var response = x.Result;
        if (!response.IsSuccessStatusCode)
        {
            throw new Exception(response.ReasonPhrase);
        }

        ・・・
    });
    try
    {
        task.Wait();
    }
    catch (AggregateException ex)
    {
        throw ex.Flatten();
    }
    catch
    {
        throw;
    }
}

40MB近くあるデータをPOSTしたところ、レスポンスに「Not Found」、いわゆる404エラーが返ってきました。












送信データサイズが小さい場合は問題はなく、エラーの原因がサイズの大きさにあることは明らかなのですが、
サーバーが受け取るリクエストの最大サイズはmaxRequestLengthですでに指定しています。
調べてみると、どうやらそれだけでは不十分で、リクエスト内のコンテンツ最大長(maxAllowedContentLength)の指定も
必要だということが分かりました。
web.configにmaxAllowedContentLengthを追加し、送信データサイズ以上の値を指定すると、エラーが返ることはなくなりました。

  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="52428800"></requestLimits>
      </requestFiltering>
    </security>
  </system.webServer>

またいつか、どこかで。

0 件のコメント:

コメントを投稿