Cuando manipulas datos en una acción, a menudo recibes una ID como param, pero necesitas hacer algún manejo de errores para esa identificación. Uno de los controles de errores que tiene que hacer para cada acción es asegurarse de que el ID sea mayor que 0 (no un número negativo). Entonces, en lugar de manejar esto en la acción, quería agregar una restricción de ruta para que simplemente no se dirija a la acción si es una identificación negativa.Error de restricción de ruta en POST
Aquí está mi código:
//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)
Todo funciona bien cuando se hace una GET en la acción, pero cuando Post me sale el siguiente error cuando sólo debe ir a la página 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
¿Alguna idea? Tal vez una mejor solución?
EDIT: acabo de notar algo interesante, que inicialmente se pensó que el mensaje de error fue de un 500, pero es un 405, que es "método no encontrado"
¿Está haciendo alguna reescritura de URL? Las rutas en su excepción no coinciden. – Robaticus
no lo siento, me mencionaron en la primera respuesta, quise reemplazar la acción y el controlador en ambos, pero me perdí la segunda vez. Ambos coinciden. –
Realmente no entiendo por qué estaría bien en GET y arrojo un error en POST –