我试图将用户名和密码从Blazor页面(.razor)发布到Razor页面(.cshtml),但是我始终遇到HTTP错误400。
LoginControl.razor
<form method="post" action="login">
<input type="text"
name="username"
@bind="@Username"
placeholder="User Name" />
<input type="password"
name="password"
placeholder="Password"
@bind="@Password" />
<button class="ml-md-auto btn btn-primary">Loggin</button>
</form>
Login.cshtml.cs
public async Task<IActionResult> OnPostAsync([FromServices] IUserProvider provider, string username, string password)
{
Login stuff
}
答案 0 :(得分:1)
错误请求(400)表示服务器无法理解您
method =“ post”不适用于Blazor或任何其他SPA框架。在Blazor中,有防止回发的特殊代码。当然,您可以强制执行回发,这意味着您的Blazor页面已过期,并且如果您尝试返回该页面,则将其重新呈现,并且您之前的所有状态都将丢失。
您要在此处执行的操作是在Blazor组件中获取用户的凭据,然后尝试将数据发布到Razor页面模型进行验证。您不能那样做,也不应该那样做。您应该将用户重定向到登录页面,在该页面中输入凭据,并且应该针对某种存储库(例如SqlServer数据库)对这些凭据进行验证,然后返回Blazor应用程序。请记住,重定向到“剃刀页面”意味着您的Blazor应用程序已过期。再次,您不将用户的凭据发布到“登录剃须刀”页面。用户应在Login.cshtml
上输入其凭据。我建议您使用Blazor内置系统来启用身份验证和授权。该系统使用身份Ui(剃刀页)对用户进行身份验证。它正是您要尝试执行的操作。 See here...。另外,请使用Blazor提供的Forms Components,例如EditForm,InutText等。