IIS, позволяющий маршрутизацию к виртуальному каталогу - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь разместить свое угловое приложение и API в одном веб-приложении на Azure.но у меня возникают некоторые трудности с доступом к моему API.

структура папок выглядит следующим образом:

├───api
│   └───bin
│   └───web.config <== API web.config
├───index.html
├───web.config <== Angular web.config
├───...
└───assets
    ├───flags
    ├───i18n
    ├───icons
    └───images

Поэтому мне нужно указать моему Angular web.config перенаправить все /api вызовык API.все еще возвращая все остальные вызовы к index.html в корневой папке

, но я не могу понять, как это правильно, это мой текущий файл web.config.Но это перенаправляет мои вызовы API в index.html клиента.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.webServer>
    <staticContent>
        <remove fileExtension=".woff" />
        <remove fileExtension=".woff2" />
        <remove fileExtension=".ttf" />
        <mimeMap fileExtension=".woff" mimeType="font/woff" />
        <mimeMap fileExtension=".woff2" mimeType="font/woff2" />
        <mimeMap fileExtension=".ttf" mimeType="font/ttf" />
        <mimeMap fileExtension=".webmanifest" mimeType="application/manifest+json" />
        <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="1.00:00:00" />
    </staticContent>
    <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" />
            <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
          </conditions>
          <action type="Rewrite" url="." />
        </rule>
      </rules>
    </rewrite>
   <!-- gzip compression -->
    <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
      <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" />
      <dynamicTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="font/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/javascript" enabled="true"/>
        <add mimeType="application/json" enabled="true" />
        <add mimeType="*/*" enabled="false" />
      </dynamicTypes>
      <staticTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="font/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/javascript" enabled="true"/>
        <add mimeType="application/atom+xml" enabled="true" />
        <add mimeType="application/xaml+xml" enabled="true" />
        <add mimeType="*/*" enabled="false" />
      </staticTypes>
    </httpCompression>
    <urlCompression doStaticCompression="true" doDynamicCompression="true" />
  </system.webServer>

   <location path="index.html">
      <system.webServer>
          <staticContent>
            <clientCache cacheControlMode="DisableCache" />
          </staticContent>
      </system.webServer>
    </location>

    <system.web>
      <customErrors mode="Off"/>
    </system.web>
</configuration>

Это приводит к следующему контрольному списку

  • загружает угловое приложение => TRUE
  • загружает файлы (favicon, main.js, ngsw-worker.js) => TRUE
  • загружает manifest.webmanifest => TRUE
  • загружает API => FALSE

кто-нибудь получил представление о работе web.config?

ОБНОВЛЕНИЕ : исправлен манифестПроблема .webmanifest, добавив ее в staticcontent

1 Ответ

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

У меня есть та же самая установка, работающая в Службах приложений Azure, и я также столкнулся с проблемами, пытаясь заставить все работать правильно.В конце концов, у меня возникла проблема с моими приложениями SPA. Web.config был унаследован приложениями API.Это вызывало 405 ошибок при попытке вызвать мои приложения API.

Для меня было разрешено настроить мой web.config и отключить наследование.

<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <rewrite>
        <rules>
          <clear />
          <rule name="AngularJS 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="/" />
          </rule>
        </rules>
      </rewrite>
    </system.webServer>
  </location>
</configuration>



...