CF11与CF2018 REST 404响应

CF11与CF2018 REST 404响应,rest,coldfusion,Rest,Coldfusion,我有一个REST服务,它要么输出JSON,要么返回404,这取决于是否有匹配项。在我现有的CF11设置中,我可以使用 <cfthrow errorcode="404"> 但这显然不再适用于CF2018。为了生成404,我需要使用Java(如本文所述:): getPageContext() .getResponse() .getResponse() .senderro(JavaCast('int',404),“”); 这是可行的,但这让我好奇,所以我创建了一个小测试页面(不是

我有一个REST服务,它要么输出JSON,要么返回404,这取决于是否有匹配项。在我现有的CF11设置中,我可以使用

<cfthrow errorcode="404">

但这显然不再适用于CF2018。为了生成404,我需要使用Java(如本文所述:):


getPageContext()
.getResponse()
.getResponse()
.senderro(JavaCast('int',404),“”);
这是可行的,但这让我好奇,所以我创建了一个小测试页面(不是REST服务):


getPageContext()
.getResponse()
.getResponse()
.senderro(JavaCast('int',404),“”);
我也不能在这里工作。但是cfheader确实可以工作,正如预期的那样,javaone也可以工作。有人能解释为什么会有这些差异吗?仅供参考,我正在运行Win2012/IIS。谢谢

p、 由于我现有的CF11上的REST服务,我永远无法获得

<cfheader statuscode="404">


也可以生成404。在所有情况下,当我说404不工作时,返回的都是空白页。

如果您希望
生成404的HTTP状态码,那么在任何版本的CF中都不会工作。
cfthrow
只会抛出一个可捕获的错误。如果这在以前的代码库中起作用,那么查看错误处理例程。这一定是在查找
404
errorcode,然后使用
cfheader
实际返回HTTP状态代码。这在2018年的CF中仍然有效。如果不是,请检查您的服务器配置以验证您是否返回HTTP状态代码。谢谢,Miguel-F。查看我在CF11上的非常简单的REST服务,这就是我所做的一切--cfthrow errorcode=“404”。没有cfheader之类的东西。在我的例子中,你知道为什么cfheader在CF11或CF2018中都不起作用吗?就像我说的,我只是得到了一张空白页。代码再简单不过了:
{“column”:[#data#]}
如果添加statustext属性,它是否有效?像这样
。我的另一个想法是,您需要在ColdFusion管理员中启用
启用HTTP状态代码
。此外,您的Web服务器可能需要配置为允许从ColdFusion设置状态代码。例如,在IIS中,需要为响应启用直通。像这样
我更新了“启用HTTP状态码”,但没有效果。请记住,CFHEADER在REST之外工作得很好——它只对REST不起作用。
<cfparam name="URL.method" default="cfthrow" >
<cfif URL.method IS "cfthrow">
    <cftry>
        <cfthrow errorcode="404">
        <cfcatch></cfcatch>
    </cftry>
</cfif>
<cfif URL.method IS "cfheader">
    <cfheader statuscode="404">
</cfif>
<cfif URL.method IS "java">
    <cfscript>
        getPageContext()
            .getResponse()
            .getResponse()
            .sendError( JavaCast( 'int', 404 ), "" );
    </cfscript>
</cfif>
<cfheader statuscode="404">