1

すべてのフォーム送信とサーバーに送信されたすべてのデータが通過していないことを確認するために、GETこのコードを見つけました

if(request.method == 'GET') {
      response.sendError(405)
    } else {
      // the rest of the delete action goes here
    }

これをすべてのコントローラーによって拡張されるアウトベースコントローラーに適用できるため、コードがどこでも繰り返されることはありません。上記のメソッドは、私が知りたい既存のメソッドをチェックし、POSTすべてのフォームと送信されたすべてのデータがPOST. これを設定するために使用する構成/変数はありますか?
よろしく
お願いします

4

1 に答える 1

4

一般的に、それがallowedMethodsマップの目的です。generate-controllerまたはgenerate-allスクリプトを使用すると、コントローラーには次のようになります。

static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

また、POSTが必要なアクションと、GETを許可するアクションに応じて、アクション名をマップに追加したり、マップから削除したりできます。これを基本クラスに入れて、サブクラスが基本クラス定義を再利用し、次のアプローチで追加できるようにすることができます。

static allowedMethods = BaseController.allowedMethods + [createUser: "POST"]

そのためには、その基本クラスを拡張する必要があるため、忘れがちです。したがって、より良いアプローチはフィルターを使用することかもしれません。コマンドで作成できますcreate-filters

したがって、たとえば、許可しないアクションの明示的なリストを含む次のようなフィルターを使用できます。

def filters = {
   postOnly(controller:'*', action: 'save|update|delete') {
      before = {
         if (!request.post) {
            response.sendError(405)
            return false
         }
         true
      }
   }
}

パイプで区切られたアクション名(コントローラー名にも同じことができます)に加えて、ワイルドカードを使用することもできるため、「create」で始まるアクションを追加できます。

   postOnly(controller:'*', action: 'save|update|delete|create*') {
于 2012-04-06T23:08:46.033 に答える