POST上的路由约束错误

Pie*_* SS 5 c# asp.net-mvc asp.net-mvc-routing route-constraint

在操作中操作数据时,通常会收到一个ID作为参数,但是您需要对该ID进行一些错误处理.您必须为每个操作执行的错误处理之一是确保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 )
Run Code Online (Sandbox Code Playgroud)

当你对动作执行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
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?也许更好的解决方案?

编辑:刚刚注意到一些有趣的东西,我最初认为错误信息是500,但它的405是"找不到方法"

Rop*_*tah 1

你说:

不允许使用 HTTP 谓词 POST 来访问路径“/object/edit/-2”。

然而,例外情况是:

不允许使用 HTTP 谓词 POST 来访问路径“/profile/editlink/-2”。

编辑:

我认为这可能与你的问题有关。

然而事实并非如你所说。

  • 你能[编辑]把它变成一个答案而不是一个问题吗? (3认同)