Is there an easy way to render absolute URLs with Microsoft Web Optimization framework / script bundling?

I’m trying to render a JavaScript bundle using Microsoft’s Web Optimization framework, like this:

@Scripts.Render("~/assets/bundle.js")

And building a small bundle, like this:

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new ScriptBundle("~/assets/bundle.js")
        .Include(
            "~/scripts/jquery-2.1.0.min.js",
            "~/scripts/somescript.js"
        ));

    ...
}

But when optimizations are on, it only renders a relative URL, like this:

<script src="/assets/bundle.js?v=mGDOiNaiTrSfcNq41OoA7A_BcN8PrXuMbfl-TE84HVY1"></script>

How can I have script bundling render an absolute URL instead? I couldn’t find a way to do this looking through the docs on MSDN. This is what I would ultimately like:

<script src="https://my.site.com/assets/bundle.js?v=mGDOiNaiTrSfcNq41OoA7A_BcN8PrXuMbfl-TE84HVY1"></script>

Is this in the framework, or do I have to roll a helper method with Script.Url?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

One easy way is with Scripts.RenderFormat:

@Scripts.RenderFormat("<script src='https://my.site.com{0}'></script>","~/assets/bundle.js")

A way to get URL from request. Couldn’t seem to use multiple parameters with the RenderFormat, so that’s why it looks a little ugly:

 @Scripts.RenderFormat("<script src='//" + @Request.Url.Host + "/{0}'></script>", "~/assets/bundle.js")

or better yet, centralize a function to get the correct path (using a fictional function):

@Scripts.RenderFormat("<script src='" + @Tools.GetRootURL() + "{0}'></script>", "~/assets/bundle.js")

Also, you don’t need the .js on the bundle:

bundles.Add(new ScriptBundle("~/assets/bundle")


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x