Как временно отключить связывание и минификацию во время выполнения?
Мне нужно иметь возможность временно отключить связывание и минификацию для одного запроса с целью отладки JavaScript и CSS-проблем. Я хотел бы сделать это во время выполнения, добавив параметр в строку запроса, как это делается..
http://domain.com/page?DisableOptimizations=true
Вот подход, который я рассматриваю.
protected void Application_BeginRequest(object sender, EventArgs e)
{
// Enable for every request
BundleTable.EnableOptimizations = true;
// Disable for requests that explicitly request it
bool disable;
bool.TryParse(Context.Request.QueryString["DisableOptimizations"], out disable);
if (disable)
{
BundleTable.EnableOptimizations = false;
}
}
- есть ли какие-либо потенциальные проблемы с тем, что я устанавливаю это статическое свойство в каждом веб-запросе? (Веб-приложение будет работать на веб-ферме)
- есть ли лучшие способы, чтобы справиться с этим?
1 ответ:
Расширение того, что я упомянул в комментарии:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] public class OptimizationsDebuggingAttribute : ActionFilterAttribute { private const String PARAM_NAME = "DisableOptimizations"; private const String COOKIE_NAME = "MySite.DisableOptimizations"; public override void OnActionExecuting(ActionExecutingContext filterContext) { Boolean parsedPref; Boolean optimizationsDisabled = false; if (filterContext.HttpContext.Request.QueryString[PARAM_NAME] != null) { // incoming change request var pref = filterContext.HttpContext.Request.QueryString[PARAM_NAME].ToString(); if (Boolean.TryParse(pref, out parsedPref)) { optimizationsDisabled = parsedPref; } } else { // use existing settings var cookie = filterContext.HttpContext.Request.Cookies[COOKIE_NAME]; if (cookie != null && Boolean.TryParse(cookie.Value, out parsedPref)) { optimizationsDisabled = parsedPref; } } // make the change System.Web.Optimization.BundleTable.EnableOptimizations = !optimizationsDisabled; // save for future requests HttpCookie savedPref = new HttpCookie(COOKIE_NAME, optimizationsDisabled.ToString()) { Expires = DateTime.Now.AddDays(1) }; filterContext.HttpContext.Response.SetCookie(savedPref); base.OnActionExecuting(filterContext); } }
Тогда, конечно, реализация выглядит примерно так:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new OptimizationsDebuggingAttribute()); }
Или, если вы предпочитаете практический подход:
[OptimizationsDebugging] public ActionResult TroublesomeAction() { return View(); }