アクションでデータを操作する場合、多くの場合、パラメータとして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です。