2010-05-05 50 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); 
} 
相關問題