3 回答
TA贡献1801条经验 获得超16个赞
Kestrel 响应 413 Payload Too Large 响应,但 HttpSys 响应通用 500 Internal Server Error 响应。我假设您使用第二个。在这种情况下,您可以实现异常处理 middelware 来处理这种情况:
public class ExceptionMiddleware
{
private readonly RequestDelegate _next;
public ExceptionMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext httpContext)
{
try
{
await _next(httpContext);
}
catch (Exception ex)
{
HandleExceptionAsync(httpContext, ex);
}
}
private static void HandleExceptionAsync(HttpContext context, Exception exception)
{
if (exception is BadHttpRequestException badRequestException && badRequestException.Message == "Request body too large.")
{
context.Response.StatusCode = (int) HttpStatusCode.RequestEntityTooLarge;
}
}
}
并在 Startup.cs 中的 Configure 中注册:
public void Configure(IApplicationBuilder app)
{
...
app.UseMiddleware<ExceptionMiddleware>();
...
}
TA贡献1810条经验 获得超4个赞
基于 Alex Riabov 的回答,现在可以在不解析文本的情况下捕获实际的内部错误代码。
所以异常处理程序的更新部分是:
private static void HandleExceptionAsync(HttpContext context, Exception exception)
{
if (exception is BadHttpRequestException badRequestException && badRequestException.StatusCode == StatusCodes.Status413PayloadTooLarge)
{
context.Response.StatusCode = badRequestException.StatusCode;
}
}
TA贡献1809条经验 获得超8个赞
我在 Visual Studio 的调试中运行时遇到了同样的行为。我发现了它的DeveloperExceptionPageMiddleware原因。我fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware在BadHttpRequestException异常上方的服务器日志中注意到。
Startup.cs如预期的那样,从我的中删除它会给出 413 个响应。
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
现在显示服务器日志fail: Microsoft.AspNetCore.Server.Kestrel。
- 3 回答
- 0 关注
- 187 浏览
添加回答
举报