国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET MVC錯誤處理的對應解決方法

2024-07-10 12:48:49
字體:
來源:轉載
供稿:網友

ASP.NET MVC的錯誤處理應考慮到這幾個方面:模型綁定期間發生的錯誤,未能路由到指定操作,針對控制器的錯誤處理。使用配置文件可以幫助我們處理異常,但是不夠靈活和全面;使用HandleErrorAttribute、自定義錯誤過濾器或重寫控制器OnException方法只能解決針對控制器的錯誤,無法解決模型綁定期間發生的錯誤,也無法處理404錯誤,即使將錯誤過濾器注冊為全局過濾器也是如此。有時候需要多種方法配合使用。

在捕獲錯誤的地方,可以將有用的信息記錄下來,便于我們查出引起問題的原因和糾正錯誤。

1啟用自定義錯誤

使用這種方式一定要注意將defaultRedirect設置為指定的錯誤頁面,防止黑客探測各種錯誤情形進而發現系統的額漏洞。

<system.web> <customErrors mode="On" defaultRedirect="/error/error2">  <error statusCode="404" redirect="/error/error1" /> </customErrors> <!--其他配置--></system.web>

Mode:處理模式,有三種處理模式

On,啟用自定義處理功能,當錯誤發生時顯示自定義錯誤頁 Off,關閉自定義錯誤處理功能,當錯誤發生時顯示默認的錯誤頁。 RemoteOnly,啟用自定義錯誤處理功能,但只針對來自遠程機器的請求有效。

defaultRedirect:發生錯誤時,顯示指定錯誤頁。

<error>:根據狀態碼顯示指定的錯誤頁。mode必須為On或RemoteOnly模式,否則不會起作用。

注意:不論defaultRedirect和redirect都配置為指定的路徑,例如上述配置中控制器error,控制器操作為error1和error2,相應地錯誤頁為Error1.cshtml和Error2.cshtml。

2針對控制器的錯誤處理

2.1使用HandleErrorAttribute修飾控制器或操作。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]public class HandleErrorAttribute : FilterAttribute, IExceptionFilter{    //獲取或設置異常的類型。    public Type ExceptionType { get; set; }     //獲取或設置用于顯示異常信息的母版視圖    public string Master { get; set; }    //獲取此特性的唯一標識符。    public override object TypeId { get; }    //獲取或設置用于顯示異常信息的頁視圖。    public string View { get; set; }    //在發生異常時調用。     //filterContext:操作篩選器上下文    public virtual void OnException(ExceptionContext filterContext);}

例:

當發生KeyNotFoundException類型的異常時,顯示KeyNotFind視圖

[HandleError(ExceptionType=typeof(KeyNotFoundException),View="KeyNotFound")]public ActionResult Index(){  ......}

還可以使用自定義的錯誤過濾器,并將其應用到控制器或操作上。

例:

public class CustomHandleError : HandleErrorAttribute  {    public override void OnException(ExceptionContext filterContext)    {      if (filterContext==null)        base.OnException(filterContext);      //記錄日志      LogError(filterContext.Exception);      //判斷是否啟用了自定義錯誤      if (filterContext.HttpContext.IsCustomErrorEnabled)      {        //將錯誤設置為已處理        filterContext.ExceptionHandled = true;        base.OnException(filterContext);      }    }  }            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大埔区| 蒙阴县| 江城| 石柱| 淮北市| 新昌县| 望奎县| 安国市| 澄迈县| 兴化市| 垦利县| 莱芜市| 台南市| 嵊州市| 宜川县| 临泽县| 雅江县| 明溪县| 板桥市| 牡丹江市| 舟山市| 天祝| 马山县| 同心县| 蕲春县| 伽师县| 常熟市| 文山县| 隆化县| 西盟| 和硕县| 黄龙县| 九江县| 长葛市| 三亚市| 武清区| 剑川县| 岐山县| 平湖市| 云龙县| 理塘县|