微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有自定义授权属性

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)
                            }));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