C# 如何绕过控制器上的[SessionExpire]属性

C# 如何绕过控制器上的[SessionExpire]属性,c#,asp.net,C#,Asp.net,我想绕过已重定向到登录的[SessionExpire]。 我想绕过该属性,在不登录的情况下执行它 自定义属性,如图所示: public class SessionExpireAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { HttpContext ctx

我想绕过已重定向到登录的[SessionExpire]。 我想绕过该属性,在不登录的情况下执行它

自定义属性,如图所示:

public class SessionExpireAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            HttpContext ctx = HttpContext.Current;
            // check  sessions here
            if( HttpContext.Current.Session["username"] == null ) 
            {
               filterContext.Result = new RedirectResult("~/Account/Login");
               return;
            }
            base.OnActionExecuting(filterContext);
        }
    }

//SAMPLE IMPLEMENTATION:


[SessionExpire]
public class HomeController : Controller
{
  public ActionResult Index()
  {
     return Index();
  }
//I WANT TO BYPASS THIS JSONRESULT WITHOUT GOING TO SESSIONEXPIRE
  public JsonResult Result()
  {

     return Json();
  }

}

我不知道这是否可行,但如果在其中放入一个额外的属性,然后在一个异常方法上传递数据,会怎么样?比如:

public class SessionExpireAttribute : ActionFilterAttribute
{
    public bool IsIgnore {get;set;}

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (IsIgnore)
            base.OnActionExecuting(filterContext);

        HttpContext ctx = HttpContext.Current;
        // check  sessions here
        if( HttpContext.Current.Session["username"] == null ) 
        {
           filterContext.Result = new RedirectResult("~/Account/Login");
           return;
        }
        base.OnActionExecuting(filterContext);
    }
}

//SAMPLE IMPLEMENTATION:


[SessionExpire]
public class HomeController : Controller
{
  public ActionResult Index()
  {
   return Index();
  }
//I WANT TO BYPASS THIS JSONRESULT WITHOUT GOING TO SESSIONEXPIRE
  [SessionExpire(IsIgnore = true)]
  public JsonResult Result()
  {
     return Json();
  }
}
乔纳森回答:

在自定义属性中传递自定义参数。 链接


谢谢

这里您要做的是检查用户是否已通过身份验证,但这是一种非常定制的方式。官方文件相当广泛,因此我建议阅读

对于您的案例,我建议您实施和使用。绕过身份验证


此外,您还可以通过将用户重定向回其在身份验证之前尝试访问的页面来改进用户体验。例如,如果用户试图导航到
/orders
,但他没有通过身份验证,他将被重定向到
/account/login
,一旦他通过身份验证,他应该自动返回到
/orders
。您可以使用以下参数:
/account/login?redirect=orders

何时执行此操作?总是如果是这样,也许可以调整你的超时时间?@Jonathan我在问题中添加了一些信息,先生,我只想执行一个jsonresult而不去登录。你可以将属性放在你想要使用的特定控制器方法上,而不是放在整个控制器上class@Jonathan是 啊这是我最后的办法,因为在我的控制器中,我有20个类要分开放置[sessionexpire]。@Jonathan你删除了你的答案。它正在工作,我从您的代码中添加了“else”。搜索了它并给出了答案的链接。非常感谢你!