1.配置文件:webConfig中配置经常出现的错误页面:

<system.web>节点下添加 <customErrors>节点,在 <customErrors>节点下配置<error>错误信息,如下:

 <system.web>
<customErrors mode="On" defaultRedirect="~/Html_Tools/Html_UI/Error_404.htm">
<error statusCode="404" redirect="~/Html_Tools/Html_UI/Error_404.htm" />
<error statusCode="500" redirect="~/Html_Tools/Html_UI/Error_500.htm" />
</customErrors>
<!--发布时改为false,开发时为true-->
<compilation debug="true" targetFramework="4.6" />
<!--配置文件传输大小限制-->
<httpRuntime maxRequestLength="51200" targetFramework="4.6" />
</system.web>

2.自定义异常处理错误页面:

ASP.Net MVC3中如果配置文件出错了,怎么跳转到自定义的错误页,现在参考网上的档案是说

添加 如下配置文件,并且在路径Views/Shared/下添加Error页面,测试下没有用的,请大家看看有什么好的建议啊,谢谢了啊!

<system.web>

<customErrors mode="On" defaultRedirect="/Base/Error/">
   </customErrors>

</system.web>

MVC根本不会理睬web.config中的customErrors,默认是由HandleErrorAttribute处理的,显示的是/Views/Shared/Error.cshtml中内容。

mvc中,可以用过滤器来实现异常处理

1.在Global.asax文件,

       //1.在Global.asax文件中
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
filters.Add(new ExceptionFilterAttribute()); //自己定义的过滤器
}
/// <summary>
/// 2.自己定义的过滤器 处理异常跳转错误页
/// 捕获异常 跳转到错误页
/// </summary>
public class ExceptionFilterAttribute : HandleErrorAttribute {
public override void OnException(ExceptionContext filterContext) {
base.OnException(filterContext);
string excepitonInfo = filterContext.Exception.ToString();
//LogHelper.OutputLog(excepitonInfo);//记录日志
filterContext.HttpContext.Response.Redirect("~/Html_Tools/Html_UI/Error.htm");
}
}

当ASP.NET MVC程序出现了异常,怎么处理更加规范?

1. 最简单的方法是设置<customErrors/>节点

<customErrors>节点用 于定义一些自定义错误信息的信息。此节点有Mode和defaultRedirect两个属性,其中defaultRedirect属性是一个可选属性, 表示应用程序发生错误时重定向到的默认URL,如果没有指定该属性则显示一般性错误。Mode属性是一个必选属性,它有三个可能值,它们所代表的意义分别 如下:
On 表示在本地和远程用户都会看到自定义错误信息。
Off 禁用自定义错误信息,本地和远程用户都会看到详细的错误信息。
RemoteOnly 表示本地用户将看到详细错误信息,而远程用户将会看到自定义错误信息。

这里有必要说明一下本地用户和远程用户的概念。当
我们访问asp.net应用程时所使用的机器和发布asp.net应用程序所使用的机器为同一台机器时成为本地用户,反之则称之为远程用户。在开发调试阶
段为了便于查找错误Mode属性建议设置为Off,而在部署阶段应将Mode属性设置为On或者RemoteOnly,以避免这些详细的错误信息暴露了程
序代码细节从而引来黑客的入侵。

<error>子节点

在<customErrors>节点
下还包含有<error>子节点,这个节点主要是根据服务器的HTTP错误状态代码而重定向到我们自定义的错误页面,注意要
使<error>子节点下的配置生效,必须将<customErrors>节点节点的Mode属性设置为“On”。下面是一个例
子:

    <customErrors mode="On" defaultRedirect="~/Html_Tools/Html_UI/Error_404.htm">
<error statusCode="404" redirect="~/Html_Tools/Html_UI/Error_404.htm" />
<error statusCode="500" redirect="~/Html_Tools/Html_UI/Error_500.htm" />
</customErrors>

