5

アクションでデータを操作する場合、多くの場合、パラメータとしてIDを受け取りますが、そのIDに対してエラー処理を行う必要があります。すべてのアクションに対して実行する必要のあるエラー処理の1つは、IDが0より大きい(負の数ではない)ことを確認することです。したがって、アクションでこれを処理する代わりに、ルート制約を追加して、負のIDの場合にアクションにルーティングしないようにしました。

これが私のコードです:

//route definition
        routes.MapRoute(
            "default route" ,
            "{controller}/{action}/{id}" ,
            new { id = UrlParameter.Optional },
            new { id = @"^\d+$" }
        );

//action definition (note I also tried with only [HttpPost] and with nothing same result
        [AcceptVerbs(HttpVerbs.Post | HttpVerbs.Get )]
        public ActionResult Edit( int id )

アクションでGETを実行するとすべて正常に機能しますが、POSTすると、404ページに移動する必要があるときに次のエラーが発生します。

 HTTP verb POST used to access path '/object/edit/-2' is not allowed.

[HttpException (0x80004005): The HTTP verb POST used to access path '/object/edit/-2' is not allowed.]
   System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context, AsyncCallback callback, Object state) +740
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +632
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +194

何か案は?おそらくより良い解決策ですか?

編集:何か面白いことに気づきました。最初はエラーメッセージは500だと思っていましたが、「メソッドが見つかりません」である405です。

4

3 に答える 3

1

あなたは言う:

パス'/object / edit/-2'へのアクセスに使用されるHTTP動詞POSTは許可されていません。

ただし、例外は次のように述べています。

パス'/profile / editlink/-2'へのアクセスに使用されるHTTP動詞POSTは許可されていません。

編集:

これはあなたの問題に関係しているのではないかと思います。

しかし、それはあなたが述べているようではありません。

于 2012-04-20T13:29:10.523 に答える
1

こちらにあるルーティング デバッガをインストールすることを強くお勧めします。特定の URL が各ルートでどのように解析されているかを正確に表示するので、その URL にアクセスしたときに実際に何が起こっているかを確認できます。ルートがスキップされている場合は、制約が機能していることがわかるので、それをキャッチしているものに集中できます。ルートがヒットしている場合は、アクションや動詞に問題があります。

補足: このデバッガーのバージョン 2.0.0.7 を正しく動作させることはまったくできませんでしたが (8 月に戻る)、記事に直接リンクされているバージョン (または NuGet の 1.0.0.1 バージョン) は正常に動作しました。NuGet の現在のバージョンは機能していると思いますが、そうでない場合は、古いバージョンを試してください。

于 2012-04-29T01:29:15.793 に答える
0

削除してみてください

[AcceptVerbs(HttpVerbs.Post | HttpVerbs.Get )]

そして、それが正しく機能するかどうかを確認します(通常、[HttpPost]を配置してHttpGetなどを拒否します)。

于 2012-04-28T00:47:46.187 に答える