0

だから私は次のようなリモートColdFusion関数を持っています:

remote string function name (required numeric varname){

これは、AJAX 呼び出しを介してアクセスされます。Google は、このリモート関数への URL にジャンク/空白の値を渡すことを自ら引き受けました。ボット/ユーザーがジャンク値を取得するためにそれらを適切に処理するにはどうすればよいですか? 関数の周り/内部に try/catch を配置しようとしましたが、機能しません。また、デフォルト値を設定しようとしましたが、それでもエラーが発生します。エラーメッセージを返せるようにしたいです。

考え?

たった今:

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

エラーをスローしています

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

期待どおりに動作しています。

4

2 に答える 2

4

アップデート:

エラーの原因と検証による一連のイベントを説明しているため、後世のためにここに残します。ただし、Adam の応答は正しいソリューション 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は無視されます。

于 2013-03-28T17:41:20.507 に答える
3

ここで受け入れられた解決策が最善のアプローチであることに同意しません。

まず、メソッドが数値を想定しており、文字列が渡されている場合、エラーはまさに正しい反応です。無効な値を渡すリクエストを緩和する必要はありません。誰かが http://some.domain/path/to/file/wrongOne.html にリクエストするようなものだと考えてください(彼らは http://some.domain/path/to/file/rightOne.html をリクエストするべきでした)。 . 404 "エラー" が返されてもまったく問題ありませんね。そのような状況では、エラー応答はまさに適切です。

同様に、リモート呼び出し URL について、その引数が数値であることを指示しました。数値でない場合...それエラー状態です。したがって、サーバーが 500 タイプのエラーを返すことは、実際には正しいことです。

これは、「ガベージ イン、ガベージ アウト」ルールの例です。

エレガントなソリューションを探しているなら、すでに最もエレガントなソリューションを持っていると思います。誤って作成されたリクエストに対処するために特別なコードを書くことをいじらないでください。それはエレガントなアプローチではありません。

URL を要求するメカニズムがそれを停止するため、エラーを発生させたほうがよいでしょう。「OK」ではない200 OKリクエストに対して を返すようにいじるのは、間違ったことです。

エラー - それらが正しい結果である場合 - は問題ありません。彼らには何の問題もありません。

于 2013-03-28T20:28:22.153 に答える