如何使操作过滤器导致过滤操作返回HttpNotFoundResult?

时间:2014-12-12 04:38:22

标签: asp.net-mvc asp.net-mvc-4 http httpresponse action-filter

我有一个自定义操作过滤器,用于非常明确的内容长度限制。它的工作如下:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    if (filterContext.HttpContext.Request.ContentLength >= MaxLength)
    {
        throw new HttpException("MaxLengthFilter: Request has Content-Length > " + MaxLength);
    }
    base.OnActionExecuting(filterContext);
}

我希望如果对超过最大值的内容长度调用的任何操作返回了更有意义的结果,例如HTTP 404.13。如果我直接在动作中过滤,我可以使用'返回新的HttpNotFoundResult()',但过滤器的OnActionExecuting方法是void类型。

这更复杂,因为某些需要过滤的操作是ActionResult,而有些操作是JsonResult,而后者需要序列化HttpNotFoundResult

1 个答案:

答案 0 :(得分:1)

没有必要抛出异常。您可以重定向到自定义错误操作。 这是question这样的。{3}}。

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    if (filterContext.HttpContext.Request.ContentLength >= MaxLength)
    {
       filterContext.Result = RedirectToAction("Error401_13", "Error"); //for example
       return;
    }
    base.OnActionExecuting(filterContext);
}