2012-08-30 3 views
10

아무런 문제없이 사용자 정의 Action Filter을 만들었습니다.ActionResult에 전달 된 매개 변수를 사용하는 MVC 작업 필터?

하지만 실제로 메서드에 전달 된 매개 변수 중 일부를 사용하도록 동작 필터를 수정하고 싶습니다.

그래서 나는 다음과 같은 방법이있는 경우 :

[HttpPost] 
[MyAttribute] 
public ActionResult ViewUserDetails(Guid userId) 
{ 
    // Do something 
} 

가 어떻게 MyAttribute 내에서 userId를에 액세스 할 수 있습니다를? 직접 전달할 수있는 방법이 있습니까?

+0

나는 그 매개 변수로 전달되는 사용자 ID에 액세스하는 방법이 있다고 생각하지 않습니다. 시스템에 로그인 한 사용자의 USER ID에 액세스하는 방법이있을 수 있습니다. 그리고 당신은 View 데이터의 어떤 것에도 접근 할 수 있습니다 ...하지만 가능하다해도 그 경로를 추천하지는 않을 것입니다. – AwDogsGo2Heaven

답변

13

조치 매개 변수에 대한 액세스 권한이있는 OnActionExecuting 무시를 시도 할 수 있습니다.

public class MyAttribute: ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    {  
     if (filterContext.ActionParameters.ContainsKey("userId")) 
     { 
      var userId = filterContext.ActionParameters["userId"] as Guid; 
      if (userId != null) 
      { 
       // Really?! Great!    
      } 
     } 
    } 
} 
0

FilterAttribute에서 파생되고 IAuthorizationFilter을 구현하는 사용자 지정 특성을 만들 수 있습니다.

또한 사용자 ID를 전달하지 않고도 filterContext.HttpContext.User.Identity에 액세스하여 OnAuthorization 방법으로 사용자 정보를 얻을 수 있어야합니다.

+0

필자는 그가 로그인 한 사용자 ID를 반드시 찾지는 않는다고 생각합니다. 사용자를 볼 수있는 관리자 페이지를 만드는 것처럼 보입니다. –

관련 문제