50

我正在编写一个授权过滤器属性和我无法弄清楚如何将当前 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

4 回答 4

82

尝试:

var url = filterContext.HttpContext.Request.Url;
于 2012-05-25T21:30:40.930 回答
19

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

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

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

编辑:修复了第二个示例

于 2012-05-26T13:00:36.610 回答
7

在我的具体情况下,我在UrlReferrerURL 之后。

filterContext.HttpContext.Request.UrlReferrer

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

于 2013-05-04T08:53:37.250 回答
5

这是 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}";
}
于 2018-05-04T14:38:48.693 回答