C# 方法名中的隐式动词

C# 方法名中的隐式动词,c#,asp.net-web-api2,httpverbs,C#,Asp.net Web Api2,Httpverbs,如果我创建一个webApi控制器,并用以http谓词为前缀的方法填充它,那么Api能够正确地暗示应该在该控制器上使用哪个谓词 public class TestController : ApiController { public string GetData() { return "Called Get Method"; } public string PostData() { return "Called Post M

如果我创建一个webApi
控制器
,并用以http谓词为前缀的方法填充它,那么Api能够正确地暗示应该在该控制器上使用哪个谓词

public class TestController : ApiController
{
    public string GetData()
    {
        return "Called Get Method";
    }

    public string PostData()
    {
        return "Called Post Method";
    }

    public string PutData()
    {
        return "Called Put Method";
    }
}
如果我将
Post
替换为
Update
,Post方法将继续隐式工作

public string UpdateData()
{
    return "Called Updated Method";
}

方法上是否有可能的前缀列表以及它们映射到哪个动词?此外,是否可以定义自定义前缀?例如,如果我希望始终将一个以“Search”开头的方法映射到
Post
,我可以定义它吗?

如果您将
路由设置为如下所示:

config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

考虑
routeTemplate
。您现在可以按名称调用
控制器上的
操作
,并且不应该存在
前缀
问题。如果您的
控制器上有多个类似
HTTP谓词的
操作(多个
GET
POST
say),此方法非常有用。

隐式谓词是内置路由的一个函数,不能显示为手动扩展

这详细说明了隐式路由的具体规则

HTTP方法。框架仅选择与请求的HTTP方法匹配的操作,确定如下:

  • 您可以使用以下属性指定HTTP方法:AcceptVerbs、HttpDelete、HttpGet、HttpHead、HttpOptions、HttpPatch、HttpPost或HttpPut
  • 否则,如果控制器方法的名称以“Get”、“Post”、“Put”、“Delete”、“Head”、“Options”或“Patch”开头,则按照惯例,该操作支持该HTTP方法。
  • 如果以上都没有,则该方法支持POST

  • UpdateData
    方法之所以有效,是因为任何未隐式确定的方法都会自动成为
    Post

    我试图弄清楚模板AccountController是如何确定GET vs.Post的。非常有帮助,谢谢!