2012-08-30 73 views
10

我創建了一個自定義Action Filter沒有問題。使用傳遞給ActionResult的參數的MVC動作過濾器?

但我想修改Action Filter以使用一些實際傳遞給我的方法的參數。

所以,如果我有以下方法:

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

如何從MyAttribute裏訪問用戶id?有什麼方法可以直接傳入?

+0

我不認爲有一種方法來訪問傳遞到該參數的用戶ID。可能有一種方法可以訪問登錄到系統的用戶的用戶標識。而且您可能能夠訪問視圖數據中的任何內容......但即使可以,我也不會推薦使用該路線。 – 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

您還應該能夠通過訪問filterContext.HttpContext.User.Identity來獲取OnAuthorization方法中的用戶信息,而不需要傳遞用戶標識。

+0

我不認爲他一定在尋找登錄的用戶ID,它看起來更像是在製作一個管理頁面來查看任何用戶。 –

相關問題