MVC中的错误过滤器无法拦截URL路径错误的解决办法
“/”应用程序中的服务器错误。
无法找到资源。
说明: 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认为这个后缀名不是你所能执行的.
MVC中的错误过滤器无法拦截URL路径错误的解决办法的更多相关文章
- CAS (10) —— JBoss EAP 6.4下部署CAS时出现错误exception.message=Error decoding flow execution的解决办法
CAS (10) -- JBoss EAP 6.4下部署CAS时出现错误exception.message=Error decoding flow execution的解决办法 jboss版本: jb ...
- Windows Server 2008 R2中IIS7.5配置完网站权限不足问题的解决办法:
Windows Server 2008 R2中IIS7.5配置完网站权限不足问题的解决办法:常见问题:HTTP 错误 500.0 - Internal Server Error无法显示页面,因为发生内 ...
- 远程连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法
远程连接MySQL错误"plugin caching_sha2_password could not be loaded"的解决办法 问题描述: 今天在阿里云租了一个服务器,当我用 ...
- 【转】Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)
原文网址:http://www.blogjava.net/anchor110/articles/355699.html 1.在工程下新建lib文件夹,将需要的第三方包拷贝进来.2.将引用的第三方包,添 ...
- Tortoise-SVN 出现“unable to connect to a repository at url no element found”解决办法
安装要SVN server服务器后,建立自己的Repositories,创建自己的项目文件夹 如,https://xxxxxxxxxx.com:8443/ 安装Tortoise-svn进行设置目标链接 ...
- HTML中的select下拉框内容显示不全的解决办法
HTML中的select下拉框内容显示不全的解决办法 今天,我遇到这样一个问题:查询栏中的下拉框中的内容过长,导致部分被覆盖了. 查询了一些资料,有的说用函数控制,有的说用事件控制,有的看不懂,有的实 ...
- 【转】Android Fragment中使用SurfaceView切换时闪一下黑屏的解决办法
重构了下之前自己的一个新闻客户端,全部使用了Fragment来进行页面切换,只有一个入口Activity作为程序的启动Activity,其中有一个界面需要调用摄像头识别二维码, 于是就会用到Surfa ...
- idea中Entity实体中报错:cannot resolve column/table/...解决办法。
idea中Entity实体中报错:cannot resolve column/table/...解决办法. 若idea中Entity实体中报错: cannot resolve column.... c ...
- mvc中让路由忽略带后缀的路径文件
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/ ...
随机推荐
- mvc分页生成静态页,mvc生成静态页
http://blog.csdn.net/xxj_jing/article/details/7899125 分页生成静态页 http://www.cnblogs.com/luanyilin/archi ...
- C#管理IIS中的站点
原文:http://www.knowsky.com/534237.html Microsoft自Windows Vista一起发布了IIS 7.0,这个已经是去年的话题了,随后,由.NET开发的Web ...
- Spring连接MySQL、Oracle和SQL Server的数据库运动连接属性
在配置文件applicationContext.xml设置如下:<?xml version="1.0" encoding="UTF-8"?>< ...
- vmware9安装centos和Mac经验总结
其实以前安装过,但是这次安装发现还是很陌生 主要是因为以下几点vm11下载的最新版本结果不支持用vm-Mac激活包一直激活不成功,所以只好用vm9来进行,中间的细节操作就是要停止的那几项VMware服 ...
- 【iOS开发】collectionView 瀑布流实现
一.效果展示 二.思路分析 1> 布局的基本流程 当设置好collectionView的布局方式之后(UICollectionViewFlowLayout),当系统开始布局的时候,会调用 pre ...
- OSA-MAC: A MAC Protocol for Opportunistic Spectrum Access in Cognitive Radio Networks
This full text paper was peer reviewed at the direction of IEEE Communications Society subject matte ...
- c语言中内存对齐问题
在最近的项目中,我们涉及到了“内存对齐”技术.对于大部分程序员来说,“内存对齐”对他们来说都应该是“透明的”.“内存对齐”应该是编译器的“管辖范围”.编译器为程序中的每个“数据单元”安排在适当的位置上 ...
- tc令牌桶限速心得
一.实验拓扑与实验现象 实验拓扑如图所示,在①号机上发送数据,③号机上接受数据,同时在④号机的eth1与eth2网口限制速率为115200kbps,命令如下 tc qdisc add dev eth1 ...
- openstack configure
<一,nova.conf配置文件配置 hypervisors compute_driver = 值> 1,kvm/qemu Hypervisor OpenStack nova comput ...
- ACM学习-POJ-1143-Number Game
菜鸟学习ACM,纪录自己成长过程中的点滴. 学习的路上,与君共勉. ACM学习-POJ-1143-Number Game Number Game Time Limit: 1000MS Memory ...