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屬性就可以了