如何在页面上执行任何活动之前检查MVC中的会话变量是否存在?

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)

它可能对未来的用户有所帮助.