我对ASP.NET项目中的ApiController
有操作。
我希望它接受任何HTTP方法(如果可能的话,甚至可以是伪造的方法)。
我找不到不按方法过滤属性。我必须创建一个吗?
添加多个属性对于 standard 方法来说效果很好。我可以抓住一切吗?
NB 这是Framework 4.72应用程序,而不是Core应用程序
答案 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,HttpPost
,Put
等添加到同一操作中。
另一种方法是对不同的http动词具有单独的动作,然后重定向到带有参数的动作。