Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 413请求实体太大-Web API_Asp.net_Asp.net Core_Iis_Asp.net Web Api_Http Status Code 413 - Fatal编程技术网

Asp.net 413请求实体太大-Web API

Asp.net 413请求实体太大-Web API,asp.net,asp.net-core,iis,asp.net-web-api,http-status-code-413,Asp.net,Asp.net Core,Iis,Asp.net Web Api,Http Status Code 413,我在尝试将数据从web应用程序(.netfx 4.6.1)发送到web api(.net core 3.1)时遇到了413问题。在下面的代码中,我发送了一个列表,其中包含图像的字节数据以及构建文件所需的其他数据。预期的输出是返回包含新文件的字节数组。不幸的是,当发送请求时,我收到一个错误:响应状态代码不表示成功:413(请求实体太大) 错误似乎只在文件开始时较大时发生,这是有道理的。我所做的研究似乎指向IIS中的设置,主要有maxAllowedContentLength、maxRequestLe

我在尝试将数据从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;
    }
公共静态异步任务CreatePdfFromImageFilesAsync(列出imageFiles)
{
var list=新列表();
foreach(imageFiles中的变量项)
{
列表。添加(新)
{
数据=Convert.tobase64字符串(item.Bytes),
PageOrder=item.PageOrder,
旋转=项目。旋转,
Type=“PDF”
});
}
var response=_client.PostAsJsonAsync($“{FileCreatorAPI}/api/files/CreateFileFromMultiple”,list);
var result=response.EnsureSuccessStatusCode();
var bytes=wait result.Content.ReadAsAsync();
返回字节;
}

您能检查该属性吗? 使用

在控制器入口点上,或更全局地设置它:

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

编辑:来自MS的文章:

我认为问题出在服务器上。服务器正在终止请求,因为它超过了配置的最大允许请求大小

您使用的是哪台服务器? 对于Nginx用户,决定允许的HTTP请求大小的指令是
client\u max\u body\u 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;
                });
//如果使用红隼:
.Configure(选项=>
{
options.AllowSynchronousIO=true;
//options.Limits.MaxRequestBodySize=null;--不起作用
options.Limits.MaxRequestBodySize=int.MaxValue;
})
//如果使用IIS:
.Configure(选项=>
{
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>


我添加了该属性,但得到了相同的结果。我有一个setup+web.config和您提到的参数,它正在解决HTTP 413错误。你将两者结合起来吗?是的,我已经将这两个部分添加到我的应用程序中,它仍然给出相同的响应。我能够回到这个问题上,并且在再次发布后,它似乎解决了我的问题,同时增加了IIS中的设置。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="2147483648" />
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>