MVC Exception Handling
usingSystem;usingSystem.Configuration;usingSYSTEM.WEB.MVC;usinginfrastructure.exceptions;usinglog4net;namespaceinfrastructure.web.actionfilters{/// <summary> ///Unified processing MVC site Exception Filters/// </summary> Public classUnifymvcsitehandleerrorattribute:handleerrorattribute {Private Static ReadOnlyILog Log = Logmanager.getlogger (typeof(Unifymvcsitehandleerrorattribute)); Public ReadOnly stringBootstraperror ="~/views/shared/bootstraperror.cshtml"; PublicMvcresulttype Mvcresulttype {Set;Get; } Public Override voidonexception (Exceptioncontext filtercontext) {if(Filtercontext = =NULL||filtercontext.exceptionhandled)return; Log.error (FilterContext.Exception.GetFriendlyMessage (), filtercontext.exception); if(FilterContext.RequestContext.HttpContext.Request.IsAjaxRequest ()) {Handleajaxrequesterror (Filtercontext); } Else if(FilterContext.Exception.IsTipException ()) {handlerequestwithtipexception (filtercontext); } Base. Onexception (Filtercontext); } /// <summary> ///handling errors generated by Ajax requests/// </summary> /// <param name= "Filtercontext" ></param> Private voidhandleajaxrequesterror (Exceptioncontext filtercontext) {varMessage =GetMessage (filtercontext.exception); Filtercontext.result=buildactionresultwitherrormessage (filtercontext, message); FilterContext.HttpContext.Response.StatusCode= $; Filtercontext.exceptionhandled=true; } /// <summary> ///Build Action results that contain error messages/// </summary> /// <param name= "Filtercontext" ></param> /// <param name= "message" ></param> /// <returns></returns> PrivateActionResult Buildactionresultwitherrormessage (Exceptioncontext filtercontext,stringmessage) { varActionName = (string) filtercontext.routedata.values["Action"]; if(Mvcresulttype = = mvcresulttype.partialhtml | | actionname.endswith ("Partial")) { return NewContentresult () {Content =message}; } if(Mvcresulttype = =mvcresulttype.bootstrapmodal) {return NewPartialviewresult () {ViewName=Bootstraperror, ViewData=Newviewdatadictionary<string>(Message)}; } return NewJsonresult () {Data=New{success =false, message, flag =false, msg =message}, Jsonrequestbehavior=Jsonrequestbehavior.allowget}; } /// <summary> ///getting prompt information/// </summary> /// <param name= "Exception" ></param> /// <returns></returns> Private stringGetMessage (Exception Exception) {if(Exception. Istipexception ()) {returnGettipmessage (Exception); } if(configurationmanager.appsettings["Hideerrortouser"] =="true") { return "for Web internal exceptions, contact your system administrator. "; } returnexception. Getfriendlymessage (); } /// <summary> ///handling a request for a prompt class exception/// </summary> /// <param name= "Filtercontext" ></param> Private voidhandlerequestwithtipexception (Exceptioncontext filtercontext) {varTipmessage =gettipmessage (filtercontext.exception); Filtercontext.result=NewViewResult () {ViewName="Tip", Mastername=string. Empty, ViewData=Newviewdatadictionary<string>(Tipmessage)}; Filtercontext.exceptionhandled=true; FilterContext.HttpContext.Response.Clear (); FilterContext.HttpContext.Response.StatusCode= -; FilterContext.HttpContext.Response.TrySkipIisCustomErrors=true; } Private stringgettipmessage (Exception Exception) {if(Exception isSystem.Web.HttpRequestValidationException) {return "Please enter a valid character. "; } if(Exception istipinfoexception) { returnexception. Message; } return NULL; } } /// <summary> ///MVC action Result type/// </summary> Public enumMvcresulttype {/// <summary> ///not specified/// </summary>Notspecify =0, /// <summary> ///HTML Fragment/// </summary>partialhtml =1, /// <summary> ///pop-up box/// </summary>Bootstrapmodal =2 }}
Unified MVC Exception Handling