MVC .NET Core UseStaticFiles OnPrepareResponse не используется для файлов JavaScript - PullRequest
2 голосов
/ 07 мая 2019

Я пытаюсь настроить GZIP для моих статических файлов (в основном, JavaScript), которые были предварительно сжаты с помощью плагина сжатия Webpack (compress-webpack-plugin).

Я следовал этой статье по обслуживаниюпредварительно сжатые статические файлы с использованием .NET Core - https://dzone.com/articles/serving-pre-compressed-static-files-in-aspnet-core.

В моем методе Startup.Configure есть следующее:

var mimeTypeProvider = new FileExtensionContentTypeProvider();
app.UseStaticFiles(new StaticFileOptions
{
    OnPrepareResponse = context =>
    {
        var headers = context.Context.Response.Headers;
        var contentType = headers["Content-Type"];

        if (contentType != "application/x-gzip" && !context.File.Name.EndsWith(".gz"))
        {
            return;
        }

        var fileNameToTry = context.File.Name.Substring(0, context.File.Name.Length - 3);

        if (mimeTypeProvider.TryGetContentType(fileNameToTry, out var mimeType))
        {
            headers.Add("Content-Encoding", "gzip");
            headers["Content-Type"] = mimeType;
        }
    }
});

Это, похоже, не помоглоМои активы обслуживаются без сжатия.При добавлении точки останова в метод действия OnPrepareResponse она не применяется ни для каких файлов JavaScript.Однако он получил удар по моему фавикону и моему логотипу.

Я также попробовал этот пакет NuGet - https://github.com/AnderssonPeter/CompressedStaticFiles - который также, похоже, не решил мою проблему.

Вот скриншот моей папки wwwroot для справки:

enter image description here

Я пытаюсь обслуживать эти файлы JS в папке / dist, используя следующуюссылки в моем представлении _Layout.cshtml:

<script src="~/dist/vendors~main.bundle.js"></script>
<script src="~/dist/main.bundle.js"></script>

Наконец, вот пример заголовков для поставщиков ~ main.bundles.js (взят из инструментов разработчика Chrome):

enter image description here

Есть идеи, почему это не работает?

ОБНОВЛЕНИЕ 08/05/2019

Похоже, чтоПромежуточное ПО для статических файлов как-то конфликтует с Webpack Dev Middleware.Если я удаляю следующие строки кода из моего метода настройки запуска, он работает, и точка останова в OnPrepareResponse попадает для всех файлов, как и ожидалось:

app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
{
    HotModuleReplacement = true
});

Это ошибка или я просто что-то делаюнеправильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...