Heisenbug - POST上的属性路由偶尔会失败

时间:2016-08-04 02:49:33

标签: c# asp.net asp.net-mvc azure attributerouting

有时候,当点击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或为空。由于所有异步的东西,我不确定为什么偶尔会发生这种情况。也许是因为异步性而发生的?这非常罕见但很烦人。感谢。

0 个答案:

没有答案