Я использую библиотека three.js с участием GLTFLoader.js. Я скачал бесплатную 3D модель с .gltf расширение (там же был .bin файл и папка с текстурами).
Я могу получить доступ к любому другому файлу в этой папке из IIS (10) как к статическому содержимому, за исключением файла .gltf, который возвращает страницу 404.
На этом этапе я добавил отображение MIME в IIS повсюду (web.config для сайта ASP.NET Core 2.2, верхний уровень IIS, уровень сайта IIS). Это модель / gltf + json. На всякий случай попробовал application / json и application / octet-stream. Он возвращает 404 во всех ситуациях.
Я попытался разрешить серверу обслуживать все статические файлы с помощью сопоставления MIME с подстановочными знаками. Даже это не удается.
Если я переименую файл .gltf в .json, он будет работать нормально.
Я попробовал FailedRequestTracing, который предоставил мне огромный файл xml. Пройдя через это, я ничего не понял, но, возможно, я просто недостаточно знаю о внутренней работе IIS.
Такая же проблема с IISExpress (запущена из Visual Studio 2019).
Я попытался преобразовать .gltf в .glb, используя https://glb-packer.glitch.me/ но расширение .glb демонстрирует ту же проблему с IIS -> 404.
Перезапуск IIS с помощью iisreset /restart
не помогло.
Я не использую правила перезаписи URL.
Добавление опции ServeUnknownFileTypes = true
для промежуточного программного обеспечения StaticFiles не имело никакого значения.
Вы сталкивались с подобной проблемой раньше? Есть предложения, что попробовать дальше?
ОБНОВЛЕНИЕ: мне удалось сузить проблему до обработчика AspNetCoreModuleV2. Если отсутствует, файл .gltf обслуживается правильно. Теперь мне действительно нужен этот модуль для запуска, так что это проблема.
ОБНОВЛЕНИЕ: наконец-то разобрался ... Я отправлю ответ следующей несчастной душе, которая наткнется на это.
Оказалось, что я использую собственный FileServerProvider, потому что мне нужен контейнер IoC, чтобы позже внедрить его в некоторые контроллеры. (Аналогичное исправление работает с UseStaticFiles () в методе Configure, если .gltf находится в wwwroot.)
В ConfigureServices:
var fileProviderOptions = new FileServerOptions
{
FileProvider = new PhysicalFileProvider(_ContentStorePath),
RequestPath = new PathString("/ContentStore")
};
fileProviderOptions.StaticFileOptions.ContentTypeProvider = new FileExtensionContentTypeProvider();
((FileExtensionContentTypeProvider)fileProviderOptions
.StaticFileOptions.ContentTypeProvider).Mappings[".gltf"] = "model/gltf+json";
services.AddSingleton<IFileServerProvider>(new FileServerProvider(
new List<FileServerOptions> { fileProviderOptions }
));
Итак, мне пришлось рассказать, что такое gltf в коде. StaticFileOptions доступен только для чтения, а ContentTypeProvider - это интерфейс, так что через несколько обручей нужно прыгнуть.
Оглядываясь назад, возможно, этот вопрос все-таки лучше подошел для StackOverflow.
В файле Startup.cs обновите функцию Configure, включив в нее следующий код
var options = new StaticFileOptions {
ContentTypeProvider = new FileExtensionContentTypeProvider()
};
((FileExtensionContentTypeProvider)options.ContentTypeProvider).Mappings.Add(
new KeyValuePair<string, string>(".obj", "text/plain"));
app.UseStaticFiles(options);