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

} 

我有這種名爲ApiBasicAuthorize的自定義過濾器。是否有可能訪問控制器操作SignIn內的ApiBasicAuthorize的數據(屬性等)?在控制器操作中訪問操作過濾器的數據

如果不是,我如何將數據從過濾器傳遞到控制器操作?

+0

你在authrize_Attribute覆蓋哪種方法。你可以添加數據來路由字典,向我們展示更多你的代碼。 –

+0

我重寫OnAuthorization(AuthorizationContext filterContext)方法。 –

回答

17

有一個名爲附加到HttpContext對象的字典。使用此字典可以存儲請求期間通過組件共享的項目。

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

    base.OnAuthorization(filterContext); 
} 

然後在你的代碼的任何地方在後面的請求......

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

即使Praveen的答案有效,但我已將此標記爲答案,因爲HttpContext.Items更適合於此目的而不是RouteData.Values –

+2

@goths - 嗨,請解釋爲什麼您選擇'HttpContext.Items'而不是RouteData '?另見:http://stackoverflow.com/a/1809541/538387謝謝 – Tohid

+0

嗨@goths,是的,我也很好奇,爲什麼前者比後者更「合適」?看起來他們都是爲了同樣的目的,所以想知道限制或意圖將兩者分開了嗎? – 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(); 
}