Asp.net MVC中实现一个错误处理过滤器- 软件开发网

鍦?a href="http://www.itstrike.cn/Home/AspnetmvcSpecial" title="ASP.NET MVC">ASP.NET MVC涓?鎴戜滑鍙互浣跨敤HandleErrorAttribute鐗规€ф潵鍏蜂綋鎸囧畾濡備綍澶勭悊Action鎶涘嚭鐨勫紓甯?鍙鏌愪釜Action璁剧疆浜?HandleErrorAttribute鐗规€?閭d箞榛樿鐨?褰撹繖涓狝ction鎶涘嚭浜嗗紓甯告椂MVC灏嗕細鏄剧ずError瑙嗗浘,璇ヨ鍥句綅浜巭/Views /Shared鐩綍涓?

璁剧疆HandleError灞炴€?/h4>

鍙互閫氳繃璁剧疆涓嬮潰杩欎簺灞炴€ф潵鏇存敼HandleErrorAttribute鐗规€х殑榛樿澶勭悊:

  • ExceptionType.鎸囧畾杩囨护鍣ㄥ鐞嗛偅绉嶆垨鍝簺绫诲瀷鐨勫紓甯?濡傛灉娌℃湁鎸囧畾璇ュ睘鎬?杩囨护鍣ㄥ皢浼氬鐞嗘墍鏈夌殑寮傚父.
  • View.鎸囧畾鍙戠敓寮傚父鏃惰繃婊ゅ櫒瑕佹樉绀虹殑瑙嗗浘鍚嶇О.
  • Master.鎸囧畾瑙嗗浘姣嶇増鐨勫悕绉?濡傛灉鏈夌殑璇?
  • Order.鎸囧畾杩囨护鍣ㄥ簲鐢ㄧ殑椤哄簭,濡傛灉涓€涓狝ction鏈夊涓狧andleErrorAttribute杩囨护鍣?

鎸囧畾Order灞炴€?/h4>

濡傛灉鏌愪釜Action璁剧疆浜嗗涓狧andleErrorAttribute,Order灞炴€у彲浠ョ敤鏉ョ‘瀹氫娇鐢ㄥ摢涓繃婊ゅ櫒.鍏跺€煎彲浠ヨ缃负浠?1(鏈€楂樹紭鍏堢骇)鍒颁换浣曟鏁存暟涔嬮棿鐨勬暣鏁版潵鏍囪瘑鍏朵紭鍏堢骇,鍊艰秺澶?浼樺厛绾у埆瓒婁綆.Order灞炴€ч伒寰互涓嬭鍒?

  1. 搴旂敤鍒癈ontroller涓婄殑杩囨护鍣ㄥ皢浼氳嚜鍔ㄥ簲鐢ㄥ埌璇ontroller鐨勬墍鏈堿ction涓?
  2. 濡傛灉Controller鍜孉ction閮藉簲鐢ㄤ簡HandleErrorAttribute,閭d箞鍙Order灞炴€у€肩浉鍚?灏嗕細鍏堟墽琛孋ontroller涓婄殑杩囨护鍣?鑰屽悗鎵嶄細鎵цAction涓婄殑杩囨护鍣?
  3. 瀵逛簬鐩稿悓Order灞炴€х殑杩囨护鍣?鍏舵墽琛屽厛鍚庢搴忎笉瀹?
  4. 濡傛灉娌℃湁鎸囧畾Order灞炴€?鍒欓粯璁や负-1,杩欐剰鍛崇潃璇ヨ繃婊ゅ櫒灏嗘瘮鍏朵粬鐨勮繃婊ゅ櫒浼樺厛鎵ц,闄ら潪鍏朵粬杩囨护鍣ㄦ寚瀹氫簡Order涓?1.
  5.  濡傛灉鏈夊涓繃婊ゅ櫒鍙€傜敤,閭d箞绗竴涓彲浠ュ鐞嗚寮傚父鐨勮繃婊ゅ櫒浼氳棣栧厛璋冪敤,鐒跺悗閽堝璇ュ紓甯哥殑澶勭悊灏嗕細缁堢粨.

鍦╒iew涓幏鍙栧紓甯镐俊鎭?/h4>

ASP.NET MVC妗嗘灦灏嗗紓甯镐俊鎭瓨鍌ㄥ湪ViewDataDictionary涓潵浼犻€掔粰Error瑙嗗浘,璇iewDataDictionary鐨凪odel灞炴€у嵆鏄疎xceptionContext绫荤殑涓€涓疄渚?杩欎釜ViewData鏈変笅闈㈠嚑涓敭:

ActionName:鐩爣Action鏂规硶鐨勫悕绉?br /> ControllerName:鐩爣Controller鐨勫悕绉?br /> Exception:寮傚父瀵硅薄.

鍚敤鑷畾涔夐敊璇鐞?/h4>

涓嬮潰鎴戜滑鏉ュ紑鍚敤浜嶩andleErrorAttribute杩囨护鍣ㄧ殑鑷畾涔夐敊璇鐞?鎵撳紑绋嬪簭鐨刉eb.config鏂囦欢,鍦╯ystem.web鑺備腑鍔犲叆涓€涓猚ustomErrors鍏冪礌,濡備笅鎵€绀?/p>

<system.web>
  
<customErrors mode="On" defaultRedirect="Error" />
</system.web>

 

 

澶勭悊Error瑙嗗浘涓殑閿欒

