Перезапись URL для AngularJS не работает в ASP.NET

0

Я просто создал приложение asp.net и просмотрел разные страницы, такие как страница курсов.

Я запускаю все на: localhost: 50717 на IIS.

У меня есть страница route.html с тегом ng-view. Первоначально, если бы я хотел перейти к просмотру курсов, я бы набрал: localhost: 50717/routes.html #/курсы. Однако я хотел бы переписать URL-адрес так, чтобы я мог просто сделать это: localhost: 50717/courses

Поэтому в моем JS файле я добавил:

$locationProvider.html5Mode(true);

В начале моей html-страницы я добавил:

<base href="/" />

В моем файле web.config я вставляю этот код в тег system.webServer XML:

<rewrite>
  <rules>
    <rule name="RewriteRules" stopProcessing="true">
      <match url=".*"/>
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
        <add input="{REQUEST_URI}" pattern="^/(api)" negate="true"/>
      </conditions>
      <action type="Rewrite" url="/" />
    </rule>

    </rules>
</rewrite>

Когда я перехожу к: localhost: 50717/routes.html и нажимаю ссылку: <a href="courses"> Курсы </a>

Это подталкивает меня к localhost: 50717/курсы просто отлично. Это также отлично работает, когда я удаляю этот код, чтобы включить запись URL.

Это только когда я пытаюсь перезагрузить страницу, на которой я получаю ошибку 404, или когда я пытаюсь перейти на localhost: 50717, что он думает, что я перехожу в базовый каталог вместо страницы route.html.

Я даже установил переписывание URL на моем IIS по адресу: http://www.iis.net/downloads/microsoft/url-rewrite

Я перешел на "Download URL Rewrite Module 2.0" и нажал на ссылку загрузки x64 и загрузил ее правильно и смог увидеть URL-адрес перезаписи для моих сайтов по умолчанию в IIS. Что еще я могу здесь сделать?

Теги:
url-rewriting
angularjs-routing

1 ответ

0

Если "/routes.html" представляет корень вашего сайта, вы должны убедиться, что содержимое этого файла будет возвращено для каждого соответствующего запроса в ваше приложение.

Т.е. когда вы звоните "/Курсы", вы получаете 404, потому что нет контента/маршрута/ресурса, соответствующего этому URL-адресу. То, что вы хотели бы вернуть, - это содержимое "/routes.html", а затем разрешить маршрутизацию AngularJS снова на стороне клиента.

Я бы предложил перечитать AngularJS HTML5-mode; разница между использованием "/#/Курсы" и "Курсы" более значительна, чем может показаться на первый взгляд, рег. как вы должны настроить свои маршруты.

  • 0
    Спасибо за эту информацию. Это было действительно полезно. Вот мой новый файл Web.Config:
  • 0
    <rewrite> <rules> <rule name = "RewriteRules" stopProcessing = "true"> <match url = ". *" /> <condition logicGrouping = "MatchAll"> <add input = "{REQUEST_FILENAME}" matchType = "IsFile "negate =" true "/> <add input =" {REQUEST_FILENAME} "matchType =" IsDirectory "negate =" true "/> <add input =" {REQUEST_URI} "pattern =" ^ / (api) "negate =" true "/> </ условие> <action type =" Rewrite "url =" / route.html "/> </ rule> </ rules> </ rewrite>
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню