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

.NET 6迁移后HTML表单POST请求405错误及参数为空问题

解决.NET 6迁移中表单POST请求405及参数为null的问题

核心原因

.NET 6与.NET Framework的模型绑定规则存在差异:

  • .NET Framework的MVC/Web API中,表单POST的简单类型参数会自动从表单数据绑定
  • .NET 6中,简单类型参数默认绑定源为URL查询字符串(QueryString),表单提交的application/x-www-form-urlencoded数据不会自动绑定到未指定源的简单参数,同时路由匹配规则的变化可能引发405错误

解决方案

方案1:为单个参数添加[FromForm]特性

修改控制器Action,显式指定参数从表单数据获取:

[HttpPost]
public JsonResult Index([FromForm] string one, [FromForm] string two, [FromForm] string three)
{
    // 业务逻辑
    return Json(new { success = true });
}

方案2:使用DTO类并配合[FromForm]

如果参数较多,建议封装DTO,同样需要指定从表单绑定:

// 定义DTO类
public class RequestParams
{
    public string One { get; set; }
    public string Two { get; set; }
    public string Three { get; set; }
}

// 控制器Action
[HttpPost]
public JsonResult Index([FromForm] RequestParams model)
{
    // 业务逻辑
    return Json(new { success = true });
}

验证路由配置

确保Program.cs中已正确配置控制器路由支持:

var builder = WebApplication.CreateBuilder(args);

// 添加控制器服务
builder.Services.AddControllers();

var app = builder.Build();

// 启用控制器路由
app.MapControllers();

app.Run();

注意事项

  • 不要使用[FromBody]:该特性用于绑定JSON/XML格式的请求体,而表单提交的application/x-www-form-urlencoded不属于此类,添加后会导致参数无法绑定
  • 无需添加[HttpGet]:405错误并非因为不允许POST,而是参数绑定失败导致路由匹配异常,修正绑定规则后即可恢复纯POST支持

内容的提问来源于stack exchange,提问作者Kevin O'Shaughnessy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:43:20