/ / Pliki statyczne nie zostały znalezione / dostarczone do SPA, gdy pliki znajdują się poza wwwroot - angular, asp.net-core, asp.net-mvc-area

Pliki statyczne nie zostały znalezione / dostarczone do SPA, gdy pliki znajdują się poza stronami wwwroot - kątowe, asp.net-core, asp.net-mvc

Stworzyłem projekt strony internetowej asp.net core 1.0 z wieloma obszarami.

W HomeController w obszarze aplikacji mam następującą akcję:

public IActionResult Index()
{
string content = System.IO.File.ReadAllText("./Areas/Application/App/Index.html");
return base.Content(content, new MediaTypeHeaderValue("text/html"));
}

Gdy plik html jest zwracany, w mojej przeglądarce pojawia się wiele błędów 404 z nie odnalezionych plików biblioteki javascript.

Indeks.html ze wszystkimi plikami .js jest SPA w obszarze strony głównej asp.net.

To SPA jest wbudowane + wdrożone w folderze projektu / obszarów / aplikacji / aplikacji.

Kiedy buduję + wdrażam SPA do wwwroot folder, a następnie wszystkie pliki statyczne są znalezione.

Myślę, że to oznacza, że ​​statyczna ścieżka do pliku jest zawsze względna do wwwroot, aby SPA działało.

Pytanie 1: Czy istnieje jakiś sposób skonfigurowania folderu wwwroot jako ścieżki wwwroot / app z klasą WebHostBuilder poprzez:

 .UseWebRoot("./wwwroot/app")

właśnie i wyraźnie dla obszar zastosowań?

Czy to oznacza, że ​​wwwroot strony powinien nadal działać?

Najlepszą rzeczą, jaką mogłem osiągnąć, jest folder wwwroot z 2 podfolderami:

  • stronie internetowej
  • aplikacja

i chciałbym skonfigurować stronę internetową i aplikację dla 2 ścieżek wwwroot dla domyślnego „obszaru” i jawnego obszaru aplikacji.

Pytanie 2: Jak mogę to zrobić?

AKTUALIZACJA 1

Zgodnie z komentarzem Pawła zmieniłem:

   app.UseStaticFiles();

do:

app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "Areas","Application", "App")),
RequestPath = new PathString("/Application")
});

Ale nadal otrzymuję te same błędy 404 dla pliku .js, jakby nie były dostępne w katalogu wwwroot ???

404 W narzędziach konsoli programisty żądanych przez aplikację jednostronicową:

http://localhost:52159/vendor/reflect-metadata/Reflect.js (404)

200 Wprowadzane ręcznie w pasku adresu przeglądarki:

http://localhost:52159/Application/vendor/reflect-metadata/Reflect.js

Czy to oznacza, że ​​statyczny plik obsługujący rdzeń asp.net działa, ale jest coś jeszcze, co nie działa jakoś? Chyba nie powinienem zmieniać w SPA czegoś, co byłoby głupie ...

Dodałem zrzut ekranu mojej struktury pliku, abyście lepiej zrozumieli mój problem, a może znaleźli mój błąd użytkownika ...:

wprowadź opis obrazu tutaj

Odpowiedzi:

0 dla odpowiedzi № 1

Teraz znalazłem rozwiązanie, w którym trzeba zastosować zmiany.

system.config.ts

System.config({
map: {
"@angular": "Application/vendor/@angular",
"rxjs": "Application/vendor/rxjs",
"main": "Application/main.js",
"app": "Application/app",
},
packages: cliSystemConfigPackages
});

W ten sposób wszystkie pliki kątowe 2 / rxjs są obsługiwane ze ścieżki katalogu:

„Obszar / Aplikacja / Aplikacja” po wprowadzeniu adresu URL „/ Aplikacja”.

Musiałem też dodać „Aplikację” do „aplikacji” głównej i głównej beczki.

index.html

<body>
<app-root>Loading...</app-root>

{{#each scripts.polyfills}}
<script src="Application/{{.}}"></script>
{{/each}}
<script>
System.import("Application/system-config.js").then(function () {
System.import("Application/main.js");
}).catch(console.error.bind(console));
</script>
</body>
</html>

Są to zmiany w pliku index.html.

Teraz moja podstawowa aplikacja Asp.net „Application” ma własny „wwwroot” oddzielony od wwwroot strony publicznej.