2014-12-07 3 views
0

UnitOfWork가있는 기본 컨트롤러를 만들었으므로 항상 새 작업을 할 필요가 없습니다. 난 그냥 컨트롤러과 같이 정의 다음사용자 지정 작업 필터가 런타임에 실행되지 않습니다.

[ElmahLogFilter] 
[LoggingActionFilter] 
[RequestValidationFilter] 
public class BaseController : ApiController 
{ 
    private UnitOfWork _unitOfWork; 
    public UnitOfWork UnitOfWork 
    { 
     get { return _unitOfWork ?? (_unitOfWork = new UnitOfWork()); } 
    } 
} 

:

[System.Web.Http.Authorize(Roles = "Host, Guest")] 
public class MeetingController : BaseController 
{ 
    //Code in here 
} 

그러나 ActionFilters 아무도 때 실행되지 않습니다이 컨트롤러 내에서 나는 또한 모든 요청을 실행하려면 세 가지 액션 필터를 추가 한 요청하다. 각 ActionFilter가 MVC 버전과 충돌하지 않도록 System.Web.Http.Filters 네임 스페이스에서 작동하도록했습니다. 지금까지 단순히 하나 개의 액션 필터를 실행하려고 이것에 잠시 동안하지하지만 주사위 한

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Http.Filters; 

public class LoggingActionFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
    { 
     //Logging Code Here 
     base.OnActionExecuted(actionExecutedContext); 
    } 
} 

:이처럼 내 필터 중 하나가 모습입니다. 제가 빠진 것이 있습니까?

편집 : [Authorize] 특성을 제거하면 필터가 작동합니다. 그러나 여기서 역할이 준수되도록하는 것이 중요합니다.

답변

0

이 도움이 될 수 있습니다 : How does inheritance work for Attributes?

이 또한 도움이 될 수 How to add global ASP.Net Web Api Filters?

이러한 필터 위해 Application_Start 동안이 같은 일을하고, 모든 요청에서 실행하려면 아마 당신의 최선의 방법입니다 :

GlobalConfiguration.Configuration.Filters.Add(new ElmahLogFilter()); 
GlobalConfiguration.Configuration.Filters.Add(new LoggingActionFilter()); 
GlobalConfiguration.Configuration.Filters.Add(new RequestValidationFilter()); 
+0

Global.asax에 추가하면 슬프게도 차이가없는 것처럼 보입니다. 어떤 차이가 있다면 수정하여 내 질문을 업데이트 했습니까? –

0

인증 필터는 작업 필터보다 먼저 실행되며 ID가 인증되지 않으면 파이프 라인이 단락됩니다. 즉, 사용자가 필요한 역할을 수행하지 않으면 작업 필터 또는 작업 메서드 자체가 실행되지 않습니다.

관련 문제