【问题标题】:Server-side Blazor page post to Razor page http error 400服务器端 Blazor 页面发布到 Razor 页面 http 错误 400
【发布时间】:2020-01-01 12:09:27
【问题描述】:

我正在尝试将我的用户名和密码从 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
}

【问题讨论】:

  • 您似乎发布了 Blazor 组件和 Razor 代码隐藏文件。链接在哪里?
  • 我以为 Blazor 组件上的操作中的 /login 会重定向并发布到登录页面。

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


【解决方案1】:

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

method="post" 不适用于 Blazor 或任何其他 SPA 框架。在 Blazor 中有防止回发的特殊代码。当然你可以强制回发,这意味着你的 Blazor 页面过期了,如果你试图返回它,它会被重新渲染,并且你之前的所有状态都会丢失。

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

我建议您使用 Blazor 内置系统来启用身份验证和授权。该系统使用 Identity Ui (Razor Pages) 对用户进行身份验证。它完全符合您的要求。 See here...。另外,使用 Blazor 提供的 Forms 组件,如 EditForm、InutText 等。

【讨论】:

  • 但在这种情况下,我被重定向到 Razor 页面(用于登录),所以它应该可以工作。不应该吗?
  • 这不是用于客户端 Blazor 吗?我之前尝试的时候没有用。这确实有效:blazorhelpwebsite.com/Blog/tabid/61/EntryId/4316/… 但我想将其更改为使用 post 而不是 get。
  • 我在回答您的最后评论时添加了澄清说明。
  • 谢谢!现在我明白了它是如何工作的,并且我得到了它的工作。
  • 我正在将 Identity Razor 页面模板转换为 Blazor。通过 POST 从 Login.razor 到 ExternalLogin.razor 失败。我想我需要把这两个页面合并起来。
猜你喜欢
  • 2020-04-03
  • 2018-06-30
  • 2021-11-10
  • 1970-01-01
  • 2021-02-05
  • 1970-01-01
  • 2020-03-25
  • 2021-11-02
  • 2020-01-07
相关资源
最近更新 更多