ASP.NET 5 и угловая маршрутизация не работают на dnx rc1

Привет у меня есть проект, встроенный в ASP.NET 5 (dnxcore50 и dnx451). Он обслуживает запросы для моих скриптов AngularJS. Когда я создавал проект, я использовал зависимости бета-версии Microsoft и использовал правило перезаписи для отправки всех запросов в index.html, поэтому моя угловая маршрутизация работала бы отлично. Но сегодня мне пришлось обновиться до зависимостей rc1, и теперь моя перезапись не работает, и я просто получаю 404 на своем маршруте. Эти новые библиотеки добавили эти странные строки кода в мой web.config

  <handlers>
  <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
</handlers>
<httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" forwardWindowsAuthToken="false" startupTimeLimit="3600" />

Есть ли способ, как я могу настроить свою маршрутизацию так, чтобы она работала с angular, например, если я захожу в localhost/shop, он перенаправляет его в index.html и моя угловая маршрутизация вступает во владение.

3 ответа

Решение

Я нахожусь на аналогичной настройке, и я в Configure в Startup.cs,

    app.UseDefaultFiles();

    app.UseStaticFiles();

    app.UseIISPlatformHandler();

и правило перезаписи в system.webServer в web.config, необходимое для того, чтобы иметь возможность обслуживать как веб-API, так и угловое приложение index.html:

    <rewrite>
      <rules>
        <!--Redirect selected traffic to index -->
        <rule name="Index Rule" stopProcessing="true">
          <match url=".*" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_URI}" matchType="Pattern" pattern="^/api/" negate="true" />
          </conditions>
          <action type="Rewrite" url="/index.html" />
        </rule>
      </rules>
    </rewrite>

Вам может понадобиться что-то подобное тоже с вашими правилами

Если вы хотите использовать ASP.NET 5/ASP.NET Core с IIS, вам необходимо установить HttpPlatformHandler. Вот хорошая пошаговая инструкция, показывающая, как установить Http Platform Handler, настроить IIS и опубликовать приложение APS.NET Core в IIS.

Я думаю, что есть лучший способ, чем использовать переписывание URL в настройках маршрутизации (чтобы вообще не нужно переписывать URL). Например, я сделал это:

    app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "api",
                template: "api/{controller}/{action}");

            routes.MapRoute(
                name: "angular",
                template: "{*url}",
                defaults: new {controller = "Home", action = "Index"},
                constraints: new {url = new DoesNotContainConstraint(".", "api/") });                
        });

Это гарантирует, что все / api отправляются в контроллеры, а все остальное - в индекс. Я должен был сделать свой собственный DidNotContainConstraint, чтобы убедиться, что файлы и API с неправильным URL-адресом обрабатываются правильно, но это довольно просто.

Другие вопросы по тегам