Включите «Режим отладки» в приложении ASP.NET MVC с помощью директив C # - PullRequest
8 голосов
/ 27 января 2010

Мои действия в контроллере ASP.NET MVC имеют множество таких свойств, как это

    [OutputCache(Duration = 86400, Location = OutputCacheLocation.Client,
        VaryByParam = "jsPath;ServerHost")]
    [CompressFilter]
    public JavaScriptResult GetPendingJavaScript(string jsPath, string serverHost)

То, что я хотел бы сделать, это обернуть это во что-то вроде #if и #endif и установить настройку DebugMode в моем файле web.config. Если для этого параметра установлено значение true, свойства декорации следует игнорировать - я хочу включить режим отладки, и в режиме отладки сжатие и кэширование не должны выполняться.

По сути, это было бы похоже на комментирование этих декоративных свойств (что я сейчас делаю и сыт по горло):

    //[OutputCache(Duration = 86400, Location = OutputCacheLocation.Client,
    //    VaryByParam = "jsPath;ServerHost")]
    //[CompressFilter]

Очевидно, что #if и #endif работают с определенными (#define) символами C #, я не смог найти ни одного примера, где это работало бы с другими типами условий (такими как значения web.config и т. Д.).

Помощь оценена

Ответы [ 3 ]

2 голосов
/ 27 января 2010

Вместо этого я бы использовал Проекты веб-развертывания и атрибут configSource в web.config.

Я бы разделил файл web.config на два файла для каждого компонента. Например, для вашего выходного кэша будет разбито на outputcache.dev.config и outputcache.live.config. Вы должны ввести источник конфигурации как файл конфигурации dev.

Ваш dev.config в основном сообщит вашему приложению, что вы не хотите выполнять кеширование (enableOutputCache="false").

Затем, когда вы запустите свой проект развертывания, у вас могут быть настройки для замены строк dev.config на live.config.

Дополнительные обсуждения проектов configSource и Web Deployment .

Что касается вашей проблемы с CompressFilter ... Ну, я бы просто указал значение настройки приложения в ваших файлах конфигурации. После разделения файлов конфигурации у вас будет appsettings.dev.config и appsettings.live.config. В вашем dev у вас будет что-то вроде:

<add key="InLiveMode" value="false" />

И в вашем live.config, да, вы уже догадались:

<add key="InLiveMode" value="true" />

Тогда, когда вы используете атрибут, вы можете просто изменить настройку приложения InLiveMode.

К вашему сведению: я предпочитаю иметь некоторый класс фасад , поэтому я не имею дело с магическими строками в коде, но для простоты у вас будет что-то вроде:

//CompressFilter class
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
  bool inLiveMode = bool.Parse(ConfigurationManager.AppSettings["InLiveMode"]);

  if(inLiveMode)
  {
    //Do the compression shiznit
  }
}
0 голосов
/ 24 июля 2012

В этой статье показано, как изменить или расширить фильтры MVC (AOP), чтобы они соответствовали описанным вами ситуациям. Принимая во внимание, что файлы конфигурации могут быть изменены для развертывания, при работе в режиме отладки проблема все еще возникает.

http://www.avantprime.com/blog/21/how-to-handle-output-caching-in-the-development-environment-for-asp-net-mvc-applications

0 голосов
/ 27 января 2010

Извините, в .NET нет ничего, что могло бы заставить различные части вашего кода компилироваться на основе того, что находится в файле конфигурации во время выполнения.

...