You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:07:15