Asp.net mvc 当路由不满足时抛出404错误

Asp.net mvc 当路由不满足时抛出404错误,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,使用默认路由 routes.MapRoute( "Admin", // Route name "Admin/{action}", // URL with parameters new { controller = "Admin", action = "Index" } // Parameter defaults

使用默认路由

  routes.MapRoute(
      "Admin",                                              // Route name
      "Admin/{action}",                           // URL with parameters
      new { controller = "Admin", action = "Index" }  // Parameter defaults
  );
我们的应用程序中有很多路由(大约90%)正在运行,所以这很好

现在,当用户输入
/logon/squaredroute
时,MVC当然会抛出一个错误,因为我的
logoncontroller
中没有
squaredroute
操作

使用
global.asax.cs
中的catch-all异常处理程序,我无法找到路由错误(我称之为路由错误)和另一个错误(在代码的其余部分抛出)之间的区别

我想区分错误的类型,因为当路由给出错误时,大部分时间是404错误,我想将用户重定向到404页面,而不是普通的、通用的错误页面

一个解决方案是为所有页面创建所有路由,取消现有的默认路由,并实现一个全面路由,但我不希望为每个url创建单独的路由


还有其他方法吗?

测试你抓到的是不是一个,如果是,用上面的方法看看是不是404。

测试你抓到的是不是一个,如果是,用上面的方法看看是不是404。

谢谢Darin,这很有效!在实现这一点之前,有一个相关的问题:您认为更好的解决方案是什么:对每个页面硬编码100条路由,一条catch-all路由重定向到404页面,或者在错误处理程序中硬编码1条“generic”路由和catch-all“error”url?后者的“问题”是,当应用程序充斥着错误的URL时,应用程序将抛出大量异常(正如我一直读到的那样昂贵)........................从时间/可维护性的角度来看,“每个页面100条硬编码路由”听起来很昂贵。谢谢Darin,这是可行的!在实现这一点之前,有一个相关的问题:您认为更好的解决方案是什么:对每个页面硬编码100条路由,一条catch-all路由重定向到404页面,或者在错误处理程序中硬编码1条“generic”路由和catch-all“error”url?后者的“问题”是,当应用程序充斥着错误的URL时,应用程序将抛出大量异常(正如我经常读到的那样昂贵)…“每个页面硬编码100条路由”从时间/可维护性的角度来说听起来很昂贵。