C# 方法名中的隐式动词
如果我创建一个webApiC# 方法名中的隐式动词,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
控制器
,并用以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的。非常有帮助,谢谢!