2012-05-15 45 views
13

進出口使用的類名RightCheckerAttribute來檢查用戶權限在MVC3應用... 所以RightCheckerAttribute類是這樣的...MVC的C#中使用操作過濾器使用的查詢字符串

public bool isAdmin { get; set; } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     HttpContextBase context = filterContext.HttpContext; 

     bool result = Convert.ToBoolean(context.Request.QueryString["isAdmin"].ToString()); 

     if (isAdmin != result) 
     { 
      RouteValueDictionary redirecttargetDictionary = new RouteValueDictionary(); 
      redirecttargetDictionary.Add("action", "NoPermission"); 
      redirecttargetDictionary.Add("controller","Singer"); 
      filterContext.Result = new RedirectToRouteResult(redirecttargetDictionary); 

     } 

     //base.OnActionExecuting(filterContext); 
    } 

所以我的方法應用這有頭..

[RightChecker (isAdmin=true)]

林執行此方法,因爲這..

http://localhost:5576/Singer/DeleteSinger?isAdmin=true

的問題是我是否合格真的還是假的......我產生假變量...而且我越來越:

例外[空對象引用] ...

+0

哪一行給你例外? – gideon

+0

bool result = Convert.ToBoolean(context.Request.QueryString [「isAdmin」]。ToString()); 行給出異常 –

+2

檢查查詢字符串以確定用戶是否是管理員不安全。你可能想要將它存儲在會話insead中。 –

回答

15

看來你是不流通isAdmin=falseisAdmin=true在您的查詢字符串。這個對我有用。但是,您需要處理您未傳遞查詢字符串參數的情況。檢查我的實施。正如問題的註釋部分所述,它不夠安全,無法通過查詢字符串傳遞。從查詢字符串

 public class RightChecker : ActionFilterAttribute 
     { 
      public bool IsAdmin;    

      public override void OnActionExecuting(ActionExecutingContext filterContext) 
      { 

       bool result = false; 
       if (filterContext.HttpContext.Request.QueryString["isAdmin"] != null) 
       { 
         bool.TryParse(filterContext.HttpContext.Request.QueryString["isAdmin"].ToString(), out result); 
       } 

       if (IsAdmin != result) 
       { 
        //your implementation 
       } 
      } 
     } 

動作方法

[RightChecker(IsAdmin=true)] 
    public ActionResult AttCheck() 
    { 
     return View(); 
    } 
+0

謝謝你的回答.. tht作品...:D –

+0

不用客氣;很高興我能幫上忙。 –

0

好像也許context.Request.QueryString["isAdmin"].ToString()導致NullReferenceException

嘗試

var param = context.Request.QueryString["isAdmin"] as string ?? "false"; 
var result = param == "true"; 
+0

作者說他正在傳遞參數,但仍然出現錯誤。 http:// localhost:5576/Singer/DeleteSinger?isAdmin = true –

+0

@Asif作者的評論表明當調用ToString()時拋出'NullReferenceException'。所以我猜測,由於某種原因查詢參數不被傳遞。無論如何,我應該檢查'null',這是我相信我會照顧的答案。 – Soliah

+0

我認爲這是他的問題,爲什麼如果他通過帕拉姆它爲空。 –

0

通行證這在你的ViewData如下所示:

public ActionResult Test(bool testParam) 
{ 
    ViewData["isAdmin"] = testParam; 
    return View(); 
}