MVC ActionFilterAttribute 重定向以及判断空session登录等

14 篇文章 0 订阅

1、在项目中新建个Filter文件夹,在文件夹里面添加该过滤器类,命名为:BasicAuthAttribute.cs;此类需要继承ActionFilterAttribute(关于ActionFilterAttribute大家可以按F12跳转到该类的详细介绍进行了解和使用);我在新建的BasicAuthAttribute.cs中使用了OnActionExecuting,该类代码如下:如下代码在使用的时候还需要添加引用:

using System.Web.Mvc;
using System.Web.Routing;
using System.Web.Security;
namespace Linkin.Manager.Filter
{
    public class BasicAuthAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var account = filterContext.HttpContext.Session["account"];
            var password = filterContext.HttpContext.Session["password"];
            if (account == null || password == null)
            {
                //用户不登陆的时候跳转到登录页面
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Home", action = "Login", area = string.Empty }));
            }
        }
    }
}
到此为止,过滤器已经写好了,具体的项可以直接F12到起定义进行查看,可以看出当用户不登陆的时候会跳转到登录页面
2、此时需要到配置文件里的登录配置是怎么配置的,打开web.config,找到节点<authentication mode="Forms"></authentication>查看配置,如果自己的登录页面跟web.config里面的配置一样就不需要修改了,不一致的最好修改一下
    <!--这里配置的是登录页面的权限配置-->
    <authentication mode="Forms">
      <forms loginUrl="~/Home/Login" timeout="2880"   />
    </authentication>
3、这样以后在controller里面就可以直接用该过滤器了,在要使用此项过滤器的controller里面直接加入下面的红色字体,此时这样还需要引入该文件的引用:using Linkin.Manager.Filter;(此引用要根据自己的项目的实际情况来添加)代码如下:
   [ BasicAuthAttribute]
    public class AdminController : BasicController
    {
        [HttpGet]
        public ActionResult Index(string id, string key, int state = -1, int page = 1)
        {
            ViewBag.Id = id;
            ViewBag.Key = key;
            ViewBag.State = state;
            return View(AdminService.QueryPageList(id, key, state, page, 10));
        }
   }
上面的代码是将起放到了外面,也可以将起直接放到里面,如下:
public class AdminController : BasicController
    {
        [BasicAuthAttribute]
        [HttpGet]
        public ActionResult Index(string id, string key, int state = -1, int page = 1)
        {
            ViewBag.Id = id;
            ViewBag.Key = key;
            ViewBag.State = state;
            return View(AdminService.QueryPageList(id, key, state, page, 10));
        }
  }

4、经过以上的步骤就弄好了,此时运行网站,在不登陆的时候,直接在浏览器的地址栏输入http://localhost:2341/setting/admin,此时可以看到页面跳转到了登录页面

使用ActionFilterAttribute进行重定向注意事项

1.分部视图方法不能添加该特性,会报子方法不能重定向操作的错误

2.必须用给filterContext.Result赋值的方法进行重定向,而不能用filterContext.HttpContext.Response.Redirect,

否则,该特性执行完成后,会继续执行Action和其他ActionFilterAttribute

 

示例代码如下:

复制代码
 public class UserAuthenticationAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (filterContext == null || filterContext.HttpContext == null)
                return;

            HttpRequestBase request = filterContext.HttpContext.Request;
            if (request == null)
                return;


            var workContext = EngineContext.Current.Resolve<IWorkContext>();

            if(workContext.CurrentSISTUser==null)
            {
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
                {
                    controller = "Account",
                    action = "Login"
                }));
                //filterContext.HttpContext.Response.Redirect("/Account/Login", true);
                return;
            }

        }
    }
参考地址:
https://www.cnblogs.com/TheSecondRegister/p/3838375.html
https://www.cnblogs.com/ldybyz/p/6236046.html

 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值