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

asp.net – 使用自定义AuthorizeAttribute生成返回Url

发布时间:2020-12-16 07:34:32 所属栏目:asp.Net 来源:网络整理
导读:我有自定义授权属性: using System;using System.Web.Mvc;using System.Web.Routing;[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method,Inherited = true,AllowMultiple = true)]public class MyAuthorizeAttribute : AuthorizeAttribute{
我有自定义授权属性:

using System;
using System.Web.Mvc;
using System.Web.Routing;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method,Inherited = true,AllowMultiple = true)]
public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (!filterContext.HttpContext.Request.IsAuthenticated)
        {
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Login",action = "Login" }));
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
    }
}

…我用来装饰某些控制器:

[MyAuthorizeAttribute(Roles = "Superman,Batman,Spiderman")]
public class SuperHeroController : Controller
{
    // ....
}

任何人都可以解释如何修改授权代码,以便如果授权失败,登录URL包括ReturnUrl(当前控制器/方法的URL)?

这基本上是试图模仿Web表单ReturnUrl逻辑,但是以一种聪明的方式,我不必手动使用字符串作为URL.

解决方法

终于想通了,虽然有人可能会建议一个更好的方法……

filterContext.Result = new RedirectToRouteResult(
                        new RouteValueDictionary(
                            new
                            {
                                controller = "Login",action = "Login",returnUrl = filterContext.HttpContext.Request.Url.GetComponents(UriComponents.PathAndQuery,UriFormat.SafeUnescaped)
                            }));

(编辑:李大同)

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

    推荐文章
      热点阅读