1

매우 명시적인 콘텐츠 길이 제한을위한 맞춤 작업 필터가 있습니다. 최대 값을 초과하는 콘텐츠 길이에 대해 호출 조치는 HTTP 404.13로, 더 의미있는 결과를 반환하는 경우필터 된 동작으로 인해 HttpNotFoundResult가 반환되는 동작 필터를 만들려면 어떻게해야합니까?

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

내가 선호 : 그것은이 같은 자사의 작업을 수행합니다. 작업 내에서 직접 필터링하는 경우 'return new HttpNotFoundResult()'를 사용할 수 있지만 필터의 OnActionExecuting 메서드는 void입니다.

필터링을 필요로하는 일부 동작은 ActionResult이고 일부는 JsonResult이고 후자는 HttpNotFoundResult의 직렬화가 필요하다는 점에서이 작업은 더욱 복잡합니다.

답변

1

예외를 throw 할 필요는 없습니다. 사용자 지정 오류 동작으로 리디렉션 할 수 있습니다. 다음은 question입니다.

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

여기서'Error401_13'은 간단한'return new HttpNotFoundResult'를합니다. 실제로 올바른 방향으로 나아가는 한 걸음. 어떻게 든 필터에 리다이렉트를 리턴 할 수는 없다는 것을 알지 못했습니다. – ProfK

+0

두번째 생각에 아마도'Server.Transfer'가 리다이렉트보다 낫습니다. 이것은 아작스의 어두운 세계이며 브라우저 왕복을 피하고 싶습니다. – ProfK

+0

Error401_13은 귀하의 목적에 따라 결과를 반환 할 수 있습니다. 오류 페이지가 필요하면 반환 오류 코드가 필요하면 조치를 반환하고 예외가 발생하면 json 응답이 필요하면'Json (new {yourResponce}); – aleha

관련 문제