Перекомпиляция System.Web.Optimization для изменения заголовков кэша

Я хочу перекомпилировать System.Web.Optimization, чтобы изменить заголовки кэша в Bundle.cs (CDN не нравится заголовок Vary), так как, похоже, нет другого способа переопределить заголовки. Я могу декомпилировать исходный код (через Resharper), внести изменения и перекомпилировать исходный код, но когда я добавляю ссылку на мой проект, все зависимые пакеты Nuget выдают ошибку. Похоже на тот, что ниже.

Тип 'System.Web.Optimization.IBundleBuilder' определяется в сборке, на которую нет ссылок. Необходимо добавить ссылку на сборку "System.Web.Optimization, версия =1.1.0.0, Culture= нейтральный, PublicKeyToken=31bf3856ad364e35".

Я бы предпочел не собирать все зависимости. Я также открыт для других способов переопределения заголовков кэша. HTTPModules, IIS и т. Д.

1 ответ

Вместо того, чтобы перекомпилировать пользовательскую версию пакетов, я просто решил направить запросы к пакетам через другой HttpHandler. Быстрая замена в URL позволяет мне легко получить содержимое пакета и записать его с желаемыми заголовками кэша. Не самый желательный метод, но работает.

Отсутствие возможности устанавливать свои собственные заголовки в библиотеке - огромная проблема. Я надеюсь, что они исправят это в ближайшее время.

    public void ProcessRequest(HttpContext context)
    {
        var request = context.Request;
        var response = context.Response;
        var cache = response.Cache;

        var path = request.Url.LocalPath;
        var bundlesPath = "~/" + path.Substring(path.IndexOf("mypath"));
        bundlesPath = bundlesPath.Replace("mypath", "bundle");


        Bundle bundle = BundleTable.Bundles.GetBundleFor(bundlesPath);
        var bundleContext = new BundleContext(new HttpContextWrapper(HttpContext.Current), BundleTable.Bundles, bundlesPath);
        var bundleResponse = bundle.GenerateBundleResponse(bundleContext);

        cache.SetCacheability(HttpCacheability.Public);
        cache.SetExpires(DateTime.UtcNow.AddYears(1));
        cache.SetMaxAge(new TimeSpan(365, 0, 0, 0));
        cache.SetValidUntilExpires(true);

        // This handler is called whenever a file ending 
        // in .sample is requested. A file with that extension
        // does not need to exist.
        response.ContentType = bundleResponse.ContentType;
        response.Write(bundleResponse.Content);
    }
Другие вопросы по тегам