Я пытаюсь реализовать компонент Login в Blazor:
namespace ApprovalMatrix.Pages
{
public class MatrixLoginBase : ComponentBase
{
public MatrixLoginModel Model { get; set; }
public EditContext LoginEditContext { get; set; }
private ValidationMessageStore _messageStore;
[Inject]
public IHttpContextAccessor HttpClient { get; set; }
protected override void OnInitialized()
{
Model = new MatrixLoginModel();
LoginEditContext = new EditContext(Model);
_messageStore = new ValidationMessageStore(LoginEditContext);
base.OnInitialized();
}
public async Task LoginAsync()
{
_messageStore.Clear();
bool isValid = LoginEditContext.Validate();
if (isValid)
{
if (Model.UserName != "sa" || Model.Password != "sa1")
{
_messageStore.Add(LoginEditContext.Field("Password"), "Invalid user name or password");
LoginEditContext.NotifyValidationStateChanged();
}
else
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, "Sys Admin"),
new Claim(ClaimTypes.Role, "Admin"),
};
var claimsIdentity = new ClaimsIdentity(
claims, CookieAuthenticationDefaults.AuthenticationScheme);
var authProperties = new AuthenticationProperties
{
IsPersistent = true,
RedirectUri = ""
};
await HttpClient.HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIdentity),
authProperties);
}
}
}
}
public class MatrixLoginModel
{
[Required(ErrorMessage = "Please enter User Name")]
public string UserName { get; set; }
[Required(ErrorMessage = "Please enter Password")]
public string Password { get; set; }
}
}
К сожалению, вызов await HttpClient.HttpContext.SignInAsync
вызывает следующее исключение
Заголовки ответа не могут быть изменены, поскольку ответ уже начал
Я не могу понять, что я делаю неправильно.