我无法在我的简单代码中克服这个错误。为什么 SignInManager 不断抛出错误: 无法设置OnStarting,因为响应已经开始。 我正在从 blazor Onclick 事件调用我的 _SignIn 方法
public async Task _SignIn()
{
SignInByUsernamePasswordModel model = new();
model.Username = this.Username;
model.Password = this.Password;
try
{
await signInComponent._SignInByUsernamePassword(model);
}
catch (Exception ex)
{
}
}
public async Task<SignInResult> _SignInByUsernamePassword(SignInByUsernamePasswordModel model)
{
string username = model.Username;
string password = model.Password;
SignInResult signInResult2 = new SignInResult() ;
try
{
SignInResult signInResult = await _SignInManager.PasswordSignInAsync(model.Username, model.Password, false, false); ;
return signInResult;
}
catch (Exception ex){
*****Exception is thrown here!****
}
return signInResult2;
}
Cookie 设置之前给了我另一个错误,直到我修复了此代码,但这不是罪魁祸首。我无法想象它在什么时候抛出错误,即在创建 cookie 时?
builder.Services.AddAuthenticationCore().AddAuthentication()
.AddCookie(IdentityConstants.ApplicationScheme, options =>
{
options.ExpireTimeSpan = TimeSpan.FromMinutes(20);
options.SlidingExpiration = true;
});
研究下面的错误堆栈中的主要错误,得出的结论是 SigninManager 将立即开始发送响应或将请求流反转为请求/响应管道中的响应流。其背后的原因是,登录管理器使用HTTPContext来创建cookie。
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ThrowResponseAlreadyStartedException(String value)
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.OnStarting(Func`2 callback, Object state)
本文介绍https://startblazoring.com/Blog/SignInManager SigninManager 不能直接与 Blazor 一起使用。
SignInManager 不能与 razor 组件一起使用,因为当您使用 'PasswordSignInAsync' 方法时它会抛出异常。为了解决这个问题, 你可以参考这篇文章