Когда вы манипулируете данными в действии, вы часто получаете идентификатор в качестве параметра, но вам нужно выполнить некоторую обработку ошибок для этого идентификатора. Одна из ошибок обработки, которую вы должны выполнить для каждого действия, состоит в том, чтобы убедиться, что идентификатор выше 0 (а не отрицательное число). Поэтому вместо того, чтобы обрабатывать это в действии, я хотел добавить ограничение маршрута, поэтому просто не маршрутизируем действие, если его отрицательный идентификатор.Ошибка ограничения маршрута при POST
Вот мой код:
//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
Любые идеи? Возможно, лучшее решение?
EDIT: Просто заметил что-то интересное, я сначала подумал, что сообщение об ошибке было 500, но его в 405, который является «метод не найден»
Вы переписываете URL-адрес? Пути в вашем исключении не совпадают. – Robaticus
не жалко, я упоминал в первом ответе, я хотел заменить действие и контроллер в обоих, но пропустил второе появление. Они оба совпадают. –
Я действительно не понимаю, почему это было бы хорошо на GET и выбросить ошибку на POST –