【问题标题】:Web API - supported verbs?Web API - 支持的动词?
【发布时间】:2012-11-15 15:38:45
【问题描述】:

我正在为本地代码营组织一次演讲,并试图了解 ApiController 中 HTTP 动词的细微差别。在 Beta、RC 和最终版本之间,关于 ApiController 的一些事情发生了显着变化,关于如何设置它的建议相互矛盾,有时甚至是错误的。

假设我只是将标准路由留在 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)
    {
    }

或者只要它们以动词名称开头,您就可以更改它们:

    // GET api/values/5
    public string GetMyStuff(int id)
    {
        return "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] 和 [NonAction] 是否等效?

【问题讨论】:

  • 在 SO 最好一次只问一个问题。我回答了似乎是主要问题。最好编辑此问题并从中创建 2 或 3 个单独的问题。

标签: asp.net-web-api asp.net-web-api-routing


【解决方案1】:

我喜欢开源。 :)

来自 ReflectedHttpActionDescriptor:

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

【讨论】:

    猜你喜欢
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 2013-06-24
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多