具体的异常信息如下:
System.InvalidOperationException: Headers are read-only, response has already started. at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameHeaders.ThrowHeadersReadOnlyException() at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.FrameHeaders.Microsoft.AspNetCore.Http.IHeaderDictionary.set_Item(String key, StringValues value) at Cnblogs.Web.ErrorPages.ErrorPage.<>c__DisplayClass1_0.<<ResponseWriteAsync>b__0>d.MoveNext()
异常发生于下面的代码:
public static class ErrorPage { public static async Task ResponseAsync(HttpResponse response, int statusCode) { if (statusCode == 404) { //... } } }
回调时使用如下回调看看:
context.Response.OnStarting((state) =>
{
if (context.Response.StatusCode == 404)
{
.....
}
return Task.FromResult(0);
}, null);
重新 create 一个新的 HttpResponse
可能是当前传入的这个response已经生成了,生成之后就不允许再进行修改了。
在response.WriteAsync
之前,先检测一下response
是否已经生成了。(可以通过HttpContext.Response.HasStarted
属性判断)
好东西好东西好东西