web-dev-qa-db-ja.com

Asp.net Core 2.0 RequestSizeLimit属性が機能しない

Asp.netコア2.0でファイルをアップロードできるWebサイトを作成しています。すぐに30MBアップロード制限の問題に遭遇し、サーバーから404応答を受け取りました。この制限以下では、すべてが正常に動作します。

私はこのような多くの解決策をウェブ上で見つけました: Asp.Netコアのアップロードファイルサイズを増やす 。私の問題は、このソリューションを機能させることができず、404を超えても30MBの応答が得られることです。

私の呼び出しはajaxの呼び出しで、次のようになります。

function uploadMedia(isPhoto, files) {
  var type;
  if (isPhoto) {
    type = "i";
  } else {
    type = "v";
  }

  var data = new FormData();
  if (files.length > 0) {
    for (idx = 0; idx < files.length; idx++) {
      if (files[idx].size < 1074790400) {
        data.append("fileImage" + idx, files[idx]);
      } else {
        BootstrapDialog.show({
          type: BootstrapDialog.TYPE_WARNING,
          title: "Validation Error",
          message: "The maximum file size for images is 1GB. Please resize your image and upload again.",
          buttons: [
            {
              label: "OK",
              action: function(dialogItself) {
                dialogItself.close();
              }
            }
          ]
        });
      }
    }

    $.ajax({
      url: "/api/article/uploadfile/" + type,
      type: "POST",
      processData: false,
      contentType: false,
      dataType: false,
      data: data,
      success: function(jsonData) {
        refreshUploadedImages(jsonData, isPhoto);
      }
    });
  }
}

function rotateImageAnticlockwise(element) {
  var id = $(element).attr("data-id");
  var mediaData = getMediaData(id, true);

  $.ajax({
    url: "/api/article/rotateMedia/a/p/" + mediaData.fileId + "/" + mediaData.rotation,
    type: "POST",
    processData: false,
    contentType: false,
    success: function(jsonData) {
      refreshRotatedImage(jsonData);
    }
  });
}

次に、私のサーバー側メソッドには次のような属性があります。

[HttpPost]
[RequestSizeLimit(1074790400)]
[Route("api/article/uploadfile/{mediaType}")]
public async Task<IActionResult> UploadFile(string mediaType)

誰かが私が間違っていることを見ることができますか?これは私を怒らせています!!!

15
Slade

同じ問題を抱えている他の人にとっては、これが答えです。

Mark LaFleurの答えは正しい方向でしたが、web.configには重要なセクションがありませんでした。

私は助けられましたが、Asp.net Coreのweb.configファイルの詳細を説明するこのWebページ: ASP.NET Core Module configuration reference

このエラーを停止するには、次の内容のweb.configファイルを作成する必要があります。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <security>
      <requestFiltering>
        <!-- This will handle requests up to 50MB -->
        <requestLimits maxAllowedContentLength="52428800" />
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>
10
Slade

RequestSizeLimit属性を使用すると、コード内で最大リクエストサイズを定義できますが、サーバー自体がサポートする最大リクエストサイズによって制限されます。

この場合、このエラーが表示されていると思います。

HTTP 404.13 - Not Found
The request filtering module is configured to deny a request that exceeds the request content length.

このエラーは、ISSによってトリガーされています。これは、呼び出しがIISのmaxAllowedContentLength値を超えたためです(デフォルトは30,000,000です)。 ドキュメント から:

次のエラーは、ファイルのアップロードがサーバーの構成済みmaxAllowedContentLengthを超えていることを示しています。デフォルト設定は30000000で、約28.6MBです。 web.configを編集して、値をカスタマイズできます。

<system.webServer>
  <security>
    <requestFiltering>
      <!-- This will handle requests up to 50MB -->
      <requestLimits maxAllowedContentLength="52428800" />
    </requestFiltering>
  </security>
</system.webServer>
3
Marc LaFleur