我有一个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。所以无论如何都是一个问题
我试过了:
他们都有同样的问题。
不设置RequestSizeLimit
并返回413
可以通过IIS正常工作。
所以我认为这与Kestral如何在内部抛出异常时传回响应有关...
到底发生了什么?
如何让IIS / Kestral更好玩?