我有一个自定义操作过滤器,用于非常明确的内容长度限制。它的工作方式如下:
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。如果我直接在操作内部进行过滤,则可以使用“ return new HttpNotFoundResult()”,但是过滤器的OnActionExecuting
方法是type void
。
由于需要过滤的某些动作ActionResult
而有些需要过滤,而JsonResult
后者需要序列化的动作,这变得更加复杂HttpNotFoundResult
。
没有必要抛出异常。您可以重定向到自定义错误操作。这是一个像这样的问题。
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.ContentLength >= MaxLength)
{
filterContext.Result = RedirectToAction("Error401_13", "Error"); //for example
return;
}
base.OnActionExecuting(filterContext);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句