2010-08-26 23 views
6

我需要的只是純文本的錯誤信息。但是ASP.NET正在從每個錯誤中做出一些HTML報告輸出。如何擺脫ASP.NET MVC中的HTML錯誤報告?

我有一個jquery ajax調用,並且當拋出一個錯誤時,我將所有的垃圾傳遞給客戶端。

我創建了一個過濾器屬性,但沒有幫助。

public class ClientErrorHandler : FilterAttribute, IExceptionFilter 
{ 
    public void OnException(ExceptionContext filterContext) 
    { 
     var responce = filterContext.RequestContext.HttpContext.Response; 
     responce.Write(filterContext.Exception.Message); 
     responce.ContentType = MediaTypeNames.Text.Plain; 
     filterContext.ExceptionHandled = true; 
    } 
} 

編輯

我看到this

,我倒要看看究竟什麼是這裏filterContext.Exception.Message

+0

請包括您在客戶端看到的內容以及您希望看到的內容。 – 2010-08-26 12:23:11

+0

好的,我編輯了我的帖子。 – user137348 2010-08-26 12:29:23

+1

您的web.config文件中的CustomErrors =「Off」?嘗試在你的web.config中打開CustomErrors =「On」或CustomErrors =「RemoteOnly」來抑制死亡的.NET黃色屏幕(這是你看到的HTML代碼)。 – Tommy 2010-08-26 14:45:59

回答

2

它看起來像你爲什麼不能正確處理這個例外的原因因爲它發生在MVC管道之外。如果您在發佈的代碼中查看堆棧跟蹤,則沒有對System.Web.Mvc代碼的引用(在發生異常時從異常過濾器發起的調用從ControllerActionInvoker.InvokeAction中調用)。

堆棧跟蹤表明異常發生在ASP.NET管道(OnEndRequest)的後期,並且它是通過Autofac組件來的。

要捕獲此錯誤,您必須訂閱HttpApplication的Error事件。請參閱以下有關創建全局錯誤處理程序的文章:http://msdn.microsoft.com/en-us/library/994a1482.aspx。在這種情況下,您可以處理錯誤並重定向到自定義錯誤頁面。

0

需要返回ContentResult類型

ContentResult result = new ContentResult(); 
result.Content = filterContext.Exception.Message; 
result.ContentType = MediaTypeNames.Text.Plain; 
filterContext.Result = result; 
filterContext.ExceptionHandled = true; 
+0

沒有,相同的結果.. – user137348 2010-08-26 12:34:32

+0

它適用於我。你確定過濾器正在被使用嗎? – Sruly 2010-08-26 12:45:33

+0

是的,我通過它..屬性是在方法上,而不是在課堂上。 – user137348 2010-08-26 12:50:58

0

由於您使用的是JQuery和WCF(通過您的錯誤的詳細信息),您可能需要查看本文,瞭解如何優雅地處理服務故障between jQuery and WCF - 如果您有任何問題,您可能需要重新提供服務能夠這樣做。