簡體   English   中英

413 請求實體太大 - Web API

[英]413 request entity too large - Web API

我在嘗試將數據從我的 Web 應用程序 (.netfx 4.6.1) 發送到我的 Web api (.net core 3.1) 時遇到了 413 問題。 在下面的代碼中,我發送了一個列表,其中包含圖像的字節數據以及構建文件所需的附加數據。 預期的輸出是返回一個包含新文件的字節數組。 不幸的是,在發送請求時,我收到一個錯誤:響應狀態代碼不表示成功:413(請求實體太大)。

該錯誤似乎僅在文件很大時才會發生,這是有道理的。 我所做的研究似乎指向 IIS 中的設置,主要是 maxAllowedContentLength、maxRequestLength 和 uploadReadAheadSize。 我嘗試將這些值增加到更適合此過程的值,但似乎沒有任何效果。 我已經針對 web 應用程序和 web api 調整了它們,因為我不確定是哪個導致了問題。

問題出在哪里? 在應用程序中,API,還是兩者兼而有之? 我是否缺少允許增加尺寸的其他設置? 我發送請求的方式有問題嗎? 任何幫助表示贊賞。

    public static async Task<byte[]> CreatePdfFromImageFilesAsync(List<ImageFile> imageFiles)
    {
        var list = new List<dynamic>();
        foreach (var item in imageFiles)
        {
            list.Add(new
            {
                Data = Convert.ToBase64String(item.Bytes),
                PageOrder = item.PageOrder,
                Rotation = item.Rotation,
                Type = "PDF"
            });
        }

        var response = _client.PostAsJsonAsync($"{FileCreatorAPI}/api/files/CreateFileFromMultiple", list).Result;
        var result = response.EnsureSuccessStatusCode();
        var bytes = await result.Content.ReadAsAsync<byte[]>();
        return bytes;
    }

您可以檢查該屬性https://github.com/aspnet/Announcements/issues/267嗎? 使用

[RequestSizeLimit(100_000_000)] 

在您的控制器入口點上,或更全局地以這種方式設置它:

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

編輯:來自 MS 的文章: https : //dotnet.microsoft.com/download/dotnet-core

我認為問題出在服務器上。 服務器正在終止請求,因為它超過了它配置的最大允許請求大小。

您使用的是哪個服務器? 對於 Nginx 用戶,決定允許的 HTTP 請求大小的指令是client_max_body_size ,默認的最大允許請求大小為 1MB。 Apache 中的限制是通過 LimitRequestBody 指令設置的,默認為 0(表示無限制)到 2147483647 (2GB)。

如果您使用這兩個服務器中的任何一個,請查看這篇文章,了解如何修復它。

以下更改對我有用

                // If using Kestrel:
                .Configure<KestrelServerOptions>(options =>
                {
                    options.AllowSynchronousIO = true;
                    //options.Limits.MaxRequestBodySize = null; --did not worked
                    options.Limits.MaxRequestBodySize = int.MaxValue;
                })
                // If using IIS:
                .Configure<IISServerOptions>(options =>
                {
                    options.AllowSynchronousIO = true;
                    //options.MaxRequestBodySize = null;
                    options.MaxRequestBodySize = int.MaxValue;
                });

創建 web.config 文件並添加以下配置

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM