Http 是",;请求后参数的最大数量“;可捕获的限制?

Http 是",;请求后参数的最大数量“;可捕获的限制?,http,post,coldfusion,coldfusion-10,Http,Post,Coldfusion,Coldfusion 10,Coldfusion 10允许为请求后参数的最大数量设置限制(服务器设置/设置/请求大小限制/请求后参数的最大数量)。默认限制为100 当超过此限制时,是否可以捕获,以便可以使用自定义处理程序处理它?如果可以,如何处理 我试图在Application.cfc中使用站点范围的错误处理程序和onError()方法来捕获它。两次尝试都没有成功 感谢您的查看。如果超出限制,那么ColdFusion异常和应用程序日志中将有条目。我可以确认您看到的行为。我认为异常是由CF servlet在调用Applica

Coldfusion 10允许为请求后参数的最大数量设置限制(服务器设置/设置/请求大小限制/请求后参数的最大数量)。默认限制为100

当超过此限制时,是否可以捕获,以便可以使用自定义处理程序处理它?如果可以,如何处理

我试图在Application.cfc中使用站点范围的错误处理程序和onError()方法来捕获它。两次尝试都没有成功


感谢您的查看。

如果超出限制,那么ColdFusion异常和应用程序日志中将有条目。

我可以确认您看到的行为。我认为异常是由CF servlet在调用Application.cfc之前抛出的,这可以解释为什么
onError
从不触发

到目前为止,唯一对我有效的选项是在
WEB-INF\WEB.xml
中,使用HTTP状态代码:

<error-page>
    <error-code>400</error-code>
    <location>/path/to/myErrorPage.cfm</location>
</error-page>
<error-page>
    <error-code>400</error-code>
    <location>/path/to/myErrorPage.cfm</location>
</error-page>
也就是说,在我的(简短的)测试中,CF10似乎使用了非常通用的异常类来处理这个错误。这两者都有许多潜在的原因,不仅仅是发布了太多的表单字段。所以请记住这一点。虽然它比处理所有HTTP500错误更为集中,但它也可能包含其他原因

更新2:

事实证明,
javax.servlet.ServletException
只是一条红鲱鱼。正如@AdrianWright在评论中指出的,该错误与调试设置有关。当CF生成“请求后参数的最大数量”消息时,它没有正确考虑调试,这反过来会导致新的异常:
java.lang.IllegalStateException
。因此出现HTTP 500错误:

当调试被禁用时(就像在生产系统上一样),CF只需将错误消息直接写入响应流并返回HTTP状态代码400。由于没有抛出异常,
在这里是无用的。因此,您必须使用状态代码:

<error-page>
    <error-code>400</error-code>
    <location>/path/to/myErrorPage.cfm</location>
</error-page>
<error-page>
    <error-code>400</error-code>
    <location>/path/to/myErrorPage.cfm</location>
</error-page>

400
/路径/to/myErrorPage.cfm
但是,在“自定义错误”页面上,您可以。然后进行相应的处理:

  <cfset req = getPageContext().getRequest()>
  <cfset message = req.getAttribute("javax.servlet.error.message")>

  <cfif message contains "POST parameters exceeds">
     Too many form fields. do something...
  <cfelse>
     Some other cause. do something else
  </cfif>

表单字段太多。做点什么。。。
其他原因。做点别的

您可以发布用于尝试捕获OneError中错误的代码吗?我在OneError()中添加了一个cflog,以测试在超出限制时是否调用了OneError()。cflog没有生成任何内容,因此似乎没有调用onError()。查看是否调用onError()的一个好方法是使用已知错误运行代码。缺少分号通常就足够了。我可以确认您看到的内容。到目前为止,唯一有效的选项是使用
500
,不幸的是,这不允许我(轻松)触发自定义错误处理程序。FYI
java.lang.IllegalStateException
似乎与正在启用的调试和日志记录/调试输出设置/启用请求调试输出有关。当它被禁用时,Tomcat会将500个页面更改为400个通用页面。啊!昨晚我想知道这件事,但没有时间进行全面调查。只是确认一下,当您禁用调试时,它仍然跳过站点范围的错误处理程序?(我现在无法测试)糟糕透了。日志中报告的异常是否有任何更改?还是
javax.servlet.ServletException
?如果它是特定的东西,那就太好了,所以您可以使用
,但我怀疑这太令人失望了;-)当Tomcat生成400页时,CF不会记录任何异常,只会在coldfusion-out.log中记录一条消息。如果是这样,我认为您只能使用
400
。快速搜索建议您可以通过
getAttribute('javax.servlet.error.message')
getPageContext().getRequest()
提取错误消息。返回“POST参数超出最大限制”。