Как я могу установить тип MIME для файла без расширения файла в. NET Core? - PullRequest
0 голосов
/ 03 февраля 2020

Мне дали несколько файлов для работы с модулем WebAssembly, который должен быть настроен для загрузки как application / octet-stream.

Я нашел документацию по настройке типов MIME в Startup.cs и получил, что работает для самого модуля WebAssembly.

К сожалению, есть три других файла, которые должны быть загружены как application / octet-stream, которые не имеют расширения файла, например file1-shard1. Я попытался обратиться к ним напрямую и с помощью wilcards, но они все еще отображаются как Type = html на вкладке Network в Firefox.

Кто-нибудь знает, как я могу правильно установить тип MIME для этих файлов, пожалуйста ?

            // Set up FileExtension Content Provider for Web Assembly
            var provider = new FileExtensionContentTypeProvider();
            provider.Mappings[".wasm"] = "application/wasm";
            // Set up MIME type for shard files
            provider.Mappings["file1-shard1"] = "application/octet-stream";
            provider.Mappings["*shard1*"] = "application/octet-stream";
            provider.Mappings[".*"] = "application/octet-stream";
            provider.Mappings["."] = "application/octet-stream";

            app.UseStaticFiles(new StaticFileOptions
            {
                ContentTypeProvider = provider
            });

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Спасибо Яакову за лидерство в этом. Как и DefaultContentType, вы также должны указать службе приложений ServeUnknownFileTypes в папке, содержащей эти файлы.

В приведенном ниже коде app.UseStaticFiles(); указан существующий код, обеспечивающий работу папок wwwroot. Этот код должен быть добавлен в Startup.cs

Затем я настроил сопоставление для файлов WebAssembly. Затем это используется для новой итерации app.UseStaticFiles () для этой указанной c папки, которая включает тип содержимого по умолчанию и ServeUnknownFileTypes.

Это не идеально, поскольку существует некоторый риск безопасности, связанный с ServeUnknownFileTypes, но в этот экземпляр ограничен одной папкой.

// Default options for wwwroot
app.UseStaticFiles();

// Set up FileExtension Content Provider for Web Assembly
var provider = new FileExtensionContentTypeProvider();
provider.Mappings[".wasm"] = "application/wasm";

app.UseStaticFiles(new StaticFileOptions
{
    ContentTypeProvider = provider,
    ServeUnknownFileTypes = true,
    DefaultContentType = "application/octet-stream",
    FileProvider = new PhysicalFileProvider(
        Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/WebAssemFiles")),
    RequestPath = "/WebAssemFiles"
});
1 голос
/ 03 февраля 2020

Вы не можете сделать это, используя FileExtensionContentTypeProvider, так как он внутренне завершается ошибкой, если файл не имеет расширения.

Вам потребуется либо реализовать пользовательский IContentTypeProvider, либо установить StaticFileOptions.DefaultContentType.

...