如何从FilterAttribute中获取当前Url?

时间:2012-05-25 21:25:42

标签: asp.net-mvc url authorization action-filter actionfilterattribute

我正在编写一个授权过滤器属性,因为我无法弄清楚如何将当前url作为字符串获取,因此我可以将其作为参数传递给LogOn操作。目标是,如果用户成功登录,他们将被重定向到他们最初尝试访问的页面。

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

如何从当前请求中获取完整的字符串Url?

4 个答案:

答案 0 :(得分:67)

尝试:

var url = filterContext.HttpContext.Request.Url;

答案 1 :(得分:16)

要获得完整的URL,您可以按照@rboarman的建议进行尝试,但通常RedirectUrl将是相对网址,为此您必须尝试RawUrl对象的Request属性。

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

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

已编辑:已修复第二个示例

答案 2 :(得分:5)

在我的具体案例中,我在UrlReferrer网址之后。

filterContext.HttpContext.Request.UrlReferrer

这个允许我在尝试访问他无权访问的操作之前将用户重定向回他所在的页面。

答案 3 :(得分:1)

这是Google上排名最高的结果,所以在Asp.net Core 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}";
}