Asp.net Core 2.0 RequestSizeLimit属性不起作用

时间:2018-05-07 19:07:18

标签: javascript c# asp.net-core

我在Asp.net core 2.0中创建了一个允许上传文件的网站。我很快遇到了30MB上传限制的问题,并从服务器收到404响应。低于此限制一切正常。

我在网上发现了许多像这样的解决方案: Increase upload file size in Asp.Net core。我的问题是我无法使用此解决方案,而且在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)

谁能看到我做错了什么?这让我很生气!

2 个答案:

答案 0 :(得分:8)

对于有同样问题的其他人,这就是答案。

Mark LaFleur的答案是正确的方向,但web.config缺少一个关键部分。

我得到了帮助,但这个网页解释了有关Asp.net Core中web.config文件的更多信息: 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>

答案 1 :(得分:1)

RequestSizeLimit属性允许您在代码中定义最大请求大小,但仍受服务器本身支持的最大请求大小的限制。

在这种情况下,我怀疑您收到此错误:

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

此错误由ISS触发,因为呼叫超出了IIS&#39; maxAllowedContentLength值(默认值为30,000,000)。来自the documentation

  

以下错误表示您的文件上传超出了服务器配置的maxAllowedContentLength。默认设置为30000000,大约为28.6MB。可以通过编辑web.config

来自定义该值      
<system.webServer>
  <security>
    <requestFiltering>
      <!-- This will handle requests up to 50MB -->
      <requestLimits maxAllowedContentLength="52428800" />
    </requestFiltering>
  </security>
</system.webServer>