Rescue是MonoRail中處理異常的一種機制 在asp.net或者java開發中我們都要進行異常處理,即發生異常時跳轉到某一個錯誤頁面。以前很多時候我們都是自動定義一種方式來處理的,在MonoRail中提供了一種現成的機制來處理異常 使用方式很簡單,只要加入一個Rescue屬性就可以了。 我們先來看看一個最簡單的方式
Rescue是MonoRail中處理異常的一種機制
在asp.net或者java開發中我們都要進行異常處理,即發生異常時跳轉到某一個錯誤頁面。以前很多時候我們都是自動定義一種方式來處理的,在MonoRail中提供了一種現成的機制來處理異常
使用方式很簡單,只要加入一個Rescue屬性就可以了。
我們先來看看一個最簡單的方式:
Controller代碼:
[Rescue("/error")]
public class ErrorController : SmartDispatcherController
{
public ErrorController()
{
}
[Rescue("/argerror", typeof(ArgumentException))]
public void Index()
{
//throw new ArgumentException("dddd");
throw new Exception("fff");
}
}
vm代碼:
<html>
<body>
<center>
<h2>出錯了</h2>
$context.LastException.Message
</center>
</body>
</html>
那麼當我們調用/error/index.rails頁面時,由於Index方法拋出Exception,那麼會自動顯示出/error.vm文件,並且在此文件中可以取得異常的信息
當Index方法拋出ArgrmentException時,會自動顯示出/argerror.vm文件
也就是説Rescue屬性可以定義在類和方法上,在類上定義的話對類中所有方法有效,在方法中定義的話會覆蓋到類中同類的異常處理機制
有了這種機制之後,我們就可以定義自己的一個異常類,然後再定義一個父的controller類,指定Rescue屬性,其他所有的controller類都從此類繼承。這樣,在我們的代碼中就不需要再考慮異常的處理了,會自動由父類接管。
其他相關點:
當某個方法不需要此異常機制時,可以如下定義:
[SkipRescue]
public void SkipAction()
{
//throw new ArgumentException("dddd");
throw new Exception("fff");
}
指定SkipRescue屬性就可以了