有时候,当点击POST动作方法时,我会得到这个例外:
错误讯息:
(System.Web.HttpException):在控制器' xyz'上找不到匹配的操作。当控制器使用RouteAttribute进行路由时,可能会发生这种情况,但该控制器上没有任何操作与请求匹配。
行动方法通常如下所示:
[Authorize(Roles = "RoleOfSomeSort")]
[HttpPost]
[Route("path-1/path-2")]
[ValidateAntiForgeryToken]
public ActionResult MethodName(ViewModel viewModel)
{
// Code
}
如果我再试一次,它通常会起作用。它只是偶然弹出的异常,然后在我尝试复制时消失。
我在Azure Web Apps中测试网站。我很确定我的开发机器上从未出现过这个错误。在自由和共享模式下都发生了此错误。
堆栈追踪:
at System.Web.Mvc.Controller.HandleUnknownAction(String actionName)
at System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
at System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
at System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)
at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)
at System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
如果您想了解更多信息,请与我们联系。
编辑:
请求引发此异常的网址:
/列表/创建在职空缺上市
/列表/创建服务劳动雇佣-上市
/我 - 东西/我 - 上市/上载照片
在这里深入研究ASP.NET MVC代码:https://github.com/ASP-NET-MVC/aspnetwebstack/blob/4e40cdef9c8a8226685f95ef03b746bc8322aa92/src/System.Web.Mvc/Controller.cs,这是失败的行(第304行):
protected virtual void HandleUnknownAction(string actionName)
{
// If this is a direct route we might not yet have an action name
if (String.IsNullOrEmpty(actionName))
{
throw new HttpException(404, String.Format(CultureInfo.CurrentCulture,
MvcResources.Controller_UnknownAction_NoActionName, GetType().FullName));
}
因此actionName为null或为空。由于所有异步的东西,我不确定为什么偶尔会发生这种情况。也许是因为异步性而发生的?这非常罕见但很烦人。感谢。