处理CF远程功能中的无效数据类型

时间:2013-03-28 17:07:05

标签: coldfusion error-handling coldfusion-10 remoteobject

所以我有一个远程ColdFusion函数,如:

remote string function name (required numeric varname){

这是通过AJAX调用访问的。谷歌自己将垃圾/空白值传递给此远程功能的URL。我如何优雅地处理Bots / Users的那些以设法获得垃圾值。我已经尝试将try / catch放在函数内部/内部并且不起作用。我也试过设置默认值,但我仍然收到错误。我希望能够返回错误消息。

思想?

现在:

domain.com/path/to/page.cfc?method=function&varname=

抛出错误

domain.com/path/to/page.cfc?method=function&varname=5

按预期工作。

2 个答案:

答案 0 :(得分:4)

<强>更新

我将此留给后人,因为它通过验证解释了错误的原因和事件链。但是,Adam's response是IMO的正确解决方案。


  

remote string function name (required numeric varname){

     

我已尝试将try / catch放在函数内部/内部并且不起作用。

因为在 CF执行函数内部任何内容之前验证了参数值。所以它甚至都没有进入try/catch

如果要允许非数字值,则必须将参数类型设置为string并在函数内执行验证。即

      // use whatever check is appropriate here
      if ( IsNumeric(arguments.varname) ) { 
          // good value. do something
      }
      else {
          // bad value. do something else
      }
  

我也尝试过设置默认值,但仍然出现错误

     

domain.com/path/to/page.cfc?method=function&varname=

<强>更新 它不起作用的原因是因为varname参数确实存在。它的值是一个空字符串。只要传递某些值(即使是空字符串),default就会被忽略。

答案 1 :(得分:3)

我不同意接受的解决方案是最好的方法。

首先,如果你的方法期望一个数字并且它被传递一个字符串,那么错误就是这里正确的反应。您不应觉得需要缓解传递无效值的请求。考虑就像有人向http://some.domain/path/to/file/wrongOne.html提出请求(他们本应该请求http://some.domain/path/to/file/rightOne.html)......事情在那里返回404“错误”是完全可以的,不是吗?在这种情况下,错误响应是完全正确的。

同样,您已经规定,对于您的远程调用URL,该参数应该是数字。因此,如果它不是数字...... 是一个错误条件。因此,您的服务器返回500型错误实际上是正确的做法。

这是“垃圾进,垃圾出”规则的一个例子。

如果您正在寻找一个优雅的解决方案,我会说您已经拥有了最优雅的解决方案。不要乱写特殊代码来处理错误的请求。那是不是一种优雅的方法。

你最好让事情发生错误,因为请求URL的机制将停止这样做。如果您正在为“OK”的请求返回200 OK,那么这是错误的做法。

错误 - 当它们是正确的结果时 - 很好。他们没有错。