提问人:Szyszka947 提问时间:1/1/2023 最后编辑:Szyszka947 更新时间:1/1/2023 访问量:257
无法写入 AuthenticationHandler 中的 HttpContext.Response
Cannot write to a HttpContext.Response in AuthenticationHandler
问:
在我的自定义中,我想像这样写入一些数据:AuthenticationHandler
HttpContext.Response
protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
{
await Context.Response.WriteAsJsonAsync(new SomeObject(), Context.RequestAborted);
return AuthenticateResult.Fail("something went wrong");
}
我总是遇到例外:
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1] 执行请求时发生未经处理的异常。 System.InvalidOperationException:无法设置 StatusCode,因为响应已启动。
使用这些堆栈跟踪:
在 Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ThrowResponseAlreadyStartedException(字符串值) 在 Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.set_StatusCode(Int32 值) 在 Microsoft.AspNetCore.Authentication.AuthenticationHandler1.ChallengeAsync(AuthenticationProperties 属性) 在 Microsoft.AspNetCore.Authentication.AuthenticationService.ChallengeAsync (HttpContext 上下文、 字符串方案、 AuthenticationProperties 属性) 在 Microsoft.AspNetCore.Authorization.Policy.AuthorizationMiddlewareResultHandler.<>c__DisplayClass0_0.<g__Handle|0>d.MoveNext() --- 从上一个位置---结束堆栈跟踪
1.HandleChallengeAsync(AuthenticationProperties properties) at Microsoft.AspNetCore.Authentication.AuthenticationHandler
和:
在 Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext 上下文) 在 Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext 上下文) 在 Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext 上下文) 在 Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext 上下文) 在 Microsoft.AspNetCore.Watch.BrowserRefresh.BrowserRefreshMiddleware.InvokeAsync(HttpContext 上下文) 在 Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication'1 应用程序)
以为出现此错误,我的请求已中止,我没有得到任何响应。如果在写入响应后我调用,则仍然会抛出异常,但我得到响应。Response.CompleteAsync()
此外,我没有任何自定义中间件。我该如何解决这个问题?
答: 暂无答案
评论
WriteAsJsonAsync
WriteAsJsonAsync
WriteAsJsonAsync
Fail
RequestAborted
InvalidOperationException: StatusCode cannot be set because the response has already started.