Angular SPA + WebApi的IIS URL重写规则

时间:2014-12-11 02:09:52

标签: iis-7 rewrite

我有一个SPA + WebAPI应用程序,它们都在同一个项目中。我只希望WebAPI应用程序处理来自目录" api"的请求。所以api下的任何东西都将由服务器处理,其他一切都将由Angular SPA处理。

我目前有

   <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>

除非我转到网址

,否则此功能正常

http://localhost/customers/2(加载文档,但所有资源都是以错误的mime类型进入的,因为上面的重定向规则,我已经得出结论)

网址http://localhost/customers正常工作将由我的SPA应用

路由

除了API目录下的请求外,如何将所有内容重定向到我的SPA?

2 个答案:

答案 0 :(得分:9)

我用两条规则来做这件事。一个“白名单”我要去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>

以这种方式尝试,但如果您不希望这些请求进入服务器,请随时删除“| account | manage”。

要查看我的整个规则集,请查看我发布的this question,我也处理了HTTPS和规范主机名。

答案 1 :(得分:0)

更新此行

<match url=".*" />

到此

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