c# - 如何创建一个自定义属性,如果它返回 false 将重定向到登录,类似于授权属性 - ASP.NET MVC

标签 c# asp.net .net asp.net-mvc asp.net-mvc-4

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

一旦用户登录,我就会在 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/

相关文章:

c# - 在 .NET 线程中花费了多少时间?

c# - 计算带锁和不带锁的线程 (c#)

c# - 如何在方法中提供可为空的参数?

asp.net - 绝对定位是最佳实践还是应该避免?

c# - 如何访问 x :Name-property in code - for non FrameworkElement objects?

iOS:从 ASP .Net Web 服务接收 JSON 响应

c# - 在 asp.net 中使用 EXCHANGE SERVER (Microsoft Outlook web access) 发送邮件

.net - 检查 DBNull 会引发 StrongTypingException

c# - 更新按钮查询无法正常工作 mysql c#

c# - 将非零余额账户加载到 DevExpress 树列表