2017-04-05 84 views
0

非常感謝你的回答我的問題,因爲我在asp.net很新,我真的很感激如何使用會話來避免某些用戶查看某些頁面?

我有一個會話身份用戶在控制器

Session["UserId"] = UserNo; 
    Session["UserType"] = UserType; 

我能如何避免用戶如Session [「UserType」]爲「3」,然後避免他/她登錄到某些網頁?

我需要在控制器中控制過濾器配置的視圖?

+1

在控制器的操作方法,例如用'if'條件覈對後僅僅對它們進行重定向if(Session [「UserId」] == 3){return RedirectToAction([禁止頁面URL]); }' –

+0

謝謝@TetsuyaYamamoto,我不知道答案很簡單 –

回答

2

創建一個BaseController以及您要檢查用戶的所有其他控制器應繼承它。請求ActionResult之前,首先BaseController的構造會的工作,所以在BaseController構造函數,你可以做到這一點,

public BaseController() 
     { 
      try 
      { 
       int UserID = 0; 
       if (System.Web.HttpContext.Current.Session["UserId"] != null) 
        UserID = Convert.ToInt32(System.Web.HttpContext.Current.Session["UserId"]); 

       if (!(UserID > 0)) 
       { 
        System.Web.HttpContext.Current.Response.Redirect("controller/view"); 
       } 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
     } 

希望幫助,

+0

哦,非常感謝,那太好了! @Berkay –

+0

除了可能不是將這個邏輯放在構造中,而是使用['OnActionExecuting'覆蓋](https://msdn.microsoft.com/zh-cn/library/system.web.mvc.controller.onactionexecuting( v = vs.118).aspx) – Reddog

+0

我做了一個try catch方法,並且返回結果不起作用... 當我調試它時,它進入「return RedirectToAction ...」但沒有路由到以下url catch { return RedirectToAction(「Index」,「Home」); } –

1

只要你有將用戶重定向如果

public ActionResult Method() 
{ 
    if(Session["UserType"] = 3) 
    { 
    return View([forbidden page URL here]); 
    } 
    else 
    { 
    return View("controller/view"); 
    } 
} 

希望它有助於。

+1

'if(Session [「UserType」] = 3)'我想你需要修改這一行。 –

+0

哎呀謝謝@ MAdeelKhalid我修改了它 –

+0

我做了一個try catch方法,並且返回不起作用... 當我調試它時,它進入「return RedirectToAction ...」,但沒有路由到以下url catch { return RedirectToAction(「Index」,「Home」); } –

1

您只需在每次用戶嘗試訪問特定頁面時檢查會話值。

編輯: 試試這個

public ActionResult Details(int id) 
{ 
    var details = context.checkIfUserExist(userID); 
    if (details == null) 
    { 
     return RedirectToAction("takeHimSomewhere"); 
    } 
    return View(details); 
} 
+0

我做了一個try catch方法,並且返回不起作用... 當我調試它時,它進入「return RedirectToAction ...」但沒有路由到以下url catch { return RedirectToAction(「Index」,「Home」); } –

+0

@KeonVong - 請參閱我的編輯。 –

+0

我建議不要在MVC上使用Response.Redirect。 [性能問題]。 –

1

而所有其他的答案是正確的,工作的,我想帶領你解決這個問題,這也降低了代碼的更多的「ASP-ISH」風格因爲你不必在每個控制器中寫一個if。

在ASP.NET中,有一個身份概念,它可以完全實現您想要手動存檔的內容。 看看這裏:https://docs.microsoft.com/de-de/aspnet/core/security/authentication/identity

一旦你實現了身份,你可以用[Authorize]標記你的控制器方法。

https://docs.microsoft.com/de-de/aspnet/core/security/authorization/introduction

相關問題