ASP.NET MVC中的错误-友好的处理方法
转自:http://blog.csdn.net/lizhao1226/article/details/6367400
“/”应用程序中的服务器错误。
无法找到资源。
说明: HTTP 404。您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确。
请求的 URL: /sdf
版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.1
//--------------------------------------------------------------------------------------------------------------------------------------------
MVC中,有一个Filter可以捕捉错误,但是它的用法是利用Attribute来实现的,而且只能加在Controller和Action上,所以不能捕捉别出的错误
其实理论上所有的错误肯定产生于Controller中,但有2种情况下,就不会被捕捉了
1、页面不存在的时候,找不到对应的Controller,那没有任何Controller被执行,所以自然也不会捕捉到错误了
2、在 IAuthorizationFilter 下发生错误的时候,错误捕捉代码在IExceptionFilter中,而IAuthorizationFilter的优先权高于IExceptionFilter,所以也就捕捉不到了
- protected void Application_Error(object sender, EventArgs e)
- {
- Exception exception = Server.GetLastError();
- Response.Clear();
- HttpException httpException = exception as HttpException;
- RouteData routeData = new RouteData();
- routeData.Values.Add("controller", "Error");
- if (httpException == null)
- {
- routeData.Values.Add("action", "Index");
- }
- else //It's an Http Exception, Let's handle it.
- {
- switch (httpException.GetHttpCode())
- {
- case 404:
- // Page not found.
- routeData.Values.Add("action", "HttpError404");
- break;
- case 500:
- // Server error.
- routeData.Values.Add("action", "HttpError500");
- break;
- // Here you can handle Views to other error codes.
- // I choose a General error template
- default:
- routeData.Values.Add("action", "General");
- break;
- }
- }
- // Pass exception details to the target error View.
- routeData.Values.Add("error", exception.Message);
- // Clear the error on server.
- Server.ClearError();
- // Call target Controller and pass the routeData.
- IController errorController = new WEB.Controllers.ErrorController();
- errorController.Execute(new RequestContext(
- new HttpContextWrapper(Context), routeData));
- }
把这段代码放到 Global.asax 中,并且新建一个 Controller 叫做 Error
- namespace MVC.Controllers
- {
- public class ErrorController : Controller
- {
- public ActionResult Index(string error)
- {
- ViewData["Title"] = "WebSite 网站内部错误";
- ViewData["Description"] = error;
- return View("Index");
- }
- public ActionResult HttpError404(string error)
- {
- ViewData["Title"] = "HTTP 404- 无法找到文件";
- ViewData["Description"] = error;
- return View("Index");
- }
- public ActionResult HttpError500(string error)
- {
- ViewData["Title"] = "HTTP 500 - 内部服务器错误";
- ViewData["Description"] = error;
- return View("Index");
- }
- public ActionResult General(string error)
- {
- ViewData["Title"] = "HTTP 发生错误";
- ViewData["Description"] = error;
- return View("Index");
- }
- }
- }
但其实,这样也不是完美的,因为如果你参考了我第一个问题中,在IIS6下不修改IIS设置,运行了MVC,那当后缀名不是.aspx的时候,错误不会被捕捉
因为这时候输入的地址根本没有交给网站来处理,IIS直接抛出了错误,因为IIS认为这个后缀名不是你所能执行的.
ASP.NET MVC中的错误-友好的处理方法的更多相关文章
- ASP.NET MVC中的错误处理
ASP.NET MVC中的错误的错误处理跨越了两个主要领域:程序异常和路由异常的处理.前者是关于在控制器和视图中捕获错误的;而后者更多是有关重定向和HTTP错误的. 1.在WebConfig中把过滤器 ...
- 如何在asp.net mvc中添加自定义的HTML辅助种方法
很久没在博客园发表文章了,今天来总结一下如何在asp.net mvc中添加自定义的HTML辅助方法.我们现在设计这么一个目前,利用自定义的HTML方法来渲染一个普通的img标记.直接进入主题吧: 首先 ...
- Asp.Net MVC中记录错误日志保存到本地txt文件
为了方便查询系统出错弄个错误日志出来对于维护运维来说是很有必要的. 1.在Asp.Net MVC项目中的App_Start添加一个用于处理异常类的文件ErrorLog让他继承HandleErrorAt ...
- Asp.Net MVC中捕捉错误路由并设置默认Not Found页面。
在Global中写一个Application_Error捕捉错误路由并重定向到Not Found页面.这里是全局性抓取错误路由,此处还可以写由错误路由导致访问失败的日志记录. protected vo ...
- 在ASP.NET MVC中加载部分视图的方法及差别
在视图里有多种方法可以加载部分视图,包括Partial() .Action().RenderPartial().RenderAction().RenderPage()方法.下面说明一下这些方法的差别. ...
- ASP.NET MVC中默认Model Binder绑定Action参数为List、Dictionary等集合的实例
在实际的ASP.NET mvc项目开发中,有时会遇到一个参数是一个List.Dictionary等集合类型的情况,默认的情况ASP.NET MVC框架是怎么为我们绑定ASP.NET MVC的Actio ...
- asp.net MVC中使用Html.Checkbox提示该字符串未被识别为有效的布尔值错误的解决方法
在asp.net MVC中使用Html.CheckBox提交后出现该字符串未被识别为有效的布尔值错误,或从类型“System.String”到类型“System.Boolean”的参数转换失败. 错误 ...
- ASP.NET MVC中Log4Net记录错误日志的使用
第一.在管理NuGet程序包 =>下载 Log4Net 第二.在web.config配置Log4Net 1:在<configuration>节点下 <configSection ...
- 关于 ASP.NET MVC 中的视图生成
在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通 ...
随机推荐
- Charlie's Change_完全背包&&路径记录
Description Charlie is a driver of Advanced Cargo Movement, Ltd. Charlie drives a lot and so he ofte ...
- 在windows下安装GIT
Git是一个免费的.开源的版本控制软件.在Windows上安装git,一般为msysgit,官方下载地址为:http://code.google.com/p/msysgit/downloads/lis ...
- M2: XAML Controls
本小节介绍如何在界面上添加简单的XAML Controls, 本例中我们用到了Grid, TextBlock, Button, 和StackPanel控件.XAML自身所有的控件都声明在Windows ...
- magento 去掉index.php .html
首先应该确保你的服务器环境,达到了magento的运行需求,若你是使用的是magento专用空间就不必担心了,若不是请查看我以前的文章,检测你的运行环境(http://www.hellokeykey. ...
- 第一个Sprint冲刺第八天
讨论成员:邵家文.李新.朱浩龙.陈俊金 讨论地点:宿舍 解决问题:计分问题 燃尽图
- SpringMVC 产品笔记
假设我是springMVC的产品经理,我会怎么做? 恩,题目太大,能力不够,缓一缓. http://jinnianshilongnian.iteye.com/category/231099 http: ...
- Kubuntu麦克风音频无声音
前段时间买了新本,装了双系统,win8和kubuntu 14.04,使用的过程感觉都不错,因为平时玩游戏看视频是用win8,但最近打算在kubuntu上听音乐时,发现音频没有声音,麦克风也没有声音,这 ...
- UI学习笔记---第二天
程序的执行流程 一.自定义视图 自定义UILebal-UITextField视图 ⾃定义视图:系统标准UI之外,⾃己组合而出的新的视图. 实际开发中,我们还需⾃定义视图.积累⾃己的代码库.⽅便开发. ...
- div排序 根据《input》
jquery代码如下$(function(){//alert($("input").length); var arr=Array(); $("input").e ...
- POJ 2387 Til the Cows Come Home
题目链接:http://poj.org/problem?id=2387 Til the Cows Come Home Time Limit: 1000MS Memory Limit: 65536K ...