Angular 8 внутри ASP Net Ядро было заблокировано из-за недопустимого типа MIME («text / html») - PullRequest
1 голос
/ 25 января 2020

Я пытаюсь настроить свое собственное приложение angular 8, которое будет обслуживаться изнутри веб-сайта ASP. Net Core (поэтому мне не приходится сталкиваться с межсайтовым скриптингом или два (под) домена или проблемы с аутентификацией.

Я создал веб-приложение в VS Code и скомпилировал его в папку wwwroot/app в моем проекте asp net core 3.0 ( Я могу запустить приложение, используя ng serve очень хорошо).

Я добавил это в Startup ConfigureServices()

services.AddSpaStaticFiles(configuration =>
{
 configuration.RootPath = "wwwroot/app";
});

И иметь это в Configure()

app.UseSpa(spa => {});

Это частично работает. Когда я загружаю проект asp. net, приложение angular начинает загружаться. Но консоль заполнена (по одному на каждый файл, указанный в сгенерированном индексе. html):

Загрузка модуля из «https://localhost: 5001 / время выполнения. js» заблокирована из-за запрещенного типа MIME («text / html»).

Загрузка модуля из «https://localhost: 5001 / polyfills. js» была заблокирована из-за запрещенного типа MIME («text / html»).

Загрузка модуля из «https://localhost: 5001 / vendor. js» заблокировано из-за запрещенного типа MIME («text / html»).

Загрузка модуля из «https://localhost: 5001 / styles. js» заблокирована из-за запрещенного типа MIME («text / html»).

Загрузка модуля из «https://localhost: 5001 / main. js» была заблокирована из-за запрещенного типа MIME («text / html»).

Насколько я понимаю, angular -cli не включал mime-типы в файлы, когда они были "скомпилированы" , и, следовательно, веб-браузер не заботился о них.

Люди angular не думают, что это ошибка / ошибка, и закрыли проблему, связанную с этим (хотя это поведение отличается от того, как Angular 7 сделал это): https://github.com/angular/angular-cli/issues/10325

Чтение этого вопроса Как добавить Mime Types в ASP. NET Core Я подумал, что смогу сделать что-то вроде этого:

var provider = new FileExtensionContentTypeProvider();
provider.Mappings[".js"] = "application/javascript";
provider.Mappings[".html"] = "text/html";
provider.Mappings[".ico"] = "image/vnd.microsoft.icon";


var statFilesOptions = new StaticFileOptions
{
    ContentTypeProvider = provider
};

app.UseSpa(spa =>
{
    spa.Options.DefaultPageStaticFileOptions = statFilesOptions;
});

Чтобы добавить MIME / типы файлов. Но это ничего не сделало.

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

1 Ответ

1 голос
/ 26 января 2020

Проблема была совсем не в том, что я ожидал. Основное приложение asp. net фактически возвращало файл index.html для всех запросов, поскольку оно не могло найти файлы javascript. Следовательно, ошибка была на самом деле правильной.

Изменение <base href="/"> в index.html на <base href="/app/"> решило эту проблему частично, поскольку теперь он знал, что нужно искать файлы в папке приложения, в которую я их поместил, но произвел перезагрузку прекратить работу (так как URL был неправильным).

Мое решение состояло в том, чтобы установить выходную папку сборки angular как root из /wwwroot/ в базовом проекте asp net. Теперь все это работает.

...