C# MVC中的OnInit和Session
在ASP.Net中,我们之前编写了以下授权代码: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
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请解释我应该考虑哪些安全因素?你是说会话不安全?我可能会受到什么类型的攻击?谢谢