Asp.net web api Web API支持的动词?

Asp.net web api Web API支持的动词?,asp.net-web-api,asp.net-web-api-routing,Asp.net Web Api,Asp.net Web Api Routing,我正在为一个本地代码营做一次演讲,试图理解ApiController中HTTP动词的细微差别。ApiController在Beta版、RC版和最终版本之间有一些显著的变化,关于如何设置的建议是相互矛盾的,有时是错误的 假设我刚刚离开WebApiConfig中的标准路由: config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{

我正在为一个本地代码营做一次演讲,试图理解ApiController中HTTP动词的细微差别。ApiController在Beta版、RC版和最终版本之间有一些显著的变化,关于如何设置的建议是相互矛盾的,有时是错误的

假设我刚刚离开WebApiConfig中的标准路由:

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
(因为如果你在这里添加一个{action}参数,你真的可以把事情摆在他们的头上)

我了解公约如何适用于简单的Crud调用,如:

    // GET api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }


    // GET api/values/5
    public string Get(int id)
    {
        return "value";
    }

    // POST api/values
    public void Post([FromBody]string value)
    {
    }
然而,最初的规范说ApiController支持Get、Put、Post和Delete。 但我可以为以下内容添加方法:

    public void HeadOfTheClass()
    {
    }
它适用于中心动词,但我不能为模糊或不存在的动词添加方法:

    public void MKCOL()
    {
    }
    public void Bubba()
    {
    }
本地“受支持”动词的完整列表是什么

但是,我可以使用AcceptVerb属性添加对这些方法的支持:

    [AcceptVerbs("MKCOL")] 
    public void MKCOL()
    {
    }
    [AcceptVerbs("Bubba")]
    public void Bubba()
    {
    }
这也适用,或者对于任何“已定义”动词,请使用Http属性:

    [HttpHead]
    public void HeadOfTheClass()
    {
    }

   [HttpGet]
    public void Bubba()
    {
    }
哪个是正确的还是首选的?(还有[GET]和[POST]等属性,这些属性是否已弃用?)

[HttpBindNever]和[NoAction]等价吗?

我喜欢开源

从ReflectedHttpActionDescriptor:

private static readonly HttpMethod[] _supportedHttpMethodsByConvention = 
    { 
        HttpMethod.Get, 
        HttpMethod.Post, 
        HttpMethod.Put, 
        HttpMethod.Delete, 
        HttpMethod.Head, 
        HttpMethod.Options, 
        new HttpMethod("PATCH") 
    };

因此,最好一次只问一个问题。我回答了似乎是主要的问题。最好是编辑此问题并从中创建2或3个单独的问题。
private static readonly HttpMethod[] _supportedHttpMethodsByConvention = 
    { 
        HttpMethod.Get, 
        HttpMethod.Post, 
        HttpMethod.Put, 
        HttpMethod.Delete, 
        HttpMethod.Head, 
        HttpMethod.Options, 
        new HttpMethod("PATCH") 
    };