Это не дублирующий вопрос, и проблема сводит меня с ума. Я получаю типичную ошибку "Открытый метод действия X не найден на контроллере Y", который возвращает 404 Not Found. Снимок экрана дает вам хорошую идею:

На изображении показано, что отладчик приостановлен до того, как строка, которая генерирует исключение, выполнена (base.HandleUnknownAction(actionName)). Теперь, прежде чем вы переходите к выводам, здесь немного информации:
- Это отлично работает в какой-то момент.
- HTTP-глагол (
GET) должен быть принят действиемUpdateCart(см. аннотации выше подписи метода). - Отправленные параметры не имеют значения: ошибка происходит с
POST,GETи любой комбинацией параметров. - Другие аналогичные действия в одном контроллере работают хорошо.
- Я снял скриншот с
UpdateCartс пометкойvirtual, но удалениеvirtualне имеет значения. - Снимок экрана показывает, что
ActionInvoker.InvokeAction(this.ControllerContext, "UpdateCart")возвращает false. Не уверен, почему отражение, выполненное над моим контроллером, не может найти метод, но оно ПРАВОЕ ТЕБЕ!!
Маршруты являются стандартными, и они работают, поскольку в противном случае я бы не смог остановить отладчик, чтобы снять снимок экрана выше. Здесь код из Global.asax.cs:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Tickets", action = "Index", id = UrlParameter.Optional }
);
}
Любые идеи приветствуются.
ИЗМЕНИТЬ
Этан Браун отвечает правильно: HttpGet и HttpPost являются взаимоисключающими. Решение заключалось в замене этих атрибутов на [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)].
