如何脚本IIS提供一个自定义错误代码的静态资源?

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

在维护服务期间,我希望所有对WCF服务( https://server/path/service.svc/whatever/path )的请求导致自定义错误代码(例如555)和静态JSON响应(静态内容和正确的Content-Type标题)。 由于应该有一些自动触发的维护,如果这种IIS行为可以以编程方式触发,那将是非常好的。

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

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

我不知道它是否可用,但是一个解决scheme是使用IIS UrlRewrite模块 ,这对于所有types的东西都非常方便,所以我认为它是一个好主意。

创build一个新的规则,匹配所有你想要处理的请求,在你的path/service.svc/whatever/path ,你可以使用正则expression式来匹配你的请求。 使用自定义响应并发送自己的状态码。 在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 =文件意味着静态文件的位置是相对于你的网站根,在你的网站根目录右上方的情况。

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

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

在本地进行testing时,您仍然可能会收到IIS错误页面,但是远程调用它应该可以正常工作。

您可以在IISpipe理器用户界面中执行所有这些更改,但是如果要编写脚本,请查看PowerShell IIS cmdlet 。