无法设置OnStarting,因为响应已经开始。 - 登录管理器

问题描述 投票:0回答:2

我无法在我的简单代码中克服这个错误。为什么 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;
});
asp.net-core identity
2个回答
0
投票

研究下面的错误堆栈中的主要错误,得出的结论是 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 一起使用。


0
投票

SignInManager 不能与 razor 组件一起使用,因为当您使用 'PasswordSignInAsync' 方法时它会抛出异常。为了解决这个问题, 你可以参考这篇文章

© www.soinside.com 2019 - 2024. All rights reserved.