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
相关产品推荐
相关产品推荐

