Generating absolute urls from Html.RouteLink

asp.net-mvc, asp.net-mvc-3, html-helper, routes

Solution

You can use the following overload:

@Html.RouteLink(
    "click me", 
    "Default", 
    "http", 
    null, 
    null, 
    new { 
        email = Model.Email, 
        key = Model.Key, 
        controller = "Home", 
        action = "Index" 
    }, 
    null)

`Default` is the route name as defined in `Global.asax`, `http` is the protocol (could be `https` if you wish, or simply use `Request.Url.Scheme` to get the containing page protocol and avoid ugly hardcodings), then an anonymous object containing the route values and that's pretty much all -> you will get an absolute url.

By the way all url generating helpers have overloads which take the protocol and hostname: use those for absolute urls.

Problem

I'm using `@Html.RouteLink("Validate", "ValidateEmail", new { email = Model.Email, key = Model.Key })` to generate a link that I send in an email to newly registered user. And as I was trying this out I discovered that, wops, it didn't generate absolute urls... This means I got a link like `<a href="/Membership/Validate/email.to%40you.com?key=someKey">Validate</a>`. However, as I send this link in an email it (of cause) won't work, so how do I go about making this better? Any simple solutions?

Original source