Это НЕ повторяющийся вопрос, и проблема сводит меня с ума. Я получаю типичную ошибку «Метод открытого действия X не найден на контроллере Y», который возвращает 404 Not Found
. Скриншот дает вам хорошее представление:
На изображении показана пауза отладчика прямо перед выполнением строки, выдающей исключение( base.HandleUnknownAction(actionName)
). Теперь, прежде чем вы сделаете поспешные выводы, вот некоторая информация:
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)]
.