Razor Page中按钮无法调用OnPostAddToCart方法求助
Razor Page「Add to Cart」按钮400错误问题排查
问题原因
Razor Pages默认启用防跨站请求伪造(CSRF)保护,所有POST请求必须携带有效的防伪造令牌,否则会直接返回400错误,导致后端OnPostAddToCart方法无法触发。你的表单代码中缺少生成该令牌的必要标记。
解决方案
在表单内部添加@Html.AntiForgeryToken(),或者利用<form>标签助手的默认特性(显式声明asp-antiforgery="true"更清晰),让框架自动生成并携带防伪造令牌。
修改后的页面代码
@page @model lab2razor_pages.Pages.Products.IndexModel <h1>Products</h1> <table class="table"> <thead> <tr> <th>Name</th> <th>Description</th> <th>Category</th> <th>Price</th> <th></th> </tr> </thead> <tbody> @foreach (var product in Model.Products) { <tr> <td>@product.Name</td> <td>@product.Description</td> <td>@product.Category</td> <td>@product.Price</td> <td> <form asp-page-handler="AddToCart" method="post" asp-route-productId="@product.Id"> @Html.AntiForgeryToken() <button type="submit" class="btn btn-primary">Add to Cart</button> </form> </td> </tr> } </tbody> </table>
额外说明
- 若因测试场景需临时关闭CSRF保护,可在PageModel类上添加
[IgnoreAntiforgeryToken]特性,但此操作会引入安全风险,生产环境禁止使用。 - 同时确认
product.Id不为空或无效值,无效路由参数也可能引发请求异常,但400错误优先排查CSRF令牌缺失问题。
内容的提问来源于stack exchange,提问作者defcon1
相关产品推荐
相关产品推荐

