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,此时可以看到页面跳转到了登录页面
■
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