【问题标题】:What is the default behaviour of a controller action not marked with AcceptVerbs, HttpGet or HttpPost?未使用 AcceptVerbs、HttpGet 或 HttpPost 标记的控制器操作的默认行为是什么?
【发布时间】:2010-09-08 22:29:15
【问题描述】:

如果我创建一个控制器动作并且不使用AcceptVerbsHttpPostHttpGet 来装饰它。默认行为是什么?

该操作是否允许任何访问方法或默认为 GET

【问题讨论】:

    标签: http asp.net-mvc-2 http-post http-get acceptverbs


    【解决方案1】:

    它可以通过任何动词来访问。

    【讨论】:

    • @marcind 对其进行了测试,它的工作原理与您回答的一样。有一些链接到说明这一点的官方文档会很棒。
    【解决方案2】:

    在 Web API 2.1 中:

    这取决于动作的名称。如果操作以“Get*”开头,那么它将默认只接受 GET 请求。如果它以“Put*”开头,那么它将默认只接受 PUT 请求。与 POST 相同。

    如果它不以任何已知动词开头,那么它将默认只接受 POST。

    这是我的测试结果:

    public class BlahController : ApiController
    {
        // only allows GET
        public string GetSomething() { return "GetSomething blah"; }
    
        // only allows PUT
        public string PutSomething() { return "PutSomething blah"; }
    
        // only allows POST
        public string PostSomething() { return "PostSomething blah"; }
    
        // only allows POST
        public string Fleabag() { return "Fleabag blah"; }
    }
    

    【讨论】:

    • 这很奇怪,因为我刚刚收到:“请求的资源不支持http方法'GET'”对于没有属性的操作(在WebApi 2.2中测试)。
    • 尝试使用不同于“Get()”或“Post()”或“GetById()”的操作方法对其进行测试,因为在这些情况下,如果没有 Accepted 动词属性,则http 方法将自动从名称解析。
    • 与我的回答相反,AFAICT 如果方法名称以“Get”开头,那么它将默认只接受 GET 请求。否则默认接受任何动词。
    • 我已经用 Dummy() 动作/方法进行了测试,它只接受 POST。你试过了吗?
    • 我也得出了同样的结论。如果有一个包含这些信息的官方文档会很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 2016-04-03
    相关资源
    最近更新 更多