First create a new filter ExceptionHandleErrorAttribute.cs.
The contents are as follows:

1 using System; 2 using System.Net; 3 using System.Web; 4 using System.Web.Mvc; 5 using ABBPMP.Utility.NLogHelper.Static; 6 7 namespace ABBPMP.Filter 8 { 9 /// <summary> 10 /// Exception capture (business logic layer, UI layer)11 /// </summary> 12 public class ExceptionHandleErrorAttribute : HandleErrorAttribute 13 { 14 /// <summary> 15 /// Erroneous interception16 /// </summary> 17 /// <param name="filterContext"></param> 18 public override void OnException(ExceptionContext filterContext) 19 { 20 21 if (filterContext.ExceptionHandled) 22 { 23 return; 24 } 25 26 27 28 string message = 29 $"Message Type: {filterContext. Exception. GetType (). Name} r n Message Content: {filterContext. Exception. Message} r n Method to Raise an Exception: {FiltererContext. Exception. TargetSite} r n Object that throws an exception: {filterContext. Exception. Source} r n Exception Directory: {filterContext.Xt.RouteData.GetRequiredString ("controller")}\r\nException method: {filterContext.RouteData.GetRequiredString ("action")}\r\nError detailed record: {filterContext.Exception.StackTrace}"; 30 NLogHandler.Instance.Error(message); 31 if (!filterContext.HttpContext.Request.IsAjaxRequest()) 32 { 33 filterContext.Controller.ViewData.Model = filterContext.Exception; 34 filterContext.Result = new ViewResult 35 { 36 ViewName = "~/Views/Error/Error.cshtml", 37 ViewData = filterContext.Controller.ViewData 38 }; 39 } 40 filterContext.Result = AjaxError(filterContext.Exception.Message, filterContext); 41 42 43 44 45 filterContext.ExceptionHandled = true; 46 } 47 /// <summary> 48 /// Ajaxes the error. 49 /// </summary> 50 /// <param name="message">The message.</param> 51 /// <param name="filterContext">The filter context.</param> 52 /// <returns>JsonResult</returns> 53 protected JsonResult AjaxError(string message, ExceptionContext filterContext) 54 { 55 56 //If message is null or empty, then fill with generic message 57 if (String.IsNullOrEmpty(message)) 58 message = "Something went wrong while processing your request. Please refresh the page and try again."; 59 //Set the response status code to 500 60 filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; 61 //Needed for IIS7.0 62 filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; 63 return new JsonResult 64 { 65 //can extend more properties 66 Data = new AjaxExceptionModel() { ErrorMessage = message }, 67 ContentEncoding = System.Text.Encoding.UTF8, 68 JsonRequestBehavior = JsonRequestBehavior.DenyGet 69 70 }; 71 72 } 73 /// <summary> 74 /// AjaxExceptionModel 75 /// </summary> 76 public class AjaxExceptionModel 77 { 78 /// <summary> 79 /// Gets or sets the error message. 80 /// </summary> 81 /// <value> 82 /// The error message. 83 /// </value> 84 public string ErrorMessage { get; set; } 85 86 } 87 88 } 89 }
View Code
Then add it to FilterConfig.
Global.asaxGlobal add
Finally, AJAX error handling and server error presentation are processed.
@{ ViewBag.Title = "General Site Error"; Layout = "~/Views/Shared/_Layout.cshtml"; } <div class="container"> <div class="row text-center"> <br/> <br /> <br /> <br /> <br /> <div class="col-md-6 col-md-offset-3 text-center"> @{ var exception = ViewData.Model; var statusCode = exception == null ? 404 : 500; Response.StatusCode = statusCode; if (statusCode == 404) { <h1>404 Page not found!</h1> <p>No page found!</p> } else if (statusCode == 500) { <h1>500 Program exception</h1> <p> <a class="btn" data-toggle="collapse" href="#collapseExample" role="button" aria-expanded="false" aria-controls="collapseExample"> Error details </a> </p> <div class="collapse" id="collapseExample"> <div class="card card-body"> <p style="text-align: left;">Message type: @exception.GetType ().Name<br />Message content: @exception.Message<br />Method of triggering exceptions: @exception.TargetSite<br />Exception object: @exception.Source<br />Error detailed record: @exception.StackTrace</p> </div> </div> } } <p style="font-size: 14px; color: Gray">Please use the browser's fallback function to ensure that the data you have filled is not lost.</p> </div> </div> <div class="row text-center"> <div class="col-md-8 col-md-offset-2"> <h3> <i class="fa fa-lightbulb-o fa-5x"></i> </h3> <a href="@Url.Action("Index","Home")" class="btn">GO TO HOME PAGE</a> </div> </div> </div>
$(document).ajaxError(function (event, request, settings) { //request.responseText if (request.responseText != "") { var jsonValue = jQuery.parseJSON(request.responseText); } toastr.error("<li>settings.url:" + settings.url + "</li>" + "<li>request.status:" + request.status + "</li>" + "<li>request.statusText:" + request.statusText + "</li>" + "<li>ErrorMessage:" + jsonValue.ErrorMessage + "</li>"); });