2010-05-05 106 views

回答

-2

检查异常的调用堆栈。

例如:

var actionMethod = new StackTrace(exception) 
    .GetFrames().FirstOrDefault(f => 
     typeof(IController).IsAssignableFrom(f.GetMethod().DeclaringType) 
    ).GetMethod(); 
+1

不要这样做; ExceptionContext按照OdeToCode的回答提供了一种更简单,更简洁,更高效的方式来访问控制器名称和操作。 – 2014-04-15 14:50:47

+0

@ChristopherKing:只要你有上下文可用。 – SLaks 2014-04-17 01:18:51

+4

我相信他会这么做,因为他正在处理OnException方法中的错误。 – 2014-04-17 13:11:34

-4

添加以下方法在Global.asax中,把一个破发点就可以了

public void Application_Error(object sender, EventArgs e) 
    { 


    } 

无论身在何处的应用程序出现错误,断点在这个方法上会受到打击。从这里你可以看到在快速监视窗口下面的表达式的值,你就会知道究竟是例外的发生

((System.Web.HttpApplication)(sender)).Context.AllErrors 

这种方法将帮助,无论身在何处的例外发生的原因您Web应用程序。

+0

这个问题表明正在使用控制器的OnException处理程序,所以这不会回答这个问题。 – 2014-04-15 14:52:40

48

由于Charlino暗示,该值可从ExceptionContext参数:

protected override void OnException(ExceptionContext filterContext) 
{ 
    var controllerName = filterContext.RouteData.Values["controller"]; 
    var actionName = filterContext.RouteData.Values["action"]; 

    // ... 

    base.OnException(filterContext); 
} 
相关问题