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

Asp.Net Core Razor Pages项目POST请求Code 400错误排查求助

问题分析与解决方案

核心原因:Razor Pages POST请求缺少防伪造令牌

Razor Pages默认强制开启请求伪造保护机制,所有POST请求必须携带防伪造令牌,否则服务器会直接返回400错误,且不会进入后端处理方法——这就是你设置的断点从未触发的根本原因。GET请求不受此限制,所以UserId接口能正常工作。

修复步骤

1. 前端请求添加防伪造令牌

首先从页面中获取自动生成的防伪造令牌,再将其加入POST请求的headers中:

// 获取页面中的防伪造令牌
const token = document.querySelector('input[name="__RequestVerificationToken"]').value;

// 修改POST请求的headers配置
if (isInList) {
    response = await fetch('/Browse?handler=RemoveFromWatchlist', {
        method: 'POST',
        body: JSON.stringify({ userId, movieId }),
        headers: {
            'Content-Type': 'application/json',
            'RequestVerificationToken': token
        }
    });
} else {
    response = await fetch('/Browse?handler=AddToWatchlist', {
        method: 'POST',
        body: JSON.stringify({ userId, movieId }),
        headers: {
            'Content-Type': 'application/json',
            'RequestVerificationToken': token
        }
    });
}

2. 确保页面包含防伪造令牌

如果你的Browse.cshtml页面没有自动生成令牌,手动添加以下代码:

@Html.AntiForgeryToken()

3. 修正前端代码笔误

你在response.ok的处理块中错误使用了console.error,会导致成功操作时输出错误日志,改为console.log:

if (response.ok) {
    const iconElement = event.currentTarget.querySelector('i');
    if (isInList) {
        iconElement.classList.remove('fa-solid', 'fa-check');
        iconElement.classList.add('fas', 'fa-plus');
        event.currentTarget.dataset.inList = "false";
    } else {
        iconElement.classList.remove('fas', 'fa-plus');
        iconElement.classList.add('fa-solid', 'fa-check');
        event.currentTarget.dataset.inList = "true";
    }
    console.log(`Successfully toggled movie with ID ${movieId} in list`);
}

4. 可选:验证JSON字段匹配

ASP.NET Core默认支持JSON大小写不敏感匹配,但如果你的项目配置有特殊修改,可以在后端MovieData类上明确字段映射:

using System.Text.Json.Serialization;

public class MovieData
{
    [JsonPropertyName("userId")]
    public int UserId { get; set; }
    [JsonPropertyName("movieId")]
    public int MovieId { get; set; }
}

额外排查建议

  • 打开浏览器DevTools的Network面板,检查POST请求的Request Payload是否正确携带userId和movieId
  • 查看Response返回的详细错误信息(你已通过response.text()获取,重点关注是否有“防伪造令牌无效”相关提示)
  • 待请求能进入后端断点后,再验证数据库连接和SQL语句的正确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:40:12