Browse Source
Check if response has started before setting header and status code.
Resolve #20483
pull/20594/head
maliming
2 years ago
No known key found for this signature in database
GPG Key ID: A646B9CB645ECEA4
2 changed files with
23 additions and
8 deletions
-
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs
-
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs
|
|
|
@ -75,10 +75,18 @@ public class AbpExceptionFilter : IAsyncExceptionFilter, IAbpFilter, ITransientD |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true"); |
|
|
|
context.HttpContext.Response.StatusCode = (int)context |
|
|
|
.GetRequiredService<IHttpExceptionStatusCodeFinder>() |
|
|
|
.GetStatusCode(context.HttpContext, context.Exception); |
|
|
|
if (!context.HttpContext.Response.HasStarted) |
|
|
|
{ |
|
|
|
context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true"); |
|
|
|
context.HttpContext.Response.StatusCode = (int)context |
|
|
|
.GetRequiredService<IHttpExceptionStatusCodeFinder>() |
|
|
|
.GetStatusCode(context.HttpContext, context.Exception); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
var logger = context.GetService<ILogger<AbpExceptionFilter>>(NullLogger<AbpExceptionFilter>.Instance)!; |
|
|
|
logger.LogWarning("HTTP response has already started, cannot set headers and status code!"); |
|
|
|
} |
|
|
|
|
|
|
|
context.Result = new ObjectResult(new RemoteServiceErrorResponse(remoteServiceErrorInfo)); |
|
|
|
} |
|
|
|
|
|
|
|
@ -103,10 +103,17 @@ public class AbpExceptionPageFilter : IAsyncPageFilter, IAbpFilter, ITransientDe |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true"); |
|
|
|
context.HttpContext.Response.StatusCode = (int)context |
|
|
|
.GetRequiredService<IHttpExceptionStatusCodeFinder>() |
|
|
|
.GetStatusCode(context.HttpContext, context.Exception!); |
|
|
|
if (!context.HttpContext.Response.HasStarted) |
|
|
|
{ |
|
|
|
context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true"); |
|
|
|
context.HttpContext.Response.StatusCode = (int)context |
|
|
|
.GetRequiredService<IHttpExceptionStatusCodeFinder>() |
|
|
|
.GetStatusCode(context.HttpContext, context.Exception!); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
logger.LogWarning("HTTP response has already started, cannot set headers and status code!"); |
|
|
|
} |
|
|
|
|
|
|
|
context.Result = new ObjectResult(new RemoteServiceErrorResponse(remoteServiceErrorInfo)); |
|
|
|
} |
|
|
|
|