Razor 页面发布表单上路由参数的模型绑定

Model Binding from Route Parameter on Posted Form for Razor Page

我有以下 Razor 页面设置:

[BindProperties]
public class MyFormPageModel : PageModel
{
    public int Id { get; set; }

    public void OnGet(){}

    public IActionResult OnPost() {
       return RedirectToPage("Index", new {Id});
    }
}

并且:

@page "{Id:int?}"

<form method="post">
   <button type=submit>Submit</button>
</form>

如果我访问 /MyForm/1 表单+按钮加载。

点击按钮成功发布到/MyForm/1

但这只会从后端产生 400 错误。

后台输出日志也没有错误显示。

找到我的问题。

在这种情况下未生成防伪令牌,因为表单是动态生成的。

如果您从一开始就在 Razor .cshtml 中有一个 <form>,Razor 会自动生成防伪令牌,但是一旦您的表单动态生成就不起作用了。

此页面为我的问题提供了一些出色的解决方案: https://exceptionnotfound.net/using-anti-forgery-tokens-in-asp-net-core-razor-pages/