在上面的配置中如果用户访问的页面不存在就会跳转到404.htm页面,如果服务端的内部错误的页面则会跳转到500.htm页面,500.htm和404.htm页面都是我们自己添加的页面,我们可以在页面中给出友好的错误提示。

2. 使用过滤器HandleErrorAttribute

随着ASP.NET MVC版本的更新,出现了HandleErrorAttribute,使用Filter以AOP的思想实现了针对于Action的异常处理。使用此 Filter后,当程序中出现异常的时候,会去封装这些异常信息,然后路由自动转到该Controller对应的Error.cshtml中,如果此路径 下没有改文件,则会到shared目录中寻找此文件。另外一个相关的是在Global.asax中的protected void Application_Error(object sender, EventArgs e)方法,是捕捉异常的最后一道防线,也就是说,这是最高层次的异常捕获处理逻辑。 使用HandleErrorAttribute后,找到了Error.cshtml,则此时异常已经被捕获处理,所以不会再次被 Application_Error捕获处理。此外,可以通过@model HandleErrorInfo 在Error.cshtml中定制显示异常信息。有一点需要注意的是,HandleErrorAttribute是在customErrors基础之上的,如果想使用HandleErrorAttribute,customErrors的Mode必须要设置为On或RemoteOnly. 否则,HandleErrorAttribute将不起作用。

3. 自定义显示路径

如果遇到异常后不单单是要自定义异常显示,而且还 需要进行日志记录。此时,可以通过继承扩展HandleErrorAttribute来实现新的Filter,然后在lobal.ascx中对所有的 Action进行注册,filters.Add(new MyHandleErrorAttribute()).在这里详细说明一下另一种方式。我们可以写一个专门的Controller和Action来进行异 常发生时的路由设置.

    public class UtilityController : Controller
{
public ActionResult Error()
{
return View();
} public ActionResult PageNotFound()
{
return View();
}
}

当出现异常的时候,把异常抛到最顶端,由Application_Error统一处理。这里的统一处理就包括,记录日志,重新进行页面定向等。

    protected void Application_Error(object sender, EventArgs e)
{
var ex = Server.GetLastError();
Log.Error(ex); //记录日志信息
var httpStatusCode = (ex is HttpException) ? (ex as HttpException).GetHttpCode() : ; //这里仅仅区分两种错误
var httpContext = ((MvcApplication)sender).Context;
httpContext.ClearError();
httpContext.Response.Clear();
httpContext.Response.StatusCode = httpStatusCode;
var shouldHandleException = true;
HandleErrorInfo errorModel; var routeData = new RouteData();
routeData.Values["controller"] = "Utility"; switch (httpStatusCode)
{
case :
routeData.Values["action"] = "PageNotFound";
errorModel = new HandleErrorInfo(new Exception(string.Format("No page Found", httpContext.Request.UrlReferrer), ex), "Utility", "PageNotFound");
break; default:
routeData.Values["action"] = "Error";
Exception exceptionToReplace = null; //这里使用了EntLib的异常处理模块的一些功能
shouldHandleException = ExceptionPolicy.HandleException(ex, "LogAndReplace", out exceptionToReplace);
errorModel = new HandleErrorInfo(exceptionToReplace, "Utility", "Error");
break;
} if (shouldHandleException)
{
var controller = new UtilityController();
controller.ViewData.Model = errorModel; //通过代码路由到指定的路径
((IController)controller).Execute(new RequestContext(new HttpContextWrapper(httpContext), routeData));
}
}

原文参考引自:http://blog.csdn.net/zjlovety/article/details/48734791

