ASP.NET MVC 全局异常
先新建一个过滤器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 全局异常的更多相关文章
- asp.net mvc全局异常捕获
通过重写OnException方法形式实现. 1.自定义异常记录类并继承HandleErrorAttribute类. public class HandlerErrorAttribute : Hand ...
- Asp.net Core全局异常监控和记录日志
前言 系统异常监控可以说是重中之重,系统不可能一直运行良好,开发和运维也不可能24小时盯着系统,系统抛异常后我们应当在第一时间收到异常信息.在Asp.net Core里我使用拦截器 ...
- MVC 全局异常过滤器HandleErrorAttribute
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- ASP.NET MVC显示异常信息
开发ASP.NET多了,它的异常信息显示也习惯了.但在ASP.NET MVC中,却是另外一番情形. 以前只习惯使用IE浏览器,现在开发ASP.NET MVC程序,为了捕获到异常信息,Firefox的f ...
- asp.net mvc 全局权限过滤器及继成权限方法
全局权限过滤器 //----------------------------------------------------------------------- // <copyright f ...
- [Asp.net MVC]HandleErrorAttribute异常过滤器
摘要 在asp.net mvc中除了使用try...catch/finally来处理异常外,它提供了一种通过在Controller或者Action上添加特性的方式来处理异常. HandleErrorA ...
- Spring MVC全局异常后返回JSON异常数据
问题: 当前项目是作为手机APP后台支持,使用spring mvc + mybaits + shiro进行开发.后台服务与手机端交互是发送JSON数据.如果后台发生异常,会直接返回异常页面,显示异常内 ...
- asp.net core全局异常过滤并监控系统BUG将异常信息记录到日志
添加: using Dw.Util.Helper; using Microsoft.AspNetCore.Mvc.Filters; using System; using System.Collect ...
- WinDBg定位asp.net mvc项目异常崩溃源码位置
项目介绍:asp.net mvc + angular +iis(windows)+windows server 系统莫名崩溃 最近有个系统默认奇妙崩溃50x,服务整体变成无响应,当运维告知我只有重启应 ...
随机推荐
- cf-Round542-Div2-B(贪心)
题目链接:http://codeforces.com/contest/1130/problem/B 思路: 贪心题.定义结构体数组a,a[i].x[0],a[i].x[1]分别表示i出现的第一个下标和 ...
- python事件驱动的小例子
首先我们写一个超级简单的web框架 event_list = [] #这个event_list中会存放所有要执行的类 def run(): for event in event_list: obj = ...
- iOS 11 scroll滚动偏移,tableview偏移44,获取view的宽和高
1. tableview 的头部 有44的偏移量 1>.设置 tableview的 属性 tableView.scrollIndicatorInsets = UIEdgeInsets.zero ...
- 4-QT的程序打包发布(将QT5的工程项目打包成一个exe程序)
https://blog.csdn.net/windsnow1/article/details/78004265 最近,在学习QT5的过程中,想尝试着把自己写的工程程序给打包发布出来,在任何一台win ...
- Fragment----静态创建碎片
import android.os.Bundle; import android.app.Activity; import android.app.Fragment; import android.a ...
- conn not captured
线程 和 事件中 变量 not captured 把变量定义为 static 或者添加为全局变量(放在main之前)
- Byte字节与位
位(bit)字节(byte)一字节是8位所以2Byte是16位二进制
- 2.自己搭建的一个简易的ioc容器
1.persondao类namespace MyselfIoC{ public class PersonDao { public override string ToStri ...
- PacBio下机数据如何看?
一开始拿到三代测序的下机数据时,蒙了,readme ?三代测序的下机数据都有哪些,以及他们具体的格式是怎么样的(以sequel 平台为主). 测序过程 SMRTbell A adapter通用接头,两 ...
- 2018.09.27 codeforces1045A. Last chance(线段树优化建图+最大流)
传送门 看完题应该都知道是网络流了吧. 但是第二种武器直接建图会gg. 因此我们用线段树优化建图. 具体操作就是,对于这m个人先建一棵线段树,父亲向儿子连容量为inf的边,最后叶子结点向对应的人连容量 ...