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

asp.net – 授权属性中的UrlHelper和ViewContext

发布时间:2020-12-16 04:07:06 所属栏目:asp.Net 来源:网络整理
导读:我有一个我无法解决的场景: 我正在为mvc创建自己的自定义授权属性.我想添加的主要功能是能够更改用户重定向的位置(如果用户不在某个角色中).我不介意系统将它们发送回登录页面,如果它们未经过身份验证,但我想选择在哪里发送它们,如果它们经过身份验证但不允
我有一个我无法解决的场景:

我正在为mvc创建自己的自定义授权属性.我想添加的主要功能是能够更改用户重定向的位置(如果用户不在某个角色中).我不介意系统将它们发送回登录页面,如果它们未经过身份验证,但我想选择在哪里发送它们,如果它们经过身份验证但不允许访问该操作方法.

这是我想做的事情:

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
        public string Action;
        public string Controller;

        protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext)
        {
            // if User is authenticated but not in the correct role
            string url = Url.Action(this.Action,this.Controller);                
            httpContext.Response.Redirect(url);
        }
    }

作为一个额外的奖励,我希望在进行重定向之前可以访问ViewContext和TempData.

有关如何在属性中实例化UrlHelper和ViewContext的任何想法?

解决方法

您可以覆盖 OnAuthorization方法:
public override void OnAuthorization(AuthorizationContext filterContext)
{
    if (filterContext == null)
    {
        throw new ArgumentNullException("filterContext");
    }

    // Call the AuthorizeCore which should return true or false
    if (!this.AuthorizeCore(filterContext.HttpContext))
    {
        filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary()
        {
            { "controller","home" },{ "action","about" },{ "id","foo" },});
    }
}

就ViewData和TempData而言:filterContext.Controller.ViewData和filterContext.Controller.TempData应该在OnAuthorization方法中工作.最后,如果你想使用UrlHelper(在这种情况下没有必要,因为RedirectToRouteResult更好)你可以实例化它:

var urlHelper = new UrlHelper(filterContext.RequestContext);

(编辑:李大同)

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

    推荐文章
      热点阅读