繁体   English   中英

asp net web api自定义过滤器和http动词

[英]asp net web api custom filter and http verb

我正在使用自定义过滤器来验证内容类型,例如:

        public override void OnActionExecuting(HttpActionContext httpActionContext)
        {
            List<String> errors = new List<String>();

            // a
            if (httpActionContext.Request.Content.Headers.ContentType.MediaType == "application/json")
            {
            }
            else
            {
                errors.Add("Invalid content type.");
            }

                // more checks
        }

上面的代码工作正常,但验证应该检查请求http动词,因为它应该仅针对put或post验证内容类型。 我不想从httpget操作中删除自定义过滤器,因为我内部有更多检查,我不想将过滤器拆分为两部分,这意味着我必须检查过滤器内的http动词,但我可以找不到。

有小费吗?

您可以从中获取方法类型(post或put):

public override void OnActionExecuting(HttpActionContext actionContext)
{
    string methodType = actionContext.Request.Method.Method;
    if (methodType.ToUpper().Equals("POST") 
            || methodType.ToUpper().Equals("PUT"))
    {
         // Your errors
    }
}

如果需要通过过滤器验证请求的HTTP方法,则可以检查请求的Method属性:

var method = actionContext.Request.Method;

然而,我会建议你将过滤器拆开,因为你很快就会朝着一个泥球场的方向前进。

您确实应该使用控制器方法上方的标准HTTPVerb属性:

[HttpGet]
[HttpPut]
[HttpPost]
[HttpDelete]
[HttpPatch]

多个MVC控制器:

[AcceptVerbs(HttpVerbs.Get, HttpVerbs.Post)]

WebAPI Controlelrs for multiple

[AcceptVerbsAttribute("GET", "POST")]

在动作过滤器的构造函数中,您可以传入选项/命名参数,这些参数将设置OnActionExecuting逻辑的设置。 根据这些设置,您可以切换逻辑。

public class MyActionFilterAttribute : ActionFilterAttribute
{
    private HttpVerbs mOnVerbs;

    public MyActionFilterAttribute(HttpVerbs onVerbs)
    {
        mOnVerbs = onVerbs;
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var currentVerb = filterContext.HttpContext.Request.HttpMethod;

        if (mOnVerbs.HasFlag(HttpVerbs.Post)) { }
        else if (mOnVerbs.HasFlag(HttpVerbs.Get)) { }
        base.OnActionExecuting(filterContext);
    }
}

[MyActionFilter(HttpVerbs.Get | HttpVerbs.Post)]
public ActionResult Index()
{
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM