当ASP.Net Core返回413(请求体太大)时,如何阻止IIS返回502.3 - Bad Gateway?

时间:2018-05-24 02:13:27

标签: 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();
     });

或使用属性[RequestSizeLimit(1024)]

当我将该网站作为独立的控制台应用程序托管时,它可以正常工作;当我413有效负载大于1k时返回POST(在此示例中为 )。

但是,当我部署在IIS上托管或从IIS Express中运行时,我得到:

  

HTTP错误502.3 - 错误网关

这是一个触发问题的示例控制器:

[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);
    }
}

我不知道从Body流中读取是否有所作为。但由于原因,我需要逐字保存身体到Db。所以无论如何都是一个问题

我试过了:

  1. 捕捉异常并将其吞入控制器
  2. 捕捉异常并将其重新投入控制器
  3. 捕获异常并将其吞入中间件管道
  4. 他们都有同样的问题。

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

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

    到底发生了什么?

    如何让IIS / Kestral更好玩?

0 个答案:

没有答案