У меня есть веб-приложение ASP.net Core 2.1 Web API + Angular 6, созданное с использованием шаблона проекта Visual Studio 2017 Angular. И API, и приложение Angular находятся в одном веб-проекте. В разработке он работает внутри IIS Express, а в работе он использует IIS.
Само приложение работает нормально, но мне трудно развернуть его в подпапке существующего веб-сайта, настроенного как новое веб-приложение в IIS.
Когда я вызываю URL как:
Angular умеет правильно строить относительные пути, и приложение прекрасно загружается.
Когда я захожу на URL как (обратите внимание на отсутствующую косую черту):
IIS обслуживает веб-страницу index.html
(почему? Я бы ожидал 404!), Но тогда Angular не сможет правильно рассчитать относительные пути к ресурсам JS / CSS.
Я попытался с помощью модуля Microsoft.AspNetCore.Rewrite
перенаправить путь ^$
на /index.html
, и он работает, но он также перезаписывает исходно рабочие запросы, давая уродливую вспышку в адресной строке:
http://localhost:52000/AngularWebApp/
=>
http://localhost:52000/AngularWebApp/index.html
=>
http://localhost:52000/AngularWebApp/#/dashboard
Я пытался перенаправить на #/
, но Chrome останавливает запросы с помощью ERR_TOO_MANY_REDIRECTS.
Есть ли решение этой проблемы? Обратите внимание, что мне нужно общее решение, которое позволит мне публиковать веб-приложение либо в подпапке, либо в своем собственном домене без перестройки приложения.
Соответствующие фрагменты:
Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {
...
app.UseRewriter(new RewriteOptions()
.AddRedirect(@"^$", "/index.html", (int)HttpStatusCode.MovedPermanently));
app.UseStaticFiles();
app.UseSpaStaticFiles();
app.UseMvc(...);
app.UseSpa(...);
...
}
* * Index.html тысяча сорок-девять
<base href="./">
Заранее спасибо за помощь