Доступ к HttpContext в Application_Start ASP.NET MVC 4.0

Я хотел бы получить доступ к моему хосту и собрать свои пакеты. Я знаю, что это не прямой доступ к httpcontext в Application_start.

Можете ли вы посоветовать какую-либо другую работу, чтобы найти метод Request.url.host в RegisterBundles

Global.asax

 protected void Application_Start()
        {
          BundleConfig.RegisterBundles(BundleTable.Bundles);
        }

BundleConfig.asax

public static string host { get; set; }
        public static string siteCssFileName { get; set;  }
        public static void RegisterBundles(BundleCollection bundles)
        {
host = "~";
            if (System.Web.HttpContext.Current.Request.Url.Host.Contains("local"))
                host = "http://localhost:xxx";
                else
                host=Request.url.host;
                bundles.Add(new StyleBundle("~/Content/jQuery/ui/css")
                  .Include(host+"/css/jQuery/hro-0079c1/jquery-ui-1.8.11.custom.css"));
         }

person HaBo    schedule 01.02.2013    source источник


Ответы (2)


Изменить: Предлагая альтернативные подходы.

Вот несколько способов сделать это:

  • Создайте две версии ваших пакетов
  • Добавьте частичное представление, которое проверяет Request.IsLocal и отображает соответствующий набор пакетов.
  • Вызовите частичный вид из вашего макета

Альтернативным подходом может быть создание метода HtmlHelper, который разрешает путь за вас.

Еще один подход заключается в создании нескольких макетов и определении правильного для использования в вашем представлении.

Есть много способов реализовать это, вот лишь некоторые из них.

person MisterJames    schedule 01.02.2013
comment
Я думаю, вы рекомендуете использовать класс LocalConstraint. но как мне вызвать этот метод Match, чтобы получить значение IsLocal - person HaBo; 02.02.2013
comment
Извините... Немного поясню свой ответ. - person MisterJames; 04.02.2013
comment
Итак, вы говорите, что не использовать этот BundleConfig.RegisterBundles(BundleTable.Bundles); при запуске приложения? - person HaBo; 05.02.2013
comment
Нет, иди вперед и зарегистрируй их. То, что вы создаете пакет, не означает, что вы должны использовать его на своем сайте. - person MisterJames; 05.02.2013

Поскольку мне не удалось получить объект запроса в событии запуска приложения, я выбрал описанный ниже подход для выполнения своей задачи. Все, что я хотел знать, это мой хост в событии запуска приложения.

  1. Создать преобразование Web.Config
  2. Добавьте ключ приложения в каждую среду, например <add key="cdnReference" value="http://localhost:xxxx/" />.
  3. прочитайте ключ в событии запуска вашего приложения как cdnHost = ConfigurationManager.AppSettings["cdnReference"];
person HaBo    schedule 11.02.2013