- UseStaticFiles обслуживает файлы из wwwroot, но его можно изменить.
- UseSpaStaticFiles выполняет аналогичные действия, но для его регистрации требуется ISpaStaticFileProvider.Если app.ApplicationServices.GetService () возвращает ноль, то вы получите исключение.
throw new InvalidOperationException($"To use {nameof(UseSpaStaticFiles)}, you must " +
$"first register an {nameof(ISpaStaticFileProvider)} in the service provider, typically " +
$"by calling services.{nameof(AddSpaStaticFiles)}.");
Так что вам нужно вызвать app.AddSpaStaticFiles () для регистрации по умолчанию ISpaStaticFileProvider
UseSpa делает две вещи.Перезаписывает все запросы на страницу по умолчанию и пытается настроить обслуживание статических файлов.В отличие от
UseSpaStaticFiles он не выдает исключение, а просто возвращается к папке wwroot.
На самом деле UseSpaStaticFiles и UseSpa внутренне вызывают один и тот же метод UseSpaStaticFilesInternal, но с разными значениями3-й параметр, который allowFallbackOnServingWebRootFiles .Это причина, по которой UseSpaStaticFiles генерирует исключение, если ISpaStaticFileProvider не был зарегистрирован, просто не позволяет вернуться к wwroot.
BTW , если UseSpa возвращается к wwwrootвнутренне он вызывает старый добрый app.UseStaticFiles (staticFileOptions);
Ссылки на источники github: 1. SpaDefaultMiddleware 2. SpaStaticFilesExtensions