如何编写脚本 IIS 来传递带有自定义错误代码的静态资源?

如何编写脚本 IIS 来传递带有自定义错误代码的静态资源?

我有一个 IIS 8.5,在 Windows Server 2012 R2 上作为应用程序运行 RESTful ASP.NET 4.5 WCF 服务。

在维护服务期间,我希望对 WCF 服务的所有请求(https://server/path/service.svc/whatever/path)以产生自定义错误代码(例如 555)和静态 JSON 响应(静态内容和正确内容类型标头)。由于应该有一些自动触发的维护,因此如果可以通过编程方式触发此 IIS 行为就太好了。

您是否知道是否有某种方法可以为特定 URL 临时提供静态 JSON 内容(以及所有 REST-ful子路径,请参阅上面的示例 URL),并且另外使用自定义 5xx 错误代码(而不是 200)作为 HTTP 响应代码?

答案1

你问了两个问题,如何做到这一点以及如何编写你想要做的事情的脚本。

我不知道它是否可以开箱即用,但一个解决方案是使用IIS UrlRewrite 模块,这对于各种事情都非常方便,所以我认为无论如何拥有它都是一个好主意。

创建一个新规则,匹配您想要处理的所有请求,在您的案例中path/service.svc/whatever/path,您可以使用正则表达式来匹配您的请求。使用自定义响应并发送您自己的状态代码。在 web.config 中,您应该有一个这样的部分:

<rewrite>
  <rules>
    <rule name="Json Redirect" stopProcessing="true">
      <match url="path/service.svc/whatever/path" />
      <action type="CustomResponse" statusCode="555" subStatusCode="0" statusReason="Nothing to see here" statusDescription="Temporary static json..." />
    </rule>
  </rules>
</rewrite>

如果您只是这样做,您会得到错误代码,但不会得到静态 json。在 web.config 中的 system.webServer-httpErrors 下添加一个新条目:

<error statusCode="555" subStatusCode="0" path="temp.json" responseMode="File" />

responseMode = file 意味着静态文件位置相对于您的 Web 根目录,在上面的例子中,它位于您网站的根目录中。

现在您必须修复内容类型,在您的 web.config 中的 system.webServer-staticContent 下添加一个条目:

<mimeMap fileExtension=".json" mimeType="text/json" />

在本地测试时,您可能仍会收到 IIS 错误页面,但在远程调用它时,它应该可以工作。

您可以在 IIS 管理器 UI 中完成所有这些更改,但如果您想编写脚本,请查看PowerShell IIS cmdlet

相关内容