MVC 自定义异常错误页面处理的更多相关文章

  1. 在ASP.NET MVC自定义错误页面

    异常处理跳转页面 第一步,在项目的Web.config文件中找到节点<system.web> 在此节点下添加配置(Error为定义的控制器也可以多添加些error标签用于区分不同的错误) ...

  2. ASP.NET MVC 自定义错误页面心得

    自定义错误页面的目的,就是为了能让程序在出现错误/异常的时候,能够有较好的显示体验. 所以,首先要先了解,我们可以在哪里捕获异常. 当程序发生错误的时候,我们可以在两个地方捕获: Global里面的A ...

  3. MVC 自定义 错误页面

    很多时候,我们需要自定义错误页面,用来当发生异常后引导用户进入一个比较友好的错误页面. 在这里,我归结一下我常用的2个方案 1   通过Global.asax 文件来处理异常信息(这个不管是 MVC ...

  4. MVC自定义错误页面

    MVC异常处理主要有三种方案:1.基于HandleErrorAttribute重写OnException方法:2.基于Global.apsx添加Application_Error方法:3.直接在Web ...

  5. Asp.net MVC 自定义错误页面以及return HttpNotFound遇到的问题

    今天在处理mvc 项目404和500页面时,发现我以前比较喜欢用的Return HttpNotFound()没有跳转到我在webconfig中配置的自定义404页面,而且也不会去执行Global中的A ...

  6. Spring MVC自定义错误页面

    在web.xml中添加: <error-page(其他属性404...省略咯)> <location>/error</location> </error-pa ...

  7. .net mvc 自定义错误页面

    1.Global.asax.cs中,加入如下代码 protected void Application_Error(Object sender, EventArgs e) { Exception ex ...

  8. ASP.NETMVC自定义错误页面真的简单吗?

    Note:文章前半部分翻译自 http://benfoster.io/blog/aspnet-mvc-custom-error-pages ,着急的可直接看总结~ 如果你在设置asp.net mvc自 ...

  9. Spring MVC错误页面配置

    当前SpringMVC非常流行,在大多数情况,我们都需要自定义一些错误页面(例如:401, 402, 403, 500...),以便更友好的提示.对于spring mvc,这些当然是支持自定义的,sp ...

随机推荐

  1. Longest Substring Without Repeating Characters ---- LeetCode 003

    Given a string, find the length of the longest substring without repeating characters. For example, ...

  2. 【LeetCode】172. Factorial Trailing Zeroes

    Factorial Trailing Zeroes Given an integer n, return the number of trailing zeroes in n!. Note: Your ...

  3. 数据库 SQL优化

    1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  4. Entityframework批量删除

    UI层 <a href="#" onclick="DelData(0);return false;" id="a_del" class ...

  5. I.MX6 ubuntu-core-14.04 Apache php mysql Qt5

    /*************************************************************************** * I.MX6 ubuntu-core-14. ...

  6. Ubuntu14.04 64位运行32位程序

    最近公司新增的机器安装Ubuntu14.04 64bit导致之前在32bit下编译的Qt工具软件无法运行. 于是google的了一下找到一些解决办法,但不能保证全部32bit的Qt程序都能正常,测试了 ...

  7. 使用u32过滤器设置基于mac地址的下载限制

    u32过滤器一般使用ip地址作为匹配规则,但按照其定义,它可以匹配ip包头的任意地址,这里使用mac地址限制局域网的下载速度,避免客户端修改ip后其下载速度得不到控制.tc qdisc del dev ...

  8. 行为识别笔记:improved dense trajectories算法(iDT算法)(转载)

    iDT算法是行为识别领域中非常经典的一种算法,在深度学习应用于该领域前也是效果最好的算法.由INRIA的IEAR实验室于2013年发表于ICCV.目前基于深度学习的行为识别算法效果已经超过了iDT算法 ...

  9. ZOJ 1240 IBM Minus One

    /* You may have heard of the book '2001 - A Space Odyssey' by Arthur C. Clarke, or the film of the s ...

  10. jni数据传递——会不断的更新,测试没有问题,再整理进来。

    工作中遇到了ndk编程,其实核心就是java和本地的数据交互.现把所有数据类型的传递写成demo. 1,ini数组传递  我们实现传递8个数值过去,然后本地将八个数值放到数组,返回. java代码: ...