use*_*705 9 c# asp.net-mvc session
我有一个场景,如:
搜索控件我们的数据输入人员输入用户ID并搜索他们的详细信息并浏览与该用户相关的不同页面.
所以在我的MVC应用程序中,我正在设置一个会话来维护会话变量中的用户ID.在页面上的每个方法(如编辑,更新..etc)我正在检查用户会话是否存在.我可以在全球范围内进行,所以我不需要每次检查吗?就像在global.asax中一样
protected void Application_Start()
{
}
Run Code Online (Sandbox Code Playgroud)
或编写自定义方法来检查会话.
请有人帮助我做到这一点.
谢谢
Ser*_*nov 13
在MVC应用程序中,您可以创建继承自AuthorizeAttribute的属性,然后在该属性中可以检查您的会话.您可以将它放在需要的控制器或GlobalFilters集合上.
UPDATE1
以下是此类逻辑的示例
public class SessionAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return httpContext.Session["InsuredKey"] != null;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectResult("/some/error");
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以把它放在需要的控制器之下
[SessionAuthorize]
public class SomeController
{
}
Run Code Online (Sandbox Code Playgroud)
Har*_*ara 11
接受的答案实际上没有重定向到当时指定的页面HandleUnauthorizedRequest.
我不得不修改一些东西才能使它工作
public class SessionAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return httpContext.Session["InsuredKey"] != null;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "action", "YourAction" },
{ "controller", "YourController" }
});
}
}
Run Code Online (Sandbox Code Playgroud)
它可能对未来的用户有所帮助.