加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-2 – RedirectToRouteResult如何工作?

发布时间:2020-12-16 03:46:20 所属栏目:asp.Net 来源:网络整理
导读:我目前正在使用RedirectToRouteResult,如下所示: public void OnAuthorization(AuthorizationContext filterContext){ User user = filterContext.HttpContext.Session["user"] as User; if (user == null || user.Role != expectedRole) { filterContext.R
我目前正在使用RedirectToRouteResult,如下所示:

public void OnAuthorization(AuthorizationContext filterContext)
{
    User user = filterContext.HttpContext.Session["user"] as User;
    if (user == null || user.Role != expectedRole)
    {
        filterContext.Result = new RedirectToRouteResult(
            new RouteValueDictionary {
                {"controller",_controller},{"action",_action}
        });
    }
}

此代码位于我的CheckLoginAttribute类中.

我打算将它用作特定控制器操作的装饰器,例如:

[CheckLogin(RolesEnum.Member,"MyController","MyAction")]
public JsonResult GetNews()

所以基本上,我正在尝试将对GetNews()的调用短路,并在用户未登录时跳过执行操作.如果用户未登录,那么我希望它重定向到另一个操作.

将RedirectToRouteResult重定向到相应的操作服务器端,而不必通过客户端进行大循环(如重写窗口URL位置或类似的东西)?它是如何工作的?

解决方法

好吧,我已经把它弄清楚了.

所以基本上,它不是我需要的“重定向”.我正在寻找错误的地方来解决我的问题.我知道重定向意味着我必须进行几次客户端/服务器之旅才能返回json结果并且感觉不对.

我花了一段时间才意识到我可以将任何类型的结果传递给filterContext.Result.

我的错.我没有问正确的问题,因为我没有完全理解我面临的问题.经过大量的研究后,它归结为非常愚蠢.

最终解决方案是:

public class CheckLoginAttribute : AuthorizeAttribute,IAuthorizationFilter
{

    private RolesEnum expectedRole;

    public CheckLoginAttribute(RolesEnum role)
    {
        expectedRole = role;
    }

    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        User user = filterContext.HttpContext.Session["user"] as User;
        if (user == null || user.Role != expectedRole)
        {
            filterContext.Result = new JsonResult()
            {
                JsonRequestBehavior = JsonRequestBehavior.AllowGet,Data = new LoginMessage() { IsValidLogin = false }
            };
        }
    }
}

现在我可以用这个来装饰我的动作方法:

[CheckLogin(RolesEnum.Admin)]

多一点代码来避免ASP.NET Session窃取,我已经完成了.

我希望这能帮助那里的人.谢谢.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读