IIS / ASP.NET:发送(POST)1M字节长度请求的问题

时间:2014-10-21 07:51:54

标签: asp.net http iis asp.net-web-api

在调试用于保存文件的WebAPI控制器时遇到了一个奇怪的情况。

我的控制器有一种发布数据的方法

    [HttpPost]
    [HttpPut]
    public async Task<HttpResponseMessage> Upload()
    {
        if (!request.Content.IsMimeMultipartContent())
        {
            throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
        }
        var provider = await request.Content.ReadAsMultipartAsync();
        MultipartFileData file = provider.FileData.FirstOrDefault();
        // this is the uploaded file: file.LocalFileName
    }

控制器的逻辑在这里并不重要。这里的关键点是控制器需要多部分内容。

现在来自我使用jquery.fileupload库的客户端,我通过POST方法发送文件 我在控制器的上传方法的第一行设置了一个断点,并从客户端发送一个文件。断点消失了。它在所有文件上传到服务器之前就消失了。这是预期的行为,一切都很好。

现在问题。我发送一个大文件,断点不会发生。文件正在上传(POST),控制器没有被调用! 更糟糕的是,在文件最终上传后,我在客户端上找到了404 Not Found。 我的站点位于使用ASP.NET Web API 5.1.2(.NET 4.5)的IIS下的localhost上。

我开始更改文件大小以选择事物工作时的大小。事实证明,它是1000000000(一百万字节)。如果请求的长度(数据和标头)是1M字节,那么一切正常:断点关闭并且文件被上传。如果请求的长度超过1个字节,则无效:断点没有关闭,文件似乎正在上传(即数据正在发送),但它不清楚它在哪里作为控制器上传的内容未被调用。

作为我在localhost上的网站,我无法相信它是由代理服务器造成的。

所以我的问题是怎么回事?发布1M字节请求会出现什么问题?

P.S。我知道IIS和ASP.NET对请求长度(4Gb和2Gb)的硬限制 - 不会超出它们。

2 个答案:

答案 0 :(得分:0)

IIS Manager点击您的网站并转到Configuration Editor - 您需要将maxRequestLength更改为符合您要求的值。

编辑: 设置的第二位请求限制在此处:

<system.webServer> 
  <security> 
    <requestFiltering> 
      <requestLimits maxAllowedContentLength="1000000000" /> <!-- change this -->
    </requestFiltering> 
  </security> 
</system.webServer>

答案 1 :(得分:0)

所以我完全忘记了web.config中的设置。事实证明,1M是那里设定的限制:(

<system.web>
    <httpRuntime maxRequestLength="1000000000"  />
</system.web>
<system.webServer>
    <security>
        <requestFiltering>
            <requestLimits maxAllowedContentLength="1000000000" />
        </requestFiltering>
    </security>
</system.webServer>