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

.NET 6 MVC中Update功能PUT请求报400错误,请求排查问题

.NET 6 MVC PUT请求400错误排查方案

以下是针对PUT请求400错误的常见排查方向,结合你提供的场景逐一验证:

1. 模型验证失败

  • 检查CardsController的PutCard方法接收的Card模型是否包含验证注解(如[Required]、[StringLength]等),前端提交的数据是否违反这些规则。
  • 在控制器方法开头添加模型验证逻辑,直接返回验证错误详情,便于定位问题:
    [HttpPut("{id}")]
    public IActionResult PutCard(int id, Card card)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }
        // 后续业务逻辑
    }
    
  • 浏览器开发者工具的响应面板中会显示具体的验证失败字段。

2. 路由参数不匹配

  • 确认控制器的PUT路由定义(如[HttpPut("{id}")])与前端请求URL是否一致。例如控制器要求URL包含id参数,前端请求必须是/Cards/123而非/Cards。
  • 检查前端JS中URL拼接逻辑,确保id参数正确传递:
    function UpdateCard(cardId) {
        const requestUrl = `/Cards/${cardId}`;
        // 发起PUT请求
    }
    

3. 请求数据格式与头信息错误

  • 前端必须以JSON格式发送数据,并设置正确的请求头:
    fetch(requestUrl, {
        method: 'PUT',
        headers: {
            'Content-Type': 'application/json',
            // 防伪造令牌必填,见下方第4点
            'RequestVerificationToken': document.querySelector('input[name="__RequestVerificationToken"]').value
        },
        body: JSON.stringify({
            // 确保字段名与后端Card模型属性完全匹配(大小写敏感)
            Id: cardId,
            Title: document.getElementById('cardTitle').value,
            Content: document.getElementById('cardContent').value
        })
    })
    
  • 若字段名与后端模型不匹配,会导致模型绑定失败,触发400错误。

4. 缺失防伪造令牌

  • .NET MVC默认启用防伪造验证,PUT请求必须携带__RequestVerificationToken:
    • 确保页面中存在令牌隐藏域(通常在布局页添加@Html.AntiForgeryToken())。
    • 请求时在头信息中携带该令牌,否则会被拦截返回400。

5. 模型绑定异常

  • 检查Card模型的属性类型是否与前端提交的数据类型匹配,例如后端是int类型的SortOrder,前端不能传入字符串值。
  • 若使用复杂嵌套模型,确认嵌套属性的命名与前端提交的结构完全一致。

6. 自定义中间件/过滤器拦截

  • 检查Program.cs中是否存在自定义中间件或全局过滤器,拦截了PUT请求或修改了请求参数。
  • 确认路由配置正确,未限制PUT方法:
    app.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:02:43