19

मुझे जावास्क्रिप्ट & सीएसएस मुद्दों को डिबग करने के उद्देश्य से एक अनुरोध के लिए अस्थायी रूप से बंडलिंग और खनन को अक्षम करने में सक्षम होना चाहिए। मैं तो जैसे 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; 
    } 
} 
  • वहाँ तथ्य यह है कि मैं हर वेब अनुरोध पर इस स्थिर संपत्ति की स्थापना कर रहा हूँ के साथ किसी भी संभावित मुद्दों कर रहे हैं? (वेब ऐप वेब फार्म पर चलाएगा)
  • क्या इसे संभालने के बेहतर तरीके हैं?
+2

मुझे कोई गलती नहीं दिखाई दे रही है, हालांकि मैं एक एक्शनफिल्टर और पॉज़ का उपयोग करने की सलाह दूंगा एक कुकी/सत्र चर में कैश चालू/बंद को संग्रहीत करना (जब तक 'DisableOptimizations = false' को याद करके बदला जाता है)। –

+0

@BradChristie मुझे इसे सत्र में संग्रहीत करने का विचार पसंद है! – jessegavin

उत्तर

9

विस्तार मैं एक टिप्पणी में क्या उल्लेख किया है:

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

यह गंभीरता से भयानक है। अनेक अनेक धन्यवाद। – jessegavin

+0

मैं आपकी टिप्पणी के आधार पर अपना खुद का कार्यान्वयन लिखना समाप्त कर चुका था, लेकिन मुझे तुम्हारा और अधिक पसंद है! – jessegavin

+0

कमाल - धन्यवाद, यह बहुत अच्छा है –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^