如何在ASP.NET Web API中路由到控制器方法?
搞定Web API带Action的POST路由调用问题
嘿,你的路由配置和方法定义方向是对的,但要注意几个关键细节才能让它正常跑起来:
1. 请求方式绝对不能错
你的Search方法加了[HttpPost]特性,所以必须用POST请求访问这个URL!要是手滑用了GET请求,直接就会返回404,这是最容易踩的坑。
2. 参数传递要按规矩来
因为你给CustomerDTO加了[FromBody]标记,所以得这么传参数:
- 一定要给请求加个头部:
Content-Type: application/json - 请求体里要传JSON格式的数据,比如:
划重点:别把参数塞URL里,{ "Name": "张三" }[FromBody]是从请求体里读数据的哦。
3. 路由顺序得排对
如果你的WebApiConfig里还有默认的API路由(就是那种api/{controller}/{id}的),一定要把你的ActionApi路由放在默认路由前面!因为路由是按定义顺序匹配的,先定义的先生效,放后面的话可能会被默认路由抢了匹配权。正确的顺序应该是这样:
config.Routes.MapHttpRoute( name: "ActionApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); // 默认路由乖乖待后面 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );
测试的时候别瞎操作
用Postman或者Swagger测试的话,按这个步骤来:
- 请求方法选POST,别选成GET
- URL填
http://localhost:55601/api/Customers/Search - 头部里加上
Content-Type: application/json - Body选raw,格式挑JSON,然后把你的CustomerDTO数据填进去
常见问题排查指南
- 要是返回404:先检查请求方法是不是POST,再看路由有没有放在默认路由前面,最后确认控制器类名是不是
CustomersController(Web API要求控制器名字必须以Controller结尾) - 要是参数变成null:看看请求头的Content-Type是不是写错了,再检查请求体的JSON属性名和CustomerDTO的属性名是不是完全匹配(大小写敏感哦)
内容的提问来源于stack exchange,提问作者Matt G
相关产品推荐
相关产品推荐

