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

时间:2019-08-28 09:44:16

标签: razor-pages blazor blazor-server-side

我试图将用户名和密码从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
}

1 个答案:

答案 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等。