如果您将 IIS 与 ColdFusion 一起使用,这里有一种方法可以解决此问题,而无需<cfcatch>
在每个 API 端点上使用和滚动您自己的响应(这真的很痛苦)。
我在 .NET 中编写了一个 HttpModule,它利用 IIS 的响应管道来修改 ColdFusion 返回的响应。它只会在响应 Content-Type 是application/json
且状态码不以 a 开头2
(即它不是成功响应)时干扰。所有代码都可以在这里找到:
https://github.com/johnnyoshika/coldfusion-rest-post-process
以下是如何使用 HttpModule。
1) 获取 DLL
从此处获取ColdFusion.RestPostProcess.dll
文件并将其放入 ColdFusion 应用程序的 bin 文件夹中:
https://github.com/johnnyoshika/coldfusion-rest-post-process/tree/master/bin/Release
例如,如果您的 ColdFusion 应用程序在这里:
C:/myapp
然后你想把dll放在这里:
C:/myapp/bin/ColdFusion.RestPostProcess.dll
如果您不想信任陌生人的 DLL,则需要查看源代码并自己在 Visual Studio 中编译项目以生成 DLL。
2)修改web.config
在应用程序的根目录中修改或创建 web.config 文件。内容应该是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<httpModules>
<!-- This is for IIS5, IIS6, and IIS7 Classic -->
<add name="JsonCamelCasePropertyConverterModule" type="ColdFusion.RestPostProcess.JsonCamelCasePropertyConverterModule"/>
</httpModules>
</system.web>
<system.webServer>
<modules>
<!-- This is for IIS7+ Integrated mode -->
<add name="JsonCamelCasePropertyConverterModule" type="ColdFusion.RestPostProcess.JsonCamelCasePropertyConverterModule"/>
</modules>
</system.webServer>
</configuration>
就是这样。您的错误响应现在将如下所示:
{"message":"Email is invalid.","type":"ValidationException"}
如果你想知道我是如何创建这个 HttpModule 的,可以在这里找到源代码:
https://github.com/johnnyoshika/coldfusion-rest-post-process/blob/master/JsonCamelCasePropertyConverterModule.cs
和这里:
https://github.com/johnnyoshika/coldfusion-rest-post-process/blob/master/UTF8SanitizerStream.cs