我在asp.net mvc app中使用自定义动作过滤器将http状态代码422和json验证错误列表(基本上是序列化模型状态字典)返回给客户端,我在jQuery中使用全局ajaxError处理程序处理它。
所有这些都适用于开发环境,但我的问题是当启用自定义错误模式(<system.webServer>/<httpErrors errorMode="Custom">
)时,IIS用文本替换响应(json)“自定义错误模块无法识别此错误”。
如果状态代码为422,我很难正确配置IIS以传递原始响应。任何人都做了类似的事情吗?
如果Web服务器配置为传递现有响应,则会将json内容返回给浏览器。
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough">
</httpErrors>
</system.webServer>
为IIS 7.5进行以下设置,这对我来说很好,这里最重要的是安装existingResponse="Replace"
:
<httpErrors errorMode="DetailedLocalOnly" existingResponse="Replace" detailedMoreInformationLink="http://YouLink" lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
<error statusCode="401" prefixLanguageFilePath="" path="C:\path\to\401.htm" responseMode="File" />
<error statusCode="403" prefixLanguageFilePath="" path="C:\path\to\403.htm" responseMode="File" />
<error statusCode="404" prefixLanguageFilePath="" path="C:\path\to\404.htm" responseMode="File" />
<error statusCode="405" prefixLanguageFilePath="" path="C:\path\to\405.htm" responseMode="File" />
<error statusCode="406" prefixLanguageFilePath="" path="C:\path\to\406.htm" responseMode="File" />
<error statusCode="412" prefixLanguageFilePath="" path="C:\path\to\412.htm" responseMode="File" />
<error statusCode="500" prefixLanguageFilePath="" path="C:\path\to\500.htm" responseMode="File" />
<error statusCode="501" prefixLanguageFilePath="" path="C:\path\to\501.htm" responseMode="File" />
<error statusCode="502" prefixLanguageFilePath="" path="C:\path\to\502.htm" responseMode="File" />
<error statusCode="400" prefixLanguageFilePath="" path="C:\path\to\400.htm" responseMode="File" />
</httpErrors>