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

Razor Pages中Ajax调用Handler返回400状态码问题求助

Razor Pages Ajax调用Handler出现400错误的解决方法

你遇到的错误:

Failed to load resource: the server responded with a status of 400 ()

问题根源及修正方案

1. 请求方法与Handler不匹配

你的Ajax使用POST请求,但后端Handler方法是OnGetGetAliases——这是Razor Pages中对应GET请求的命名规则,方法名不匹配直接导致400错误。

2. XSRF验证头名称错误

如果使用POST请求,Razor Pages要求的验证头是RequestVerificationToken,而非你代码中的XSRF-TOKEN。


修正方案一:改用GET请求(匹配现有Handler)

修改main.js中的请求类型为GET,同时可以去掉XSRF验证相关代码(GET请求无需验证):

$.ajax({
    type: "GET",
    url: "/Products/Edit?handler=GetAliases&id=1",
    success: function (response) {
        $('#product-aliases-container').html(response);
    },
    failure: function (response) {
        alert('failure: ' + response.responseText);
    },
    error: function (response) {
        alert('error: ' + response.responseText);
    }
});

修正方案二:保留POST请求(修改后端Handler)

第一步:修改后端Handler方法名

将OnGetGetAliases改为OnPostGetAliases,对应POST请求:

public class EditModel : PageModel
{
    private readonly MyProject.Models.MyDatabaseContext _context;

    public EditModel(MyProject.Models.MyDatabaseContext context)
    {
        _context = context;
    }

    ...

    public IEnumerable<ProductAlias> Aliases { get; set; } = default!;
    // 方法名改为OnPost开头
    public PartialViewResult OnPostGetAliases(int? id)
    {
        var aliases = _context.ProductAliases.Where(m => m.ProductId == id);

        Aliases = aliases;

        return Partial("_AssetAliasList", Aliases);
    }
}

第二步:修正Ajax的XSRF请求头

将请求头名称改为RequestVerificationToken:

$.ajax({
    type: "POST",
    url: "/Products/Edit?handler=GetAliases",
    beforeSend: function (xhr) {
        // 修正请求头名称
        xhr.setRequestHeader("RequestVerificationToken",
            $('input:hidden[name="__RequestVerificationToken"]').val());
    },
    data: { "id": 1 },
    success: function (response) {
        $('#product-aliases-container').html(response);
    },
    failure: function (response) {
        alert('failure: ' + response.responseText);
    },
    error: function (response) {
        alert('error: ' + response.responseText);
    }
});

额外注意

确保你的页面中存在__RequestVerificationToken隐藏字段,Razor Pages通常会自动生成该字段,只要页面包含<form>标签或调用了@Html.AntiForgeryToken()方法。

内容的提问来源于stack exchange,提问作者s15199d

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:27:17