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

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

零下一度
零下一度原創
2017-06-15 13:45:511152瀏覽

這篇文章主要為大家詳細介紹了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