4

我目前正在使用 IIS 的ApplicationInitialization功能来预热我的 ASP.NET 应用程序。我已将属性remapManagedRequestsTo设置为"warmup.html"

<applicationInitialization remapManagedRequestsTo="warmup.html" skipManagedModules="true" doAppInitAfterRestart="true" >
  <add initializationPage="/home" />  
  <add initializationPage="/about-us" />      
</applicationInitialization>

它运行良好,但我想在将 Warmup.html 的内容返回到浏览器时返回自定义状态代码。这样当我在部署后运行一些冒烟测试时,我就会知道热身何时完成。

我尝试使用URL Rewrite将状态代码从 200 更改为 555 以提供warmup.html并且它确实更改了状态代码但不提供warmup.html中的内容

<rewrite>
  <rules>
    <rule name="Change warm up status code" stopProcessing="true">
      <match url="warmup.html" />          
      <action type="CustomResponse" statusCode="555" subStatusCode="0"/>        
  </rule>
</rules>
</rewrite>

有没有一种方法可以同时提供warmup.html的内容返回自定义状态代码555

4

1 回答 1

6

终于在Morten Bock写的一篇博文中找到了我的答案

原来我必须删除两个属性remapManagedRequestsToskipManagedModules(默认值为 false),这给我们留下了

<applicationInitialization doAppInitAfterRestart="true">
  <add initializationPage="/home" />  
  <add initializationPage="/about-us" />      
</applicationInitialization>

然后让 URL 重写模块接管,但我们希望在应用程序初始化发出由APP_WARMING_UP包含值的服务器变量标记的请求时重写响应代码1。当满足这个条件时,我们可以创建一个自定义响应作为操作,并使用 555 弹出 statusCode 属性。

<rewrite>
    <rules>
        <rule name="WarmUp" patternSyntax="Wildcard" stopProcessing="true">
            <match url="*" />
            <conditions>
              <add input="{APP_WARMING_UP}" pattern="1" />
            </conditions>
            <action type="CustomResponse" statusCode="555" statusReason="Site is warming up" statusDescription="Try again shortly" />
        </rule>
    </rules>
</rewrite>

然后将状态 555 捕获为自定义错误,并将用户引导至友好的预热页面warmup.html

<system.webServer>
    <httpErrors errorMode="Custom">
        <error statusCode="555" path="warmup.html" responseMode="File" />
    </httpErrors>
</system.webServer>
于 2018-02-27T03:54:23.800 回答