4

如果我创建一个 webApicontroller并使用以 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";
    }
}

如果我将 替换为PostUpdate则 Post 方法将继续隐式工作。

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

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

4

2 回答 2

2

隐式动词是内置路由的功能,似乎无法手动扩展。

这个Asp.Net详细介绍了有关隐式路由的特定规则。

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

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

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

于 2015-07-31T07:38:39.067 回答
2

如果你把你的Routing喜欢如下:

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

考虑一下。routeTemplate您现在可以按名称调用actions controller,并且不prefix应该存在任何问题。如果您对controller类似的HTTP Verbs(多个GETPOST说)有多个操作,此方法非常有用。

于 2015-07-30T08:50:56.337 回答