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

ASP.NET Core中CRUD调用的有效关键字及路由映射疑问

ASP.NET Core中CRUD调用的有效关键字及路由映射疑问

我来帮你理清这个困惑,其实核心是ASP.NET Core里的两种路由匹配逻辑在起作用——属性路由和约定路由,咱们一步步拆解:

首先,你代码里的[HttpPost]属性是关键,它属于属性路由的范畴:

  • 当你给控制器方法加上[HttpPost]这类HTTP动词属性时,框架会直接根据这个属性来匹配请求,完全不关心方法名叫什么。
  • 假设你的控制器是PizzaController,ASP.NET Core默认会给控制器加上路由前缀/pizza(控制器名去掉Controller后缀)。所以[HttpPost]就会把所有发送到http://localhost:5000/pizza的POST请求,绑定到这个方法上——不管方法名是Create、AddPizza还是别的什么,都不影响匹配。

然后你提到的“用Get/Post作为方法名自动映射”,这是约定路由的规则:

  • 这种方式是早期ASP.NET MVC的遗留约定,当你不给方法加任何HTTP属性时,框架会根据方法名的前缀来推断要处理的HTTP动词:比如Get()、GetPizzaById()这类以Get开头的方法,默认处理GET请求;Post()、PostPizza()处理POST请求,以此类推。
  • 但这种约定的优先级低于属性路由,也就是说如果方法加了[HttpPost],不管方法名是不是Post开头,都会优先遵循属性的配置。

回到你的疑问:为什么没找到关于Create方法的文档?因为Create只是你自定义的方法名,框架根本不依赖这个名字来做路由匹配,真正起作用的是[HttpPost]属性。你完全可以把方法名改成Add,只要保留[HttpPost],POST到/pizza的请求依然会被这个方法处理。

总结一下:

  • 想显式控制路由和HTTP动词,用[HttpGet]/[HttpPost]这类属性路由,方法名随意取;
  • 想依赖命名约定省掉属性,就用Get/Post/Put/Delete开头的方法名,但这种方式灵活性差一些,Web API开发中更推荐属性路由。

备注:内容来源于stack exchange,提问作者KeithViking

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 13:34:31