using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; namespace Disco.Web.Extensions.MvcExtensions.Bundles { internal sealed class BundleHandler : IHttpHandler { public Bundle RequestBundle { get; private set; } public string BundleVirtualPath { get; private set; } public BundleHandler(Bundle requestBundle, string bundleVirtualPath) { this.RequestBundle = requestBundle; this.BundleVirtualPath = bundleVirtualPath; } public bool IsReusable { get { return false; } } public void ProcessRequest(HttpContext context) { context.Response.Clear(); if (!string.IsNullOrEmpty(context.Request.Headers["If-Modified-Since"])) context.Response.StatusCode = 304; else this.RequestBundle.ProcessRequest(context); } internal static bool RemapHandlerForBundleRequests(HttpApplication app) { var context = app.Context; string bundleUrlFromContext = context.Request.AppRelativeCurrentExecutionFilePath + context.Request.PathInfo; var bundle = BundleTable.GetBundleFor(bundleUrlFromContext); if (bundle != null) { context.RemapHandler(new BundleHandler(bundle, bundleUrlFromContext)); return true; } return false; } } }