首頁 後端開發 php教程 關於MVC異常處理的問題及解決實例

關於MVC異常處理的問題及解決實例

Jun 15, 2017 pm 01:45 PM
mvc 例外處理

這篇文章主要為大家詳細介紹了MVC異常處理的相關資料,具有一定的參考價值,有興趣的小夥伴們可以參考一下

#       在日常開發中,我們會去捕捉很多的異常,來進行處理,通常我們的方法就是,在需要進行異常處理的地方加上try catch 區塊,但是,如果需要異常處理的地方很多,那麼,就會頻繁的去寫try catch 塊,對於我們天生'懶惰' 的程式設計師來說,總想找一個捷徑。於是,就會有全域異常處理,那麼,今天,我們就來看看在MVC中怎麼進行全域異常處理的。

一、MVC框架自己的全域異常處理

  在MVC中,框架已經給我們一共了一套全域異常處理的特性類別HandleErrorAttribute類別。我們可以在MVC中的App_Start資料夾中的FilterConfig.cs檔案中找到這麼一行程式碼


public static void RegisterGlobalFilters(GlobalFilterCollection filters)
 {
    filters.Add(new HandleErrorAttribute());
  }
登入後複製

這個就是實例化一個HandleErrorAttribute類,放到過濾器中。然後我們的Views>Shared資料夾中有一個Error.cshtml的頁面,其中,該頁面裡的Model的類型為System.Web.Mvc.HandleErrorInfo,這個是MVC框架已經給我寫好了的,我們可以直接拿來用。

在Error.cshtml頁面中,我們可以做進一步處理,來顯示錯誤訊息,根據需求來展示錯誤訊息。這些錯誤訊息都會在System.Web.Mvc.HandleErrorInfo類別中的某些屬性中找到的。

例如:一下是Error.cshtml。

我們在Control中,故意寫一個異常出來:


public class HomeController : Controller
  {
    public ActionResult Index()
    {
      string i = "12a";
      int j = Convert.ToInt32(i);
      return View();
    }
  }
登入後複製

運行一下,我們來看看結果。

以上就是運行的結果,我們可以看到,System.Web.Mvc.HandleErrorInfo類別還是有很多豐富的屬性的,我們可以直接拿來用。

MVC自帶的這套異常處理預設的是處理錯誤碼為500系列的異常,如果是404,就不會走這個了。不過,我們可以透過Web.config檔的設置,來處理。看我們如何處理的。

首先,我們先將Error.cshtml頁補充完整,先為他加上一個Control,然後,我們再寫一個專門處理404的View和Control。如下


namespace Exception.Controllers
{
  public class SharedController : Controller
  {
    // GET: Shares
    public ActionResult Error()
    {
      return View();
    }

    public ActionResult NotFondError()
    {
      return View();
    }
  }
}
登入後複製

頁面:

#然後我們在瀏覽器位址中寫一個錯誤的位址,看一下結果:

二、重寫MVC中的例外處理

在開發中,我們常有這麼一個需求,我們需要將異常透過文字日誌的方式記錄下來並保存,那麼MVC自帶的異常處理方式System.Web.Mvc.HandleErrorInfo沒有這麼一個功能,那麼我們透過重寫的方式來讓它有這個功能。下面,我們來看看如何重寫。

首先我們建立一個類,讓這個類別繼承System.Web.Mvc.HandleErrorInfo,然後重寫System.Web.Mvc.HandleErrorInfo中的虛擬方法:OnException方法。


public class CustomHandleErrorAttribute : HandleErrorAttribute
  {
    public override void OnException(ExceptionContext filterContext)
    {
      base.OnException(filterContext);
      var err = filterContext.Exception.Message;//错误内容
      //=============================
      //将错误记录到日志中
      //=============================
    }
  }
登入後複製

然後,將FilterConfig.cs加入:


public class FilterConfig
  {
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
      filters.Add(new HandleErrorAttribute());
      filters.Add(new CustomHandleErrorAttribute());
    }
  }
登入後複製

這樣,我們就可以完成我們的需求了。

以上是關於MVC異常處理的問題及解決實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

C++ 函式異常與多執行緒:並發環境下的錯誤處理 C++ 函式異常與多執行緒:並發環境下的錯誤處理 May 04, 2024 pm 04:42 PM

C++ 函式異常與多執行緒:並發環境下的錯誤處理

C++ 異常處理如何支援自訂錯誤處理例程? C++ 異常處理如何支援自訂錯誤處理例程? Jun 05, 2024 pm 12:13 PM

C++ 異常處理如何支援自訂錯誤處理例程?

Java函數中遞歸呼叫與異常處理有何關係? Java函數中遞歸呼叫與異常處理有何關係? May 03, 2024 pm 06:12 PM

Java函數中遞歸呼叫與異常處理有何關係?

C++ 技術中的例外處理:如何在多執行緒環境中正確處理例外狀況? C++ 技術中的例外處理:如何在多執行緒環境中正確處理例外狀況? May 09, 2024 pm 12:36 PM

C++ 技術中的例外處理:如何在多執行緒環境中正確處理例外狀況?

Java多執行緒環境下的例外處理 Java多執行緒環境下的例外處理 May 01, 2024 pm 06:45 PM

Java多執行緒環境下的例外處理

C++ Lambda 表達式如何進行異常處理? C++ Lambda 表達式如何進行異常處理? Jun 03, 2024 pm 03:01 PM

C++ Lambda 表達式如何進行異常處理?

PHP異常處理:透過異常追蹤了解系統行為 PHP異常處理:透過異常追蹤了解系統行為 Jun 05, 2024 pm 07:57 PM

PHP異常處理:透過異常追蹤了解系統行為

如何處理跨執行緒的C++異常? 如何處理跨執行緒的C++異常? Jun 06, 2024 am 10:44 AM

如何處理跨執行緒的C++異常?

See all articles