如何返回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(); }