Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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="http://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?

like image 572
Brandon Linton Avatar asked Feb 12 '14 15:02

Brandon Linton


1 Answers

One easy way is with Scripts.RenderFormat:

@Scripts.RenderFormat("<script src='http://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")
like image 155
MikeSmithDev Avatar answered Nov 01 '22 21:11

MikeSmithDev