Как остановить IIS, возвращающий 502.3 - Bad Gateway, когда ASP.Net Core возвращает 413 (тело запроса слишком большое)? - PullRequest
0 голосов
/ 24 мая 2018

У меня есть основной сайт ASP.Net.

Я установил пользовательский максимальный размер запроса.

Либо:

 app.Use(async (context, next) =>
     {
         int limit = 1024;
         context.Features.Get<IHttpMaxRequestBodySizeFeature>().MaxRequestBodySize = limit;
         await next.Invoke();
     });

Или используя атрибут [RequestSizeLimit(1024)]

Когда я размещаю сайткак отдельное консольное приложение, оно работает правильно;возвращая 413, когда я POST - полезную нагрузку, превышающую 1 КБ ( в этом примере ).

Однако, когда я развертываюсь для размещения на IIS или запускаю из IIS express, я получаю:

Ошибка HTTP 502,3 - Bad Gateway

Вот пример контроллера, который вызывает проблему:

[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. перехват исключения и его проглатывание в конвейере промежуточного программного обеспечения

У них всех одна и та же проблема.

Не установка RequestSizeLimit и возврат413 работает корректно через IIS.

Так что я думаю, что это как-то связано с тем, как Kestral передает ответ, когда он вызывает исключение внутри ...

Что такоеточно происходит?

Как заставить IIS / Kestral хорошо играть?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...