asp.net – 如何告诉IIS在我的.NET应用程序中使用底层的catch-all路由从Web根目录提供静态文件?

我有一个使用.NET 5 beta-4构建并在IIS 8.5上运行的Web应用程序.

我希望IIS提供所有静态文件,因此我删除了.NET 5静态文件中间件.这通常按预期工作.例如,/ img / image.png将通过IIS正确提供.

但是,在我的.NET应用程序中,我有一个满足业务需求目的的全能路由(“/ {param?}”).但是我的webroot文件夹中还有一些需要提供的静态文件(robots.txt,favicon.ico等).

我遇到的问题:
IIS将Web根静态文件请求路由到.NET应用程序,然后运行catch-all路由,这将导致404.理想情况下,我希望IIS在Web根目录中提供静态文件(如果找到)一.如果找不到,请将请求发送到.NET catch-all路由.

如何告诉IIS 8.5在我的.NET 5应用程序中使用底层的catch-all路由从web root提供静态文件?

最佳答案 虽然我同意使用中间件的想法,但如果你绝对想要依靠你的网络服务器来提供静态文件而不接触你的应用程序,你可以设置一个依赖于文件的重写:

<rule name="Static Files" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAny">
        <add input="{APPL_PHYSICAL_PATH}wwwroot\{R:1}" matchType="IsFile" />
    </conditions>
    <action type="Rewrite" url="/{R:1}" />
</rule>

这应该检查您的请求是否是文件系统上的文件,以及它是否直接重写您的请求并停止处理请求.

点赞