Маршрутизация IIS - угловой - Asp.Net Core - PullRequest
0 голосов
/ 11 февраля 2019

Я отправляю это сообщение, потому что не нашел подходящего ответа.Я занимаюсь разработкой веб-сайта с использованием Angular 6, Asp.net Core 2.2 и IIS 10. Моя проблема связана с маршрутизацией при непосредственном указании адреса в области ввода URL-адреса браузера.Используя сайт, внутри навигации все работает нормально.План моего сайта:

/ 
--> /upload
--> /admin
----> /admin/admincreateuser
----> /admin/manageuserlicencepanel

Вот мои настройки:

Угловая 6

export const appRoutes: Routes = [
  {
    path: 'upload',
    runGuardsAndResolvers: 'always',
    canActivate: [AuthGuard],
    children: [
        {path: '', component: UploadComponent, data: {roles: ['Customer']} },
    ]
  },
  {
    path: 'admin',
    runGuardsAndResolvers: 'always',
    canActivate: [AuthGuard],
    children: [
        {path: '', component: AdminComponent, data: {roles: ['Admin', 'Moderator']}},
        {path: 'admincreateuser', component: AdminCreateUserComponent, data: {roles: ['Admin', 'Moderator']}},
        {path: 'manageuserlicencepanel', component: ManageUserLicencePanelComponent, data: {roles: ['Admin', 'Moderator']}}}}
    ]
  },
  {path: '', component: HomeComponent},
  {path: '**', redirectTo: '', pathMatch: 'full'}
];

ASP.Net Core 2.2

Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseMvc(routes =>
    {              
        routes.MapSpaFallbackRoute(
                    name: "spa-fallback",
                    defaults: new { controller="FallbackController", action = "Index"}
        );
    }
}

FallbackController.cs

public class FallbackController : Controller
{
    public IActionResult Index()
    {
        return PhysicalFile(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "index.html"), "text/HTML");
    }
}

Эта конфигурация работает правильнодаже на развертывание IIS.Но невозможно ввести непосредственно URL-адрес (то есть https://www.dzfzx.com/upload) в адресной строке, потому что я получаю ошибку 404.Чтобы решить эту проблему, я попытался добавить URL Rewrite в IIS следующим образом:

   <system.webServer>
        <rewrite>
            <rewriteMaps>
              <rewriteMap name="^(.*)$" />
            </rewriteMaps>
            <rules>
                <rule name="All routes" stopProcessing="true">
                    <match url="^(.*)$" />
                    <action type="Rewrite" url="/" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_URI}" pattern="/api(.*)$" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_URI}" pattern="^api/" negate="true" /> 
                    </conditions>
                </rule>
            </rules>
        </rewrite>
    </system.webServer>

. При реализации этого я получаю непосредственно на домашней странице ошибку:

Uncaught SyntaxError: Неожиданный токен<</em>

Обратите также внимание на то, что мне кажется, что в моем FallbackController никогда не происходит сбой, который кажется ненормальным.

У вас есть представление о том, как я могу заставить его работать (Directввод адресной строки)?

Спасибо.

1 Ответ

0 голосов
/ 11 февраля 2019

Кажется, ваша конфигурация плохая.Вы должны направить все запросы в index.html, который является индексным файлом angular.

Попробуйте эту конфигурацию:

<?xml version="1.0" encoding="utf-8"?>
<configuration>

<system.webServer>
  <rewrite>
    <rules>
      <rule name="Angular Routes" stopProcessing="true">
        <match url=".*" />
        <conditions logicalGrouping="MatchAll">
          <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
          <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        </conditions>
        <action type="Rewrite" url="./index.html" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>

</configuration>

Разверните приложение Angular на IIS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...