모든 작업에 대해 ASP.NET-MVC에 ActionFilter를 적용 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/649409

  •  19-08-2019
  •  | 
  •  

문제

나는 신청하고 싶다 ActionFilter ASP.NET MVC에서 모든 컨트롤러에서 응용 프로그램에있는 모든 작업에 대한 모든 작업.

모든 actionResult 방법에 적용하지 않고이 작업을 수행 할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

예, 당신은 이것을 할 수 있지만 그것은 그것이 상자 밖으로 작동하는 방식이 아닙니다. 나는 다음을했다 :

  1. 기본 컨트롤러 클래스를 만들고 모든 컨트롤러가 상속되도록하십시오.
  2. 액션 필터 속성을 작성하고 FilterAttribute 및 ICECTIONFILTER에서 상속 받도록하십시오.
  3. 새 동작 필터 속성으로 기본 컨트롤러 클래스를 장식하십시오.

액션 필터 속성의 샘플은 다음과 같습니다.

public class SetCultureAttribute : FilterAttribute, IActionFilter 
{ 
    #region IActionFilter implementation

    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
        //logic goes here
    }

    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        //or logic goes here
    }

    #endregion IActionFilter implementation
}

다음은이 속성이있는 기본 컨트롤러 클래스의 샘플입니다.

[SetCulture]
public class ControllerBase : Controller
{
    ...
}

컨트롤러 클래스가 ControllerBase에서 상속되는 한이 방법을 사용하면 SetCulture 작업 필터가 항상 실행됩니다. 전체 샘플이 있고 이것에 대한 게시물이 있습니다 내 블로그에서 좀 더 세부적인 것을 원한다면.

도움이되기를 바랍니다!

다른 팁

상황이 좋아지는 방법 ... 2 년 후 우리는

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorElmahAttribute());
    }

모든 작업에 적용 할 필요는 없으며 모든 컨트롤러에 적용 할 수 있습니다 (예 : 방법이 아닌 클래스에 속성을 넣습니다).

또는 Ian이 언급했듯이 기본 컨트롤러 클래스에 넣은 다음 해당 컨트롤러에서 확장 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top