如何在运行时临时禁用绑定和最小化

本文关键字:绑定 最小化 运行时 | 更新日期: 2023-09-27 17:51:19

为了调试JavaScript,我需要能够暂时禁用单个请求的绑定和最小化;CSS问题。我想在运行时通过向QueryString添加一个参数来做到这一点,就像这样…

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;
  }
}
  • 是否有任何潜在的问题,我在每个web请求上设置这个静态属性?(web应用程序将在web farm上运行)
  • 有更好的方法来处理这个问题吗?

如何在运行时临时禁用绑定和最小化

扩展我在评论中提到的内容:

[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();
}