鏈夋椂鍊欏湪Error瑙嗗浘涓篃浼氬彂鐢熼敊璇?杩欐椂ASP.NET灏嗕細鏄剧ず鍏堕粯璁ょ殑閿欒椤甸潰(榛勫簳绾㈠瓧),涓轰簡閬垮厤杩欑鎯呭喌鐨勫嚭鐜?鎴戜滑鍦╓eb.config鏂囦欢鐨刢ustomErrors鑺備腑鏉ヨ嚜瀹氫箟閿欒椤甸潰,濡備笅:

<system.web>
  
<customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
    
<error statusCode="500" redirect="/Error.htm" />
  
</customErrors>
</system.web>

 

绀轰緥绋嬪簭

涓嬮潰鐨勭ず渚嬭鏄庝簡濡備綍瀵笴ontroller鍜孉ction搴旂敤HandleErrorAttribute鐗规€ф潵鑷畾涔夊紓甯稿鐞?

绀轰緥涓璈omeController鏈変竴涓悕涓篢hrowException鐨凙ction鏂规硶,鍦ㄨAction涓皢浼氭姏鍑轰竴涓?ApplicationException绫诲瀷鐨勯敊璇?杩欎釜Action搴旂敤浜咹andleErrorAttribute,浣嗘槸娌℃湁璁剧疆浠讳綍鍙傛暟.褰撹 Action鎵ц鏃跺皢浼氭姏鍑轰竴涓紓甯?鏄剧ず榛樿鐨凟rror瑙嗗浘.

鑰孴hrowNotImplemented鏂规硶鍒欏簲鐢ㄤ簡璁炬湁涓や釜鍙傛暟鐨凥andleErrorAttribute,View鍙傛暟鎸囧畾浜嗚嚜瀹氫箟鐨?Error瑙嗗浘鍚嶇О:CustomErrorView,ExceptionType鍙傛暟鎸囧畾浜嗚杩囨护鍣ㄤ粎澶勭悊ThrowNotImplemented绫诲瀷 鐨勫紓甯?

Controller鐨凥andleErrorAttribute鍒欒缃簡Order鍙傛暟涓?,鎰忓懗鐫€璇ヨ繃婊ゅ櫒鍙細琚湪Index鎴朅bout鏂规硶浜х敓寮傚父鏃舵墽琛?

 

鍚屾椂绀轰緥缁欏嚭浜嗚鍥綜ustomErrorView鍜孋ustomError.Master鐨勫唴瀹?
瑙嗗浘CustomErrorView鏄剧ず寮傚父鐨勪俊鎭?姣斿鎶涘嚭寮傚父鐨凜ontroller鍜孉ction鐨勫悕绉?寮傚父鐨勫唴瀹逛互鍙婂爢鏍堣窡韪俊鎭?
瑙嗗浘Index涓婃湁涓や釜閾炬帴,鍒嗗埆鎸囧悜浜員hrowException鍜孴hrowNotImplemented涓や釜Action.

HomeController绫?/p>

[HandleError(Order = 2)]
public class HomeController : Controller
{
    
public ActionResult Index()
    {
        ViewData[
"Message"= "Welcome to ASP.NET MVC!";

        
return View();
    }

    
public ActionResult About()
    {
        
return View();
    }

    [HandleError]
    
public ActionResult ThrowException()
    {
        
throw new ApplicationException();
    }

    [HandleError(View 
= "CustomErrorView", ExceptionType = typeof(NotImplementedException))]
    
public ActionResult ThrowNotImplemented()
    {
        
throw new NotImplementedException();
    }
}


瑙嗗浘 CustomErrorView

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    CustomErrorView
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    
<h2>CustomErrorView</h2>
    
<p>
      Controller: 
<%=((HandleErrorInfo)ViewData.Model).ControllerName %>
    
</p>
    
<p>
      Action: 
<%=((HandleErrorInfo)ViewData.Model).ActionName %>
    
</p>
    
<p>
      Message: 
<%=((HandleErrorInfo)ViewData.Model).Exception.Message %>
    
</p>
    
<p>
      Stack Trace: 
<%=((HandleErrorInfo)ViewData.Model).Exception.StackTrace %>
    
</p>

</asp:Content>

 

瑙嗗浘 Index

<asp:Content ID="indexTitle" ContentPlaceHolderID="TitleContent" runat="server">
    Home Page
</asp:Content>

<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
    
<h2><%= Html.Encode(ViewData["Message"]) %></h2>
    
<%= Html.ActionLink("Throw An Exception""ThrowException")%> (Default Error Page)
    
<br /><br />
    
<%= Html.ActionLink("Throw Not Implemented Exception""ThrowNotImplemented")%> (Custom Error Page)

</asp:Content>

 

 

姣嶇増椤?span id="ctl00_WikiContent_ctl00_HeaderTitle"> CustomError.Master

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>
<link href="http://www.cnblogs.com/Content/Site.css" rel="stylesheet" type="text/css" />
<style type="text/css">
body.error
{
background-color
: Maroon;
color
: #696969;
}
</style>
</head>
<body class="error">
<div class="page">
<div id="header">
<div id="title">
<h1>A Custom Error Occurred</h1>
</div>

<div id="logindisplay">
<% Html.RenderPartial("LogOnUserControl"); %>
</div>

<div id="menucontainer">

<ul id="menu">
<li><%= Html.ActionLink("Home""Index""Home")%></li>
<li><%= Html.ActionLink("About""About""Home")%></li>
</ul>

</div>
</div>
<div id="main">
<asp:ContentPlaceHolder ID="MainContent" runat="server" />
<div id="footer">
</div>
</div>
</div>
</body>
</html>

郑重声明:资讯 【Asp.net MVC中实现一个错误处理过滤器- 软件开发网】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——