2013-08-28 132 views
1

Maday, 我收到这个错误登录分贝任何想法或线索修复这种间歇性的asp.net mvc异常。 感谢公共行动方法'未定义'未在控制器上找到#######'

Unhandled System.Web.HttpException (0x80004005): A public action method 'undefined' was not found on controller '#######'. 
    at System.Web.Mvc.Controller.HandleUnknownAction(String actionName) 
    at System.Web.Mvc.Controller.ExecuteCore() 
    at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) 
    at System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) 
    at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__4() 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0() 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`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) at System.Web.Mvc.Controller.HandleUnknownAction(String actionName) 
    at System.Web.Mvc.Controller.ExecuteCore() 
    at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) 
    at System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) 
    at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__4() 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0() 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`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) 

回答

1

我不能肯定地说,但我怀疑这是在JavaScript正在兴建未被定义的变量,其中一个URL的结果。

喜欢的东西:

var action 
var url = '/myContoller/' + action 

这将导致一个请求:

/myContoller /未定义

预期的网址可能是东西是不是连打算成为一个MVC路线。它可能是一个图像或其他东西。

var imageUrl 
var url = '/folder/' + imageUrl 

/MyFolder中/未定义

MVC将尝试路由,这取决于你的路由配置方式。

日志中是否有任何有关请求来自何处的信息?

更新1:

如果你想MVC忽略到您的网站(例如图像目录)的特定区域的所有请求,你可以做这样的事情:

routes.IgnoreRoute("images/{*pathinfo}"); 
+0

感谢回答,没有任何技术或工具来抓住这个特殊的路由 – djerid

+0

公共行动方法“未定义”在控制器里没有发现“Kernel.Web.Controllers.APController”。 – djerid

+0

可能还有其他方法,但我的经验是您需要某种记录来捕获引用者。这会让你了解坏请求来自哪个脚本。然后修复脚本。 – PeaceFrog

0


我发现了一个可能的方法来修复图像URL路由问题,基于@ Dan的helpful answer


因此,因为我有这种“无所不包”在我 RouteConfig.cs 404错误路线:

// for 404-error page routing 
routes.MapRoute(
    name: "Error", 
    url: "{*url}", 
    defaults: new { controller = "Error", action = "PageNotFound" } 
); 


... MVC是奇怪的解释,我已经通过剃刀@foreach语句的URL加载的图像:

// this is triggering the weird problem, dunno why: 
@foreach (string image in this.Model.ImageArray) 
{ 
    <img src="@this.Url.Content(image)" title="foobar" alt="@image" /> 
} 


异常类型是HttpException并且所产生的异常信息是:

在控制器MyWebsite.Controllers上未找到公共操作方法'[object HTMLImageElement]'。HomeController的”



在我 RouteConfig.csRegisterRoutes方法的顶部放置 routes.IgnoreRoute("MyImageFolderPath/{*pathinfo}");没有解决这个问题,但这并:

routes.IgnoreRoute("[object HTMLImageElement]"); 


它似乎仍然hackish的,虽然,并由于我处理404错误的执行不力...

您可以通过在整个RouteConfig.cs以及Application_Error方法Global.asax.cs(如果您还在处理HttpException错误)中分散断点来验证它是否有效。