Browse Source

Check if response has started before setting header and status code.

Resolve #20483
pull/20594/head
maliming 2 years ago
parent
commit
f99c489ec8
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 16
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs
  2. 15
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs

16
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs

@ -75,10 +75,18 @@ public class AbpExceptionFilter : IAsyncExceptionFilter, IAbpFilter, ITransientD
} }
else else
{ {
context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true"); if (!context.HttpContext.Response.HasStarted)
context.HttpContext.Response.StatusCode = (int)context {
.GetRequiredService<IHttpExceptionStatusCodeFinder>() context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true");
.GetStatusCode(context.HttpContext, context.Exception); 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)); context.Result = new ObjectResult(new RemoteServiceErrorResponse(remoteServiceErrorInfo));
} }

15
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs

@ -103,10 +103,17 @@ public class AbpExceptionPageFilter : IAsyncPageFilter, IAbpFilter, ITransientDe
} }
else else
{ {
context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true"); if (!context.HttpContext.Response.HasStarted)
context.HttpContext.Response.StatusCode = (int)context {
.GetRequiredService<IHttpExceptionStatusCodeFinder>() context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true");
.GetStatusCode(context.HttpContext, context.Exception!); 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)); context.Result = new ObjectResult(new RemoteServiceErrorResponse(remoteServiceErrorInfo));
} }

Loading…
Cancel
Save