これは重複した質問ではなく、問題は私を狂わせてしまいます。私は典型的なエラー "公共のアクションメソッドXはコントローラYに見つかりませんでした"を返しています。これは404 Not Found
を返します。404 - パブリックアクションメソッドXがコントローラーYに見つかりませんでした(ActionInvoker.InvokeActionがfalseを返します)
画像は、デバッガが(base.HandleUnknownAction(actionName)
)が実行される例外をスローする行の前に右の一時停止を示しています。スクリーンショットは、あなたに良いアイデアを提供します。結論に至る前に、ここにいくつかの情報があります:
- これはある時点で完璧に機能していました。
- HTTP動詞(
GET
)は、UpdateCart
アクションで受け入れる必要があります(メソッドシグネチャの注釈を参照)。 - 送信されるパラメータは無関係です。エラーは、
POST
,GET
および任意のパラメータの組み合わせで発生します。 - 同じコントローラ内の他の同様の動作はうまく機能します。
UpdateCart
とvirtual
と表示されたスクリーンショットを撮りましたが、virtual
を削除すると違いはありません。- このスクリーンショットは、
ActionInvoker.InvokeAction(this.ControllerContext, "UpdateCart")
が偽を返すことを示しています。私のコントローラ上で実行されたリフレクションがそのメソッドを見つけることができない理由はわかりませんが、それは正しいです!
ルートはデフォルトのもので、それ以外の場合は上記のスクリーンショットを取るためにデバッガを停止できないため、動作します。任意のアイデアを大歓迎している
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 }
);
}
:ここGlobal.asax.cs
からのコードです。以下
EDIT
イーサン・ブラウンの答えは正しいです:HttpGet
とHttpPost
は相互に排他的です。解決方法は、これらの属性を[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
に置き換えることでした。
あなたは書き換え任意のURLをやっていますか? – MikeSW
Nope。 URLの書き換えはありません。デバッガがどこまで到達したかに注意してください! – Diego
+1熟語と文書化された質問の場合+1。マジッククリーン/リビルドソリューション以外のアイデアはありません。ごめんなさい。 – Tommy