2011-08-12 8 views
12
[ApiBasicAuthorize] 
public ActionResult SignIn() 
{ 

} 

이 맞춤 필터는 ApiBasicAuthorize라고합니다. 컨트롤러 액션 SignIn 내부에서 ApiBasicAuthorize의 데이터 (속성 등)에 액세스 할 수 있습니까?컨트롤러 액션에서 액션 필터의 데이터에 액세스하기

그렇지 않은 경우 필터에서 컨트롤러 작업으로 데이터를 전달하려면 어떻게해야합니까?

+0

. 당신은 경로 사전에 데이터를 추가 할 수 있습니다, 우리에게 당신의 더 많은 코드를 보여줍니다. –

+0

OnAuthorization (AuthorizationContext filterContext) 메서드를 재정의했습니다. –

답변

17

HttpContext 개체에 첨부 된 항목이라는 사전이 있습니다. 이 사전을 사용하여 요청 중에 구성 요소간에 공유되는 항목을 저장합니다. 그리고 어디 코드에서 나중에 요청

public override void OnAuthorization(AuthorizationContext filterContext) 
{ 
    filterContext.HttpContext.Items["key"] = "Save it for later"; 

    base.OnAuthorization(filterContext); 
} 

... 당신이 authrize_Attribute에서 재정의 방법

var value = HttpContext.Current.Items["key"]; 
+1

Praveen의 답조차도 작동하지만 HttpContext.Items가 RouteData.Values ​​대신이 목적에 더 적합하기 때문에 이것을 답변으로 표시했습니다. –

+2

@ 고스 - 안녕하세요, 왜 RouteData를 통해 HttpContext.Items를 선택했는지 설명해주십시오. '? 또한 참조하십시오 : http://stackoverflow.com/a/1809541/538387 감사합니다 – Tohid

+0

안녕하세요, 고맙습니다, 그렇습니다 나는 왜 후자보다 더 "적절한"이유는 궁금 하군요? 두 사람이 같은 목적을 위해 봉사하고있는 것처럼 보이므로 어떤 제한이나 의도로 두 사람이 분리되어 있는지 궁금합니다. – Funka

5
public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     var rd = filterContext.RouteData; 

     //add data to route 
     rd.Values["key"]="Hello"; 

     base.OnAuthorization(filterContext); 
    } 



public ActionResult(string key) 
{ 
//key= Hello 
return View(); 
} 
관련 문제