当ASP.Net核心返回413(请求正文太大)时,如何阻止IIS返回502.3-坏网关?

当ASP.Net核心返回413(请求正文太大)时,如何阻止IIS返回502.3-坏网关?,asp.net,iis,asp.net-core,iis-express,kestrel-http-server,Asp.net,Iis,Asp.net Core,Iis Express,Kestrel Http Server,我有一个ASP.Net核心网站 我已设置了自定义的最大请求大小 要么: app.Use(async (context, next) => { int limit = 1024; context.Features.Get<IHttpMaxRequestBodySizeFeature>().MaxRequestBodySize = limit; await next.Invoke(); }); 我不知道从

我有一个ASP.Net核心网站

我已设置了自定义的最大请求大小

要么:

 app.Use(async (context, next) =>
     {
         int limit = 1024;
         context.Features.Get<IHttpMaxRequestBodySizeFeature>().MaxRequestBodySize = limit;
         await next.Invoke();
     });
我不知道从身体流中阅读是否有区别。但由于种种原因,我需要将正文逐字保存到Db。所以不管怎样,这都是个问题

我试过:

  • 捕获异常并将其放入控制器中
  • 捕获异常并将其重新抛出控制器
  • 捕获异常并在中间件管道中吞咽它
  • 他们都有同样的问题

    但是,不设置
    RequestSizeLimit
    并返回
    413
    可以通过IIS正常工作

    所以我认为这与Kestral在内部抛出异常时如何传回响应有关

    到底发生了什么事?


    如何让IIS/Kestral玩得更好?

    @LexLi你是说我会发现我在那里寻找,还是我应该记录一个问题?
    [Route("api/values")]
    public class ValuesController : Controller
    {
        // POST api/values
        [HttpPost]
        [RequestSizeLimit(1024)]
        public IActionResult Post()
        {
            string echo= "";
            try
            {
                using (StreamReader sr= new StreamReader(Request.Body))
                {
                    echo = sr.ReadToEnd();
                }
            }
            catch (Exception ex)
            {
                return StatusCode(413);
            }
            return StatusCode(200, echo);
        }
    }