如何返回false,如何创建将重定向到Login的自定义属性,类似于Authorize属性 – ASP.NET MVC

我尝试使用谷歌搜索关于自定义属性的一些东西,但我仍然不确定如何去做….

一旦用户登录,我就会在会话cookie(ex UserID)中存储用户的一些重要细节..而我想要做的就是创建一个属性,如果

if (Session["UserID"] == null)

然后它会像[Authorize]属性一样重定向到登录。 这样我就可以在各个控制器级别应用此属性。

我应该覆盖Authorize属性吗? 创建一个新的? 如何让它重定向到登录?

我也在使用ASP.NET MVC 4

谢谢你的帮助

您可以根据需要创建自定义AuthorizeAttribute并覆盖AuthorizeCore()HandleUnauthorizedRequest() 。 添加您自己的逻辑,如有必要,将执行检查和重定向。

我只是展示一个使用MVC的ActionFilterAttribute的简单示例(这不是进行身份validation/授权的最佳位置)

 public class VerifyUserAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { var user = filterContext.HttpContext.Session["UserID"]; if (user == null) filterContext.Result = new RedirectResult(string.Format("/User/Login?targetUrl={0}",filterContext.HttpContext.Request.Url.AbsolutePath)); } } 

在正确的用户validation后,不要忘记在/User/Login操作方法中设置Session["UserID"]变量。

您可以通过实现IAuthorizationFilter接口来创建自己的Authorize属性版本。 这是一个例子:

 class MyCustomFilter : FilterAttribute, IAuthorizationFilter { public void OnAuthorization(AuthorizationContext filterContext) { if (filterContext.HttpContext.Session["UserID"] == null) { filterContext.Result = new RedirectResult("/"); } } } 

和一个用法示例:

 [MyCustomFilter] public ActionResult About() { ViewBag.Message = "Your application description page."; return View(); }