2016-08-01 16 views

Trả lời

14

Có thể bạn đang nhận được mã trạng thái HTTP 404.13 khi bạn tải lên bất kỳ tệp nào trên 30MB. Nếu bạn đang chạy ứng dụng ASP.Net Core của mình trong IIS, thì đường ống IIS sẽ chặn yêu cầu của bạn trước khi nó truy cập ứng dụng của bạn.

Cập nhật web.config của bạn:

<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> 

ứng dụng ASP.Net trước đây cũng cần phần này, nhưng nó không cần thiết nữa trong lõi như yêu cầu của bạn được xử lý bởi middleware:

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

Bạn có thể có nghĩa là 30MB, không GB – jao

12

Trong ASP.NET Core 1.1 dự án mà Crated bởi Visual Studio 2017, nếu bạn muốn tăng kích thước tập tin tải lên. Bạn cần phải tạo file web.config của chính mình, và thêm các nội dung:

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

Trong file Startup.cs, thêm các nội dung:

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

    services.AddMvc(); 
} 
+1

Nội dung web.config bạn liệt kê là không đúng; bạn cần một thẻ đóng khác cho và thẻ cần được đặt bên trong thẻ , thẻ này cần phải nằm trong thẻ . Nếu không, bạn sẽ nhận được lỗi HTTP 500. –

19

Những câu trả lời khác giải quyết IIS hạn chế. Tuy nhiên, kể từ ASP.NET Core 2.0, máy chủ Kestrel cũng áp đặt các giới hạn mặc định của riêng nó.

Github of KestrelServerLimits.cs

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

MVC Hướng dẫn

Nếu bạn muốn thay đổi giới hạn kích thước theo yêu cầu cơ thể tối đa cho một hành động cụ thể MVC hoặc bộ điều khiển, bạn có thể sử dụng thuộc tính RequestSizeLimit. Sau đây sẽ cho phép MyAction chấp nhận các cơ quan yêu cầu lên tới 100.000.000 byte.

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

[DisableRequestSizeLimit] có thể được sử dụng để yêu cầu kích thước không giới hạn. Điều này có hiệu quả khôi phục lại hành vi trước 2.0.0 chỉ cho hành động hoặc bộ điều khiển được phân bổ.

Generic Middleware Hướng dẫn

Nếu yêu cầu không được xử lý bởi một hành động MVC, giới hạn vẫn có thể được sửa đổi trên cơ sở theo yêu cầu sử dụng IHttpMaxRequestBodySizeFeature. Ví dụ:

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

MaxRequestBodySize là giá trị vô hiệu. Đặt nó thành null sẽ vô hiệu hóa giới hạn như [DisableRequestSizeLimit] của MVC.

Bạn chỉ có thể định cấu hình giới hạn cho yêu cầu nếu ứng dụng chưa bắt đầu đọc; nếu không thì một ngoại lệ sẽ bị ném.Có thuộc tính IsReadOnly cho bạn biết nếu thuộc tính MaxRequestBodySize ở trạng thái chỉ đọc, có nghĩa là đã quá muộn để định cấu hình giới hạn.

toàn cầu Config Hướng dẫn

Nếu bạn muốn thay đổi kích thước theo yêu cầu cơ thể tối đa trên toàn cầu, điều này có thể được thực hiện bằng cách thay đổi một tài sản MaxRequestBodySize trong callback của một trong hai UseKestrel hoặc UseHttpSys. MaxRequestBodySize là một giá trị rỗng trong cả hai trường hợp. Ví dụ:

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

hoặc

.UseHttpSys(options => 
{ 
    options.MaxRequestBodySize = 100_000_000; 
Các vấn đề liên quan