Как разместить приложение Angular с помощью Kestrel
Я пытаюсь развернуть Angular 7
приложение с .NET Core
с помощью Kestrel
с использованием FileProvider
расширение.
Я создал угловое приложение, у меня есть ng build
это и я скопировал файлы внутри dist
.NET
Porject.
Запускать
public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
string jsFolderName = "myroot";
string prodRoot =Path.Combine(AppDomain.CurrentDomain.BaseDirectory,jsFolderName);
string debugRoot =Path.Combine(Directory.GetCurrentDirectory(),jsFolderName);
var isDev=env.IsDevelopment();
DefaultFilesOptions options = new DefaultFilesOptions();
options.DefaultFileNames.Clear();
options.DefaultFileNames.Add("/myroot/index.html");
app.UseDefaultFiles(options);
app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions() {
FileProvider = new PhysicalFileProvider(isDev?debugRoot:prodRoot),
RequestPath = "/app"
});
if (env.IsDevelopment()) {
app.UseDeveloperExceptionPage();
} else {
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseMvc();
}
PS мой myroot
папка находится прямо в корне проекта. Я не знаю, как кормить первую страницу (точку входа) из angular
приложение, которое index.html
,
1 ответ
Как предполагает @ Simonare в комментарии, лучший способ - использовать официальный шаблон Angular.
Но если вы хотите обслуживать только статические файлы, вы можете сделать следующее:
- Настройте
DefaultFilesOptions
сFileProvider
а такжеRequestPath
,
var fileProvider = new PhysicalFileProvider(isDev?debugRoot:prodRoot); DefaultFilesOptions options = new DefaultFilesOptions(){ RequestPath = "/app", // для обработки запроса к `/app` FileProvider = fileProvider, // для проверки файлов в `myroot / ** / **` DefaultFileNames = new List {"index.html"}, };options.DefaultFileNames.Clear ();options.DefaultFileNames.Add ("/ myroot / index.html");app.UseDefaultFiles (варианты); // обслуживаем статические файлы app.UseStaticFiles(); app.UseStaticFiles(new StaticFileOptions() { RequestPath = "/app", FileProvider = fileProvider, });
Потому что путь приложения
https://yourhost:port/app
Вам также необходимо изменить базовый путь вindex.html
, так что браузер загрузит все ресурсы (например, файлы js, css, img) относительно текущего пути. Оригинальная база/src/index.html
является/
:<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>App</title> <base href="/"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" type="image/x-icon" href="favicon.ico"> </head> <body> <app-root>Loading...</app-root> </body> </html>
Обратите внимание, нам нужно:
- изменить
<base href="/">
в<base href="/app">
- или измените базу на пустую строку:
<base href="">
- или удалите эту строку