Есть ли простой способ рендеринга абсолютных URL-адресов с инфраструктурой веб-оптимизации Microsoft/script?

Я пытаюсь отобразить пакет JavaScript с использованием инфраструктуры веб-оптимизации Microsoft, например:

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

И построим небольшой пакет, например:

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

    ...
}

Но когда оптимизация включена, он отображает только относительный URL-адрес, например:

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

Как я могу связать script рендеринг абсолютного URL вместо этого? Я не мог найти способ сделать это, просматривая документы в MSDN. Вот что мне в конечном итоге понравится:

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

Является ли это в рамках, или мне нужно катить вспомогательный метод с помощью Script.Url?

Ответ 1

Один простой способ: Scripts.RenderFormat:

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

Способ получения URL-адреса от запроса. Невозможно использовать несколько параметров с RenderFormat, поэтому почему это выглядит немного уродливо:

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

или еще лучше, централизуйте функцию, чтобы получить правильный путь (используя вымышленную функцию):

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

Кроме того, вам не нужен .js в пакете:

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