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

如何在ASP.NET Web API中路由到控制器方法?

搞定Web API带Action的POST路由调用问题

嘿,你的路由配置和方法定义方向是对的,但要注意几个关键细节才能让它正常跑起来:

1. 请求方式绝对不能错

你的Search方法加了[HttpPost]特性,所以必须用POST请求访问这个URL!要是手滑用了GET请求,直接就会返回404,这是最容易踩的坑。

2. 参数传递要按规矩来

因为你给CustomerDTO加了[FromBody]标记,所以得这么传参数:

  • 一定要给请求加个头部:Content-Type: application/json
  • 请求体里要传JSON格式的数据,比如:
    {
      "Name": "张三"
    }
    
    划重点:别把参数塞URL里,[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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:18:18