Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC中的OnInit和Session_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

C# MVC中的OnInit和Session

C# MVC中的OnInit和Session,c#,asp.net,asp.net-mvc,asp.net-mvc-5,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

在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
编写类似的代码,我可以在哪里编写一个在每个请求上运行的代码


谢谢

您可以创建一个
BaseController
类,并将其应用于您的每个
MVC控制器
。您可以向其中添加通用属性和方法:

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

    public ControllerBase()
    {          
    }
}
然后让您的
MVC页面控制器
继承自您的
BaseController
,而不是默认的
Controller
类:

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

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

  • 您需要创建身份验证和授权筛选器以及
  • 然后,您需要在控制器上使用该过滤器(当验证该控制器中提到的所有操作方法时)或操作方法(当仅验证操作方法时)作为属性。

请查看以检查我们如何创建身份验证和授权筛选器,以及如何在代码中使用它们。

这看起来像是一个非常奇怪的自定义授权系统。但一般来说,如果您只是想将自定义代码注入框架的请求/响应管道,那么自定义操作筛选器似乎是理想的方法:该筛选器可以通过属性应用于特定的操作或控制器,或全局注册以对每个请求执行。将
C#-7
标记替换为
C#
,因为这似乎不是编译器的v7特有的。如果我在这方面出错,请随时撤消我的更改。不要滥用会话状态来跟踪身份验证状态!这样做会在应用程序中引入严重的安全漏洞。在基于asp.net(包括mvc)的应用程序(如asp.net-identity)中,有许多安全(预构建/现成)的方法来跟踪身份验证。@Igor请解释我应该考虑哪些安全因素?你是说会话不安全?我可能会受到什么类型的攻击?谢谢