如何禁用ASP.NET Web API的动词

时间:2016-12-13 18:58:32

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

我需要在控制器上禁用POST,PUT和DELETE谓词。我目前正在返回MethodNotAllowed,如下所示,但我觉得必须有更好的方法。我怀疑有一个过滤器我可以添加到web api管道但是我不确定我需要什么或在哪里做。

    public HttpResponseMessage Post([FromBody]string value)
    {
        return new HttpResponseMessage(HttpStatusCode.MethodNotAllowed);
    }

如何在不放置代码的情况下阻止某些谓词为控制器中的每个不允许的方法返回HttpResponseMessage?很高兴,仍然返回相应的http状态代码。

2 个答案:

答案 0 :(得分:0)

实施ActionFilterAttribute

public class CustomAttribute: ActionFilterAttribute
    {
        public CustomAttribute()
        {

        }

        public string AllowVerbs { get; set; }

        public string DenyVerbs { get; set; }

        public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            //get the verb
            var verb = actionContext.Request.Method;

            //check the verb based on AllowVerbs, DenyVerbs

            //set your response here if not allowed
            //actionContext.Response = response;
        }
    }

然后用

标记您的控制器
[Custom(DenyVerbs="PUT,POST,DELETE")]

答案 1 :(得分:0)

不是禁用不允许的动词,而是可以定义属性路由HTTP方法允许的动词。

要仅对您的方法允许POST,请在方法

前面定义[httpPost]
[httpPost]
public HttpResponseMessage Post([FromBody]string value)
{
    return new HttpResponseMessage(HttpStatusCode.MethodNotAllowed);
}

Web Api 2中包含的不同类型的HTTP方法

[HttpDelete]
[HttpGet]
[HttpHead]
[HttpOptions]
[HttpPatch]
[HttpPost]
[HttpPut]

您可以在此link

的HTTP方法部分中阅读有关它们的信息