MVC中的OnInit和Session

时间:2017-10-30 12:31:54

标签: c# asp.net asp.net-mvc asp.net-mvc-5

在ASP.Net中,我们之前编写了此代码用于授权:

public class PageBase : System.Web.UI.Page
{
    protected override void OnInit(System.EventArgs e)
    {
        string CurrentPath = HttpContext.Current.Request.Url.AbsolutePath.ToLower();

        //Check If User Access to this Path
        if(WebUser.Access(CurrentPath) == false)
        {
            Reposponse.Redirect("Loagin.aspx");
        }
    }    
}

WebUser是包含用户数据的会话:

public User WebUser
{
    get
    {
        if (HttpContext.Current.Session["User"] != null)
        {
            return (User)HttpContext.Current.Session["User"];
        }
        else
        {
            HttpContext.Current.Response.Redirect("Login.aspx", true);
            return null;
        }
    }
}

我们继承了PageBase的所有网页。

现在,如果我想使用MVC编写类似的代码,我可以编写一个在每个请求上运行的代码吗?

感谢

2 个答案:

答案 0 :(得分:2)

您希望根据您的问题在MVC中对用户进行身份验证和授权。您可以使用身份验证和授权过滤器对用户进行身份验证和授权。这很简单,

  • 您需要创建身份验证和授权过滤器 enter image description here
  • 然后您需要在Controller上使用该过滤器(在验证该控制器中提到的所有操作方法时)或Action方法(仅在验证操作方法时)作为属性。 enter image description here enter image description here

请查看link,了解我们如何创建身份验证和授权过滤器以及如何在代码中使用它们。

答案 1 :(得分:1)

您可以创建一个BaseController课程并将其应用于每个MVC Controllers。您可以将通用属性和方法添加到:

public class ControllerBase : Controller
{
    public string UniversalPath { get; set; }

    public ControllerBase()
    {          
    }
}

然后让您的MVC page controllers继承自BaseController而不是默认的Controller类:

public class ExamplePageController : ControllerBase
{
    public ActionResult Index(int id)
    {
        return View();
    }
}