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-адресом обрабатываются правильно, но это довольно просто.