Есть ли простой способ отображать абсолютные URL-адреса с помощью Microsoft Web Optimization framework / 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>

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

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

Это в фреймворке или мне нужно свернуть вспомогательный метод с Script.Url?


person Brandon Linton    schedule 12.02.2014    source источник
comment
Это может помочь. Хотя IDK, если есть лучший способ сделать это в более новой версии комплектации. Какова ваша конечная цель в этом?   -  person MikeSmithDev    schedule 12.02.2014
comment
К сожалению, это по-прежнему разрешается в относительный URL. Относительные пути обычно хорошо работают для браузера, но плохо работают для элементов управления пользовательского интерфейса (скажем, в iOS), где вы не предоставляете базовый URL.   -  person Brandon Linton    schedule 12.02.2014


Ответы (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")
person MikeSmithDev    schedule 12.02.2014
comment
Спасибо за это; Я согласен, что это сработает, хотя тогда мне придется настроить корневой URL-адрес для каждой среды, когда я действительно предпочел бы, чтобы он ушел от пути к хосту / виртуальному приложению. Если он действительно отсутствует во фреймворке, я бы попытался вывести его из запроса. - person Brandon Linton; 12.02.2014
comment
@BrandonLinton добавил способ определения URL-адреса из запроса. - person MikeSmithDev; 12.02.2014