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

ASP.NET Core控制器Post接口含dynamic参数返回405错误排查求助

问题说明

我有一个继承自Controller的控制器,定义了接收dynamic类型参数的Post方法。用Postman调用接口时始终返回405 Not Allowed;改成Get请求验证路由,又返回Unsupported Media Type。同一项目里另一个带dynamic参数的Post控制器却能正常工作。我已经在Postman里设置了Content-Type: application/json,确认URL正确,并且以Raw格式传入了请求体。

控制器代码

[HttpPost]
[Route( "/call_back")]
public async Task<StatusCodeResult> CallBack([FromBody] dynamic dynamic)
{

} 

请求体示例

{
    "obj": {
        "id": "1",
        "success": true,
        "amount_cents": 16.0,
        "order": {
            "id": "231395979"
        },
        "currency": "sr"
    }
}
排查与解决思路
  • 检查路由冲突:确认/call_back路由是否被其他控制器(比如带[HttpGet]的方法)占用,405错误通常是请求方法不被允许,可能存在同路由的其他请求方法拦截了请求,或是路由模板匹配优先级问题。
  • 修改参数命名:参数名使用了C#关键字dynamic,虽然语法上允许,但可能引发模型绑定异常,建议改为其他名称,比如payload:
    public async Task<StatusCodeResult> CallBack([FromBody] dynamic payload)
    
  • 验证API配置:确认项目的Startup.cs或Program.cs中正确配置了JSON序列化支持,比如是否添加了AddControllers().AddJsonOptions(...),尽管另一个控制器正常,但不排除局部配置存在差异。
  • 核对请求细节:在Postman中开启请求日志,确认Content-Type头确实被正确发送(全局设置可能覆盖当前请求配置),同时确保请求体无语法错误。
  • 调试模型绑定:在控制器方法中添加模型状态校验,排查参数绑定是否失败:
    [HttpPost]
    [Route("/call_back")]
    public async Task<StatusCodeResult> CallBack([FromBody] dynamic payload)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }
        // 后续业务逻辑
        return Ok();
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 00:42:03