如何从一个FilterAttribute内得到当前的URL?(How do I get the cu

2019-07-29 14:13发布

我写的授权筛选器属性ADN我无法搞清楚如何获得当前的URL作为一个字符串,所以我可以把它作为一个参数来登录动作。 我们的目标是,如果用户成功登录,他们将被重定向到他们最初试图访问的页面。

public override void OnAuthorization(AuthorizeContext filterContext)
{
    base.OnAuthorization(filterContext);

    ... my auth code ...
    bool isAuth ;
    ... my auth code ...

    if(!isAuth)
    {
        filterContext.Result = new RedirectToRouteResult(
            new RouteValueDictionary { 
                { "Area", "" }, 
                { "Controller", "Account" }, 
                { "Action", "LogOn" },
                { "RedirectUrl", "/Url/String/For/Currnt/Request" } // how do I get this?
            }
        );
    }
}

如何获取当前请求完整的字符串网址?

Answer 1:

尝试:

var url = filterContext.HttpContext.Request.Url;


Answer 2:

要获得完整的URL ,你可以尝试通过的建议@rboarman但通常RedirectUrl将是相对URL和你有尝试的RawUrl的财产Request对象。

filterContext.HttpContext.Request.Url  ===> http://somesite.com/admin/manage

filterContext.HttpContext.Request.RawUrl ====> /admin/manage

编辑:固定在第二示例



Answer 3:

在我的特定情况下,我是后UrlReferrer URL。

filterContext.HttpContext.Request.UrlReferrer

这一次,让我将用户重定向回他是试图访问一个动作,他没有权限访问之前的页面。



Answer 4:

这是在谷歌排名最高的结果,所以在Asp.net 2.0的核心,这是我如何做它:

context.HttpContext.Request.Url();

使用该扩展方法:

/// <summary>
/// Returns the absolute url.
/// </summary>
public static string Url(this HttpRequest request)
{
    return $"{request.Scheme}://{request.Host}{request.Path}{request.QueryString}";
}


文章来源: How do I get the current Url from within a FilterAttribute?