我正在创建我的第一个 Blazor 应用程序并尝试实现帐户注册功能。如果用户输入有效的电子邮件和密码进行注册,我想注册他们,在他们的新帐户下登录,然后将他们路由到“/fetchdata”页面。
UserService.cs
public class RegisterResponse
{
public bool Succeeded;
public string Message;
}
public async Task<RegisterResponse> Register(string email, string password)
{
var user = new IdentityUser { UserName = email, Email = email };
var result = await _userManager.CreateAsync(user, password);
if (result.Succeeded)
{
await _signInManager.SignInAsync(user, isPersistent: false);
return new RegisterResponse { Succeeded = true, Message = $"{email}'s account created!" };
}
else
{
return new RegisterResponse { Succeeded = false, Message = result.Errors.FirstOrDefault().Description };
}
}
Index.razor
private async Task Register()
{
var res = await UserService.Register(registerModel.Email, registerModel.Password);
if (res.Succeeded)
{
NavigationManager.NavigateTo("/fetchdata");
}
else
{
ErrorMessage = res.Message;
}
}
用户已注册,但是服务中使用的每个等待都会返回到客户端并且应用程序中断(最常见的原因是错误“标题为只读...”,这源于尝试在响应后编辑标题已启动)。
但我想回到 Index.razor 的唯一响应是 RegisterResponse 对象。
我这里的设置有问题吗?我应该使用控制器而不是服务吗?