Quando si manipolano i dati in un'azione, si riceve spesso un ID come param, ma è necessario eseguire una gestione degli errori per tale id. Uno degli errori di gestione che devi fare per ogni azione è assicurarsi che l'ID sia superiore a 0 (non un numero negativo). Quindi, invece di gestirlo nell'azione, ho voluto aggiungere un vincolo del percorso in modo che non si diriga verso l'azione se è un ID negativo.Errore di vincolo di percorso al POST
Ecco il mio codice:
//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)
Tutto funziona bene quando si fa un GET l'azione, ma quando ho Post ottengo il seguente errore quando si deve solo andare alla pagina 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
Qualche idea? Forse una soluzione migliore?
EDIT: qualcosa Appena notato interessante, inizialmente ho pensato che il messaggio di errore è stato un 500, ma è un 405 che è "il metodo non trovato"
stai facendo una riscrittura di URL? I percorsi nella tua eccezione non corrispondono. – Robaticus
no, scusa, ho menzionato nella prima risposta, intendevo sostituire l'azione e il controller in entrambi, ma ho saltato la seconda occorrenza. Entrambi corrispondono. –
Non capisco perché andrebbe bene su GET e lancia un errore su POST –