53

I am writing an Authorize filter attribute adn I'm having trouble figuring out how to get the current url as a string so I can pass it as a parameter to the LogOn action. The goal is that if a user successfully logs on, they will be redirected to the page they were originally trying to access.

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

How do I get the full string Url from the current request?

4 Answers 4

86

Try:

var url = filterContext.HttpContext.Request.Url;
Sign up to request clarification or add additional context in comments.

1 Comment

You could also use RawUrl (filterContext.HttpContext.Request.RawUrl) to get url without domain
19

To get the complete URL you can try as suggested by the @rboarman but usually the RedirectUrl will be the relative url and for that you have to try the the RawUrl property of the Request object.

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

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

EDITED: Fixed the second example

3 Comments

Did you mean for "RawUrl" to be used in your 2nd example?
-1 Observing the value of Url does not magically make it absolute then relative.
@JoshNoe Yes I meant the RawUrl in the second example. I'm little away from SO nowadays and I missed to see your comment.
7

In my specific case I was after the UrlReferrer URL.

filterContext.HttpContext.Request.UrlReferrer

This one let me redirect the user back to the page he was before trying to access an action he doesn't have permission to access.

Comments

5

This is the highest ranked result on Google so in Asp.net Core 2.0 this is how I'm doing it:

context.HttpContext.Request.Url();

using this extension method:

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.