2016-08-01 78 views

回答

14

当您上传超过30MB的任何文件时,您可能会收到404.13 HTTP状态码。如果您在IIS中运行ASP.Net Core应用程序,则IIS管道会在您的请求到达您的应用程序之前拦截您的请求。

更新你的web.config:

<system.webServer> 
    <handlers> 
     <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/> 
    </handlers> 
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/> 
    <!-- Add this section for file size... --> 
    <security> 
     <requestFiltering> 
     <!-- Measured in Bytes --> 
     <requestLimits maxAllowedContentLength="1073741824" /> <!-- 1 GB--> 
     </requestFiltering> 
    </security> 
    </system.webServer> 

上一页ASP.Net应用程序也需要这部分,但它作为你的请求被处理的中间件不再在核心需要:

<system.web> 
    <!-- Measured in kilobytes --> 
    <httpRuntime maxRequestLength="1048576" /> 
    </system.web> 
+0

你可能意味着30MB,而不是GB – jao

12

在如果您想增加上传文件大小,则由Visual Studio 2017制作的ASP.NET Core 1.1项目。你需要自己创建的web.config文件,并添加以下内容:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.webServer> 
    <security> 
     <requestFiltering> 
     <!-- 1 GB --> 
     <requestLimits maxAllowedContentLength="1073741824" /> 
     </requestFiltering> 
    </security> 
    </system.webServer> 
</configuration> 

在Startup.cs文件,添加这些内容:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.Configure<FormOptions>(x => 
    { 
     x.ValueLengthLimit = int.MaxValue; 
     x.MultipartBodyLengthLimit = int.MaxValue; 
     x.MultipartHeadersLengthLimit = int.MaxValue; 
    }); 

    services.AddMvc(); 
} 
+1

你列出不正确的web.config文件的内容;您需要使用另一个结束标记,而标记需要放在标记内,而标记又需要位于标记内。如果没有,您将收到HTTP 500错误。 –

19

其他的答案解决IIS限制。但是,截至ASP.NET Core 2.0,Kestrel服务器也强加了它自己的默认限制。

Github of KestrelServerLimits.cs

Announcement of request body size limit and solution (quoted below)

MVC说明

如果你想改变最大请求体大小限制为特定的MVC动作或控制器,你可以使用RequestSizeLimit属性。以下将允许MyAction接受高达100,000,000字节的请求体。

[HttpPost] 
[RequestSizeLimit(100_000_000)] 
public IActionResult MyAction([FromBody] MyViewModel data) 
{ 

[DisableRequestSizeLimit]可用于使请求大小无限制。这有效地恢复了2.0.0版本以前的行为,只是为了分配属性的操作或控制器。

通用中间件说明书

如果请求不被通过MVC动作处理,所述限制仍然可以使用所述IHttpMaxRequestBodySizeFeature每个请求基础的修正。例如:

app.Run(async context => 
{ 
    context.Features.Get<IHttpMaxRequestBodySizeFeature>().MaxRequestBodySize = 100_000_000; 

MaxRequestBodySize是一个可为空的long。将其设置为null将禁用像MVC的[DisableRequestSizeLimit]这样的限制。

如果应用程序尚未开始读取,您只能配置请求限制;否则会引发异常。有一个IsReadOnly属性,告诉您MaxRequestBodySize属性是否处于只读状态,这意味着配置限制太迟了。

全局配置说明

如果你想在全球范围内修改最大请求的车身尺寸,这可以通过在任一UseKestrelUseHttpSys回调修改MaxRequestBodySize属性来完成。在这两种情况下,MaxRequestBodySize都是可以为空的。例如:

.UseKestrel(options => 
{ 
    options.Limits.MaxRequestBodySize = null; 

.UseHttpSys(options => 
{ 
    options.MaxRequestBodySize = 100_000_000;