這不是一個重複的問題,問題讓我發瘋。我得到了一個典型的錯誤「在控制器Y上未找到公共操作方法X」,它返回404 Not Found
。截圖給你一個好主意:404 - 在控制器Y上未找到公共操作方法X(ActionInvoker.InvokeAction返回false)
圖顯示了調試器拋出執行(base.HandleUnknownAction(actionName)
)異常的行權之前暫停。現在,在您得出結論之前,您可以看到以下信息:
- 這在某種程度上工作得很好。
- 該動作(請參閱上面的方法簽名註釋)應接受HTTP動詞(
GET
)作爲UpdateCart
操作。 - 發送的參數無關緊要:錯誤發生在
POST
,GET
以及任意參數組合上。 - 同一控制器中的其他類似操作可以很好地工作。
- 我用
UpdateCart
的截圖標記爲virtual
,但刪除virtual
沒有什麼區別。 - 該屏幕截圖顯示
ActionInvoker.InvokeAction(this.ControllerContext, "UpdateCart")
返回假。不知道爲什麼通過我的控制器執行的反射無法找到該方法,但它是正確的!
這些路由是默認的路由,他們的工作,否則我不能停止調試器採取上述截圖。這裏的代碼從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)]
替換這些屬性。
你在做任何URL重寫? – MikeSW 2012-03-29 18:44:35
沒有。沒有URL重寫。注意調試器到了多遠! – Diego 2012-03-29 18:50:15
+1表示一個很好的措辭和記錄的問題。除了魔術清理/重建解決方案之外,沒有任何想法。抱歉。 – Tommy 2012-03-29 19:26:30