接受ASP.NET WebAPI中的任何HTTP方法/动词

时间:2019-04-04 06:33:34

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

我对ASP.NET项目中的ApiController有操作。

我希望它接受任何HTTP方法(如果可能的话,甚至可以是伪造的方法)。

我找不到不按方法过滤属性。我必须创建一个吗?

添加多个属性对于 standard 方法来说效果很好。我可以抓住一切吗?

NB 这是Framework 4.72应用程序,而不是Core应用程序

2 个答案:

答案 0 :(得分:0)

您不能完全忽略HTTP中通过Web API方法进行的过滤,该框架在这方面似乎非常严格。但是,您可以使用AcceptVerbs属性指定所需的任何方法名称的预定义集(甚至是虚假的名称)

[AcceptVerbs("POST", "GET", "MyMethod", "Bo-Gus")]
public IHttpActionResult MyAction()

或者您可以实现IActionHttpMethodProvider来返回允许的方法

[AttributeUsage(AttributeTargets.Method)]
public class AllowBogusMethodsAttribute : Attribute, IActionHttpMethodProvider
{
    public Collection<HttpMethod> HttpMethods
    {
        get
        {
            return new Collection<HttpMethod>
            {

                HttpMethod.Get,
                HttpMethod.Post,
                new HttpMethod("MyMethod"),
                new HttpMethod("Bo-Gus")
            };

        }
    }
}

并像这样使用它

[AllowBogusMethods]
public IHttpActionResult MyAction()

注意

HttpMethods getter在应用程序生命周期内仅被调用一次,其结果将被缓存,因此您不能在请求期间添加新的允许的HTTP方法并返回更新的集合。

答案 1 :(得分:-2)

如果您不应用任何动作动词,则该动作将被视为GET请求动作。这是默认行为。

我从未尝试将HttpGet,HttpPostPut等添加到同一操作中。

另一种方法是对不同的http动词具有单独的动作,然后重定向到带有参数的动作。