先新建一个过滤器ExceptionHandleErrorAttribute.cs

内容如下:

 using System;
using System.Net;
using System.Web;
using System.Web.Mvc;
using ABBPMP.Utility.NLogHelper.Static; namespace ABBPMP.Filter
{
/// <summary>
/// 异常捕获(业务逻辑层,UI层)
/// </summary>
public class ExceptionHandleErrorAttribute : HandleErrorAttribute
{
/// <summary>
/// 错误拦截
/// </summary>
/// <param name="filterContext"></param>
public override void OnException(ExceptionContext filterContext)
{ if (filterContext.ExceptionHandled)
{
return;
} string message =
$"消息类型:{filterContext.Exception.GetType().Name}\r\n消息内容:{filterContext.Exception.Message}\r\n引发异常的方法:{filterContext.Exception.TargetSite}\r\n引发异常的对象:{filterContext.Exception.Source}\r\n异常目录:{filterContext.RouteData.GetRequiredString("controller")}\r\n异常方法:{filterContext.RouteData.GetRequiredString("action")}\r\n错误详细记录:{filterContext.Exception.StackTrace}";
NLogHandler.Instance.Error(message);
if (!filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.Controller.ViewData.Model = filterContext.Exception;
filterContext.Result = new ViewResult
{
ViewName = "~/Views/Error/Error.cshtml",
ViewData = filterContext.Controller.ViewData
};
}
filterContext.Result = AjaxError(filterContext.Exception.Message, filterContext); filterContext.ExceptionHandled = true;
}
/// <summary>
/// Ajaxes the error.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="filterContext">The filter context.</param>
/// <returns>JsonResult</returns>
protected JsonResult AjaxError(string message, ExceptionContext filterContext)
{ //If message is null or empty, then fill with generic message
if (String.IsNullOrEmpty(message))
message = "Something went wrong while processing your request. Please refresh the page and try again.";
//Set the response status code to 500
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
//Needed for IIS7.0
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
return new JsonResult
{
//can extend more properties
Data = new AjaxExceptionModel() { ErrorMessage = message },
ContentEncoding = System.Text.Encoding.UTF8,
JsonRequestBehavior = JsonRequestBehavior.DenyGet }; }
/// <summary>
/// AjaxExceptionModel
/// </summary>
public class AjaxExceptionModel
{
/// <summary>
/// Gets or sets the error message.
/// </summary>
/// <value>
/// The error message.
/// </value>
public string ErrorMessage { get; set; } } }
}

然后在FilterConfig添加

Global.asax全局下添加

最后处理下ajax错误处理和服务器错误呈现形式

@{
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>没有找到该网页!</p>
}
else if (statusCode == 500)
{
<h1>500 程序异常</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;">消息类型:@exception.GetType().Name<br />消息内容:@exception.Message <br />引发异常的方法:@exception.TargetSite <br />引发异常的对象:@exception.Source<br />错误详细记录:@exception.StackTrace</p>
</div>
</div> }
}
<p style="font-size: 14px; color: Gray">请使用浏览器的后退功能已保证您填写的数据没有丢失!</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>");
});

ASP.NET MVC 全局异常的更多相关文章

  1. asp.net mvc全局异常捕获

    通过重写OnException方法形式实现. 1.自定义异常记录类并继承HandleErrorAttribute类. public class HandlerErrorAttribute : Hand ...

  2. Asp.net Core全局异常监控和记录日志

    前言           系统异常监控可以说是重中之重,系统不可能一直运行良好,开发和运维也不可能24小时盯着系统,系统抛异常后我们应当在第一时间收到异常信息.在Asp.net Core里我使用拦截器 ...

  3. MVC 全局异常过滤器HandleErrorAttribute

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  4. ASP.NET MVC显示异常信息

    开发ASP.NET多了,它的异常信息显示也习惯了.但在ASP.NET MVC中,却是另外一番情形. 以前只习惯使用IE浏览器,现在开发ASP.NET MVC程序,为了捕获到异常信息,Firefox的f ...

  5. asp.net mvc 全局权限过滤器及继成权限方法

    全局权限过滤器 //----------------------------------------------------------------------- // <copyright f ...

  6. [Asp.net MVC]HandleErrorAttribute异常过滤器

    摘要 在asp.net mvc中除了使用try...catch/finally来处理异常外,它提供了一种通过在Controller或者Action上添加特性的方式来处理异常. HandleErrorA ...

  7. Spring MVC全局异常后返回JSON异常数据

    问题: 当前项目是作为手机APP后台支持,使用spring mvc + mybaits + shiro进行开发.后台服务与手机端交互是发送JSON数据.如果后台发生异常,会直接返回异常页面,显示异常内 ...

  8. asp.net core全局异常过滤并监控系统BUG将异常信息记录到日志

    添加: using Dw.Util.Helper; using Microsoft.AspNetCore.Mvc.Filters; using System; using System.Collect ...

  9. WinDBg定位asp.net mvc项目异常崩溃源码位置

    项目介绍:asp.net mvc + angular +iis(windows)+windows server 系统莫名崩溃 最近有个系统默认奇妙崩溃50x,服务整体变成无响应,当运维告知我只有重启应 ...

随机推荐

  1. hdoj1087 (DP--LIS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087 思路:这题很简单了,纯LIS的解法,没有一点变形,由于数据小,使用O(n^2)LIS解法就足够了 ...

  2. 不同的子序列 · Distinct Subsequences

    [抄题]: 给出字符串S和字符串T,计算S的不同的子序列中T出现的个数. 子序列字符串是原始字符串通过删除一些(或零个)产生的一个新的字符串,并且对剩下的字符的相对位置没有影响.(比如,“ACE”是“ ...

  3. jquery-jsonp插件解决跨域问题

    用jquery-jsonp插件解决ajax跨域问题,既可以实现ajax同样的请求效果,而且server服务端的相关代码也不用做任何改变. 代码如下: var url="http://loca ...

  4. js 递归调用

    js递归调用 function fact(num) { ) { ; } else { ); } } 以下代码可导致出错: var anotherFact = fact; fact = null; al ...

  5. linux下每次git clone不需输入账号密码的方法

    在~/下, touch创建文件 .git-credentials, 用vim编辑此文件,输入内容格式: ame@zhenyun ~ $touch .git-credentials ame@zhenyu ...

  6. MVC,MVP,MVVM区别联系

    本质上都是MVC,MVC在不同技术中的应用衍生出MVP,MVVM MVC:b/s MVP:c/s,尤其winform MVVM:wpf http://www.codeproject.com/Artic ...

  7. c语言使用指针实现模拟java/c# string.concat字符串串联方法

    #include <stdio.h> void _strcat(char *, const char *); int main(void) { char source[] ="V ...

  8. org.apache.hadoop.ipc.RemoteException: java.io.IOException:XXXXXXXXXXX could only be replicated to 0 nodes, instead of 1

    原因:Configured Capacity也就是datanode 没用分配容量 [root@dev9106 bin]# ./hadoop dfsadmin -report Configured Ca ...

  9. 类里面的非static const成员

    类里面的成员变量可以用const修饰,在只用const不用static修饰的情况下,这种使用的限制比较多 (1)不能定义处初始化,必须在类的构造函数初始化列表里面初始化(虽然在vs中,可以在定义处初始 ...

  10. Dice 7 ==> dice 5

    https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Moc ...