如何告诉IIS使用.NET应用程序中的基础全部路由来从Web根提供静态文件?

Ste*_*ins 5 asp.net iis asp.net-core

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

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

但是,在我的.NET应用程序中,我有一条"/{param?}"可满足业务需求目的的综合路由()。但我也有一些静态文件在我的根目录文件夹需要送达(robots.txtfavicon.ico,等)。

我遇到的问题是:IIS将Web根静态文件请求路由到.NET应用程序,然后将运行包罗万象的路由,这又将导致404。理想情况下,我希望IIS在找到根目录的情况下在Web根目录中提供该静态文件。如果找不到,则将请求发送到.NET通用路由。

如何告诉IIS 8.5在.NET 5应用程序中使用基本的全部路由从Web根提供静态文件?

Bra*_*nez 2

虽然我同意使用中间件的想法,但如果您绝对希望依赖网络服务器来提供静态文件而不接触您的应用程序,您可以设置依赖于文件的重写:

<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>
Run Code Online (Sandbox Code Playgroud)

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