我有一个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?
答案 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=".*|.*/.*$" />