.net mvc中封裝了一些特性可以實現AOP,如常用的HandleErrorAttribute,ActionFilterAttribute,AuthorizeAttribute。自定義一個特性,繼承這些特性,並重寫裡面的方法就可以AOP切入到Action中的關注點。本篇文章主要對筆者在使用HandleErrorAttribute的過程中遇到的一個問題進行分享。
我們在action中會用try..catch..進行異常處理,筆者在catch中返回一個json(標示失敗)。我發現所有的action在catch中返回值都一樣,所以就想到使用HandleErrorAttribute進行異常捕獲,然後返回自定義的json。但是發現我在OnException方法中已經設置了filterContext.Result為我想要返回的值了,但是運行時還是報錯,並沒有返回我處理後返回的json。如果你也遇到這樣的問題,添上一句話就OK了,那就是:filterContext.ExceptionHandled = true;
這是為什麼呢?可能你看到這裡已經恍然大悟了,那就是你要把ExceptionHandled這個表示設置為true,意思也就是我已經處理過了這個異常。這時候,浏覽器一看,哦~已經處理了異常了,就輸出你要的json了,如果你不設置成true,浏覽器一看,還是沒有Handed的異常,就給你報出來了。