【问题标题】:Accept any HTTP method/verb in ASP.NET WebAPI接受 ASP.NET WebAPI 中的任何 HTTP 方法/动词
【发布时间】:2019-04-04 06:33:33
【问题描述】:

我对 ASP.NET 项目中的 ApiController 执行了操作。

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

我找不到 Don't filter by method 属性。我必须创建一个吗?

添加多个属性适用于 标准 方法。我能抓住一切吗?

注意这是一个框架 4.72 应用程序,而不是核心应用程序

【问题讨论】:

  • 你想接受每个控制器的方法还是控制器中的单个方法?
  • 不确定你想在这里实现什么,但是你写了一个middleware 并玩弄请求。

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


【解决方案1】:

你不能完全忽略Web APIHTTP方法的过滤,在这件事上框架似乎相当严格。但是您可以使用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 方法并返回更新后的集合。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-13
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 2018-04-25
      • 1970-01-01
      • 2013-10-06
      相关资源
      最近更新 更多