我尝试用谷歌搜索一些关于自定义属性的东西,但我仍然不确定如何去做....
一旦用户登录,我就会在 Session cookies(例如 UserID)中存储用户的一些重要详细信息。我想做的就是创建一个属性,如果
if (Session["UserID"] == null)
然后它将像 [Authorize] 属性一样重定向到登录。这样我就可以在 Controller 级别的任何地方应用这个属性。
我应该覆盖授权属性吗?创造一个新的?我如何让它也重定向到登录?
我也在使用 ASP.NET MVC 4
感谢您的帮助
最佳答案
您可以创建自定义 AuthorizeAttribute
并根据需要覆盖 AuthorizeCore()
和 HandleUnauthorizedRequest()
。添加您自己的逻辑,该逻辑将在必要时进行检查和重定向。
我只是展示了一个使用 MVC 的 ActionFilterAttribute
的简单示例(这不是进行身份验证/授权的最佳位置)
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));
}
}
在正确的用户验证后,不要忘记在您的 /User/Login
操作方法中设置 Session["UserID"]
变量。
关于c# - 如何创建一个自定义属性,如果它返回 false 将重定向到登录,类似于授权属性 - ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32925219/