“/”应用程序中的服务器错误。


无法找到资源。

说明: 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,所以也就捕捉不到了

  1. protected void Application_Error(object sender, EventArgs e)
  2. {
  3. Exception exception = Server.GetLastError();
  4. Response.Clear();
  5. HttpException httpException = exception as HttpException;
  6. RouteData routeData = new RouteData();
  7. routeData.Values.Add("controller", "Error");
  8. if (httpException == null)
  9. {
  10. routeData.Values.Add("action", "Index");
  11. }
  12. else //It's an Http Exception, Let's handle it.
  13. {
  14. switch (httpException.GetHttpCode())
  15. {
  16. case 404:
  17. // Page not found.
  18. routeData.Values.Add("action", "HttpError404");
  19. break;
  20. case 500:
  21. // Server error.
  22. routeData.Values.Add("action", "HttpError500");
  23. break;
  24. // Here you can handle Views to other error codes.
  25. // I choose a General error template
  26. default:
  27. routeData.Values.Add("action", "General");
  28. break;
  29. }
  30. }
  31. // Pass exception details to the target error View.
  32. routeData.Values.Add("error", exception.Message);
  33. // Clear the error on server.
  34. Server.ClearError();
  35. // Call target Controller and pass the routeData.
  36. IController errorController = new WEB.Controllers.ErrorController();
  37. errorController.Execute(new RequestContext(
  38. new HttpContextWrapper(Context), routeData));
  39. }

把这段代码放到 Global.asax 中,并且新建一个 Controller 叫做 Error

  1. namespace MVC.Controllers
  2. {
  3. public class ErrorController : Controller
  4. {
  5. public ActionResult Index(string error)
  6. {
  7. ViewData["Title"] = "WebSite 网站内部错误";
  8. ViewData["Description"] = error;
  9. return View("Index");
  10. }
  11. public ActionResult HttpError404(string error)
  12. {
  13. ViewData["Title"] = "HTTP 404- 无法找到文件";
  14. ViewData["Description"] = error;
  15. return View("Index");
  16. }
  17. public ActionResult HttpError500(string error)
  18. {
  19. ViewData["Title"] = "HTTP 500 - 内部服务器错误";
  20. ViewData["Description"] = error;
  21. return View("Index");
  22. }
  23. public ActionResult General(string error)
  24. {
  25. ViewData["Title"] = "HTTP 发生错误";
  26. ViewData["Description"] = error;
  27. return View("Index");
  28. }
  29. }
  30. }
这样,就可以捕捉所有错误了。

但其实,这样也不是完美的,因为如果你参考了我第一个问题中,在IIS6下不修改IIS设置,运行了MVC,那当后缀名不是.aspx的时候,错误不会被捕捉

因为这时候输入的地址根本没有交给网站来处理,IIS直接抛出了错误,因为IIS认为这个后缀名不是你所能执行的.

MVC中的错误过滤器无法拦截URL路径错误的解决办法的更多相关文章

  1. 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 ...

  2. Windows Server 2008 R2中IIS7.5配置完网站权限不足问题的解决办法:

    Windows Server 2008 R2中IIS7.5配置完网站权限不足问题的解决办法:常见问题:HTTP 错误 500.0 - Internal Server Error无法显示页面,因为发生内 ...

  3. 远程连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法

    远程连接MySQL错误"plugin caching_sha2_password could not be loaded"的解决办法 问题描述: 今天在阿里云租了一个服务器,当我用 ...

  4. 【转】Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)

    原文网址:http://www.blogjava.net/anchor110/articles/355699.html 1.在工程下新建lib文件夹,将需要的第三方包拷贝进来.2.将引用的第三方包,添 ...

  5. Tortoise-SVN 出现“unable to connect to a repository at url no element found”解决办法

    安装要SVN server服务器后,建立自己的Repositories,创建自己的项目文件夹 如,https://xxxxxxxxxx.com:8443/ 安装Tortoise-svn进行设置目标链接 ...

  6. HTML中的select下拉框内容显示不全的解决办法

    HTML中的select下拉框内容显示不全的解决办法 今天,我遇到这样一个问题:查询栏中的下拉框中的内容过长,导致部分被覆盖了. 查询了一些资料,有的说用函数控制,有的说用事件控制,有的看不懂,有的实 ...

  7. 【转】Android Fragment中使用SurfaceView切换时闪一下黑屏的解决办法

    重构了下之前自己的一个新闻客户端,全部使用了Fragment来进行页面切换,只有一个入口Activity作为程序的启动Activity,其中有一个界面需要调用摄像头识别二维码, 于是就会用到Surfa ...

  8. idea中Entity实体中报错:cannot resolve column/table/...解决办法。

    idea中Entity实体中报错:cannot resolve column/table/...解决办法. 若idea中Entity实体中报错: cannot resolve column.... c ...

  9. mvc中让路由忽略带后缀的路径文件

    public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/ ...

随机推荐

  1. js获取url参数的方法

    js获取url参数的方法有很多. 1.正则分析 function getQueryString(name) { var reg = new RegExp("(^|&)" + ...

  2. BackgroundWorker 后台进程控制窗体label、richtextbook内容刷新

    昨天写了一个从文章中提取关键词的程序,写完处理的逻辑后又花了好几个小时在用户友好性上.加了几个progressBar,有显示总进度的.有显示分布进度的..因为程序要跑好几个小时才能执行好,只加个总进度 ...

  3. 【转载】NSURLSession教程

    原文:http://www.raywenderlich.com/51127/nsurlsession-tutorial 查理·富尔顿 2013年10月9日, 推特 注意从雷 :这是一个缩写版的一章 i ...

  4. iOS开发-单例模式的解读

    现在网上的有很多人写单例模式,一个很基本的东西但是版本也有很多,新人看了难免有些眼花缭乱的感觉.自己最新比较闲,也过来写一些自己的心得. 在往下看之前,我们要明白一点,那就是在什么情况下我们才要用到单 ...

  5. java集合之Map_keySet_entrySet

    keySet()的使用:该方法返回的是一个key对象的Set<E>集合,通过该set集合的对象调用iterator方法返回一个迭代器,通过该迭代器可访问到set集合里面的key 再调用Ha ...

  6. (原) c++ 杂

    Declaration of variables   C++ is a strongly-typed language, and requires every variable to be decla ...

  7. 字符串分割与数组的分割 split()VSsplice()&slice()

    一.作用对象 1.split()方法是对字符串的操作:splice()和slice()是对数组的操作.slice()也可用于字符串. 二.参数 1.split(separator,howmany) 参 ...

  8. docker镜像与容器存储结构分析

    注意:转载请注明出处:http://www.programfish.com/blog/?p=9 Docker是一个开源的应用容器引擎,主要利用linux内核namespace实现沙盒隔离,用cgrou ...

  9. Robberies(HDU 2955 DP01背包)

    Robberies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  10. org.quartz.impl.jdbcjobstore.LockException

    说明:在使用Tomcat6.0.32+Spring3.05+Quartz1.8.6+Mysql5.5.9 此项目在我本机上没有问题,当我把mysql 脚本导入到服务器上,将数据源配置修改为服务器对应的 ...