У меня есть основной сайт 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.Так что это проблема в любом случае
Я пытался:
- Поймать исключение и проглотить его в контроллере
- Поймать исключение и повторно выброситьв контроллере
- перехват исключения и его проглатывание в конвейере промежуточного программного обеспечения
У них всех одна и та же проблема.
Не установка RequestSizeLimit
и возврат413
работает корректно через IIS.
Так что я думаю, что это как-то связано с тем, как Kestral передает ответ, когда он вызывает исключение внутри ...
Что такоеточно происходит?
Как заставить IIS / Kestral хорошо играть?