Вопрос
Как обслуживать различные HTML (входные) файлы для приложения SPA (Vue) в ASP. NET Core?
Объяснение
В зависимости от условия, я хотел бы обслуживать другую страницу HTML (так же, как контроллер сделал бы для не-SPA). Страница все равно будет содержать точку входа для Vue apps <div id="app">
, но некоторые другие изменения должны быть сделаны перед обработкой HTML.
. Я знаю, что мне как-то нужно изменить файл startup.cs, потому что который отображает HTML с app.UseStaticFiles()
и app.UseSPAStaticFiles()
Пример
Условие 1 выполнено, base.html
подается с client -> public -> base.html
Вместо этого выполняется условие 2 , special.html
подается с client -> public -> special.html
Код
Основа c HTML выглядит примерно так:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title>Title</title>
</head>
<body>
<noscript>
<strong>We're sorry but this webpage doesn't work properly without JavaScript enabled. Please enable it to
continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
Важные части файла startup.cs выглядят так:
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/dist";
});
// ....
app.UseStaticFiles();
app.UseSpaStaticFiles();
// ....
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller}/{action=Index}/{id?}");
if (env.IsDevelopment())
{
endpoints.MapToVueCliProxy(
"{*path}",
new SpaOptions { SourcePath = "ClientApp" },
npmScript: "serve",
regex: "Compiled successfully");
}
// Add MapRazorPages if the app uses Razor Pages. Since Endpoint Routing includes support for many frameworks, adding Razor Pages is now opt -in.
endpoints.MapRazorPages();
});
// ....
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
});