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 關注
- 223 瀏覽
添加回答
舉報