2014-12-11 2 views
3

У меня есть приложение SPA + WebAPI, они оба находятся в одном проекте. Я хочу, чтобы приложение WebAPI обрабатывало запросы из каталога «api». Так что все, что под api будет обрабатываться сервером, все остальное будет обработано Angular SPA.Правила перезаписи IIS Url для Angular SPA + WebApi

я в настоящее время

<rewrite> 
     <rules> 
     <rule name="AngularJS" 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> 

Это хорошо работает, за исключением того, когда я иду в URL

http://localhost/customers/2 (который загружает документ, но все ресурсы приходят с неправильным типом пантомимы я завершил, потому что правил переадресации выше)

URL-адрес http://localhost/customers работает отлично будет перенаправлен мой SPA приложение

Как сделать Я хочу, чтобы все было перенаправлено на мой SPA, за исключением запросов, которые попадают в каталог API?

+0

Вы выяснили способ решить эту проблему? Бег в точно такое же затруднительное положение – SandBox

ответ

0

Update эта линия

<match url=".*" /> 

Для этого

<match url=".*|.*/.*$" /> 
+0

И это не работает. Маршруты API по-прежнему работают, но маршрутизация SPA просто не получает trigerred – SandBox

5

я делаю это с двумя правилами. Один для «белого списка» серверных контроллеров я хочу перейти на asp.net, который включает/api, а также файлы аутентификации в разделе/​​Account и/Manage. Следующий отправляет все остальное на угловое, если только это не файл или папка, как то, что у вас уже есть.

<rule name="API Rule" stopProcessing="true"> 
     <match url="^(api|account|manage)(.*)$" /> 
     <action type="None" /> 
    </rule> 
    <rule name="Angular Rule" 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="/" /> 
    </rule> 

Попробуйте это так, но не стесняйтесь, чтобы удалить «| счет | управлять», если вы не хотите, чтобы эти запросы, идущие к серверу.

Чтобы увидеть весь наш набор правил, зарегистрируйтесь this question Я опубликовал, где я обрабатываю HTTPS и канонические имена хостов.

+0

Это работает отлично! Спасибо, что опубликовали ваше решение! – Jon

Смежные вопросы