服务器端 Blazor 页面 post 到 Razor 页面 http 错误 400

Server-side Blazor page post to Razor page http error 400

我正在尝试 post 我的用户名和密码从 Blazor 页面 (.razor) 到 Razor 页面 (.cshtml),但我一直收到 HTTP 错误 400。

LoginControl.razor

<form method="post" action="login">
        <input type="text"
               name="username"
               @bind="@Username"
               placeholder="User Name" />
        &nbsp;&nbsp;
        <input type="password"
               name="password"
               placeholder="Password"
               @bind="@Password" />&nbsp;&nbsp;&nbsp;
        <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
}

Bad request (400) 表示服务器无法理解你

该方法="post" 不适用于 Blazor 或任何其他 SPA 框架。在 Blazor 中有特殊代码可以防止 post 返回。当然,您可以强制返回 post,这意味着您的 Blazor 页面已过期,如果您尝试 return 它,它会重新呈现,并且您之前的所有状态都会丢失。

您在这里要做的是在 Blazor 组件中获取用户的凭据,然后尝试将数据 post 发送到 Razor 页面模型进行验证。你不能那样做,也不应该那样做。您应该将您的用户重定向到一个登录页面,他在其中输入他的凭据,并且这些凭据应该针对某种存储进行验证,比如 SqlServer 数据库,然后 returns 到 Blazor 应用程序。请记住,重定向到 Razor 页面意味着你的 Blazor 应用程序已过期。再一次,您没有 post 登录 Razor 页面的用户凭据。用户应在 Login.cshtml

上输入他的凭据

我建议您使用Blazor 内置系统来启用身份验证和授权。该系统使用身份 Ui (Razor Pages) 对用户进行身份验证。它正是你想要做的。 See here...。另外,使用Blazor提供的Forms Components,比如EditForm、InutText等