今天碰到了一个不可思议的bug,新增的controller中任何action都无法访问,都是返回404错误。一般这种错误要么是拼写错误,要么是不小心给action加了post属性,但是经过初步的排查,没有发现问题。而原有的controller中任何action都访问正常,新增的action也没有问题,但是换到新创建的那个controller中,问题就出现。于是问题定位在新增的那个controller中。于是翻开mvc的教程,仔细回顾了一下MVC中路由定位controller和action的过程,也没发现问题。最后仔细比对了一下代码,居然发现新旧controller的命名空间不一样,然后有查看了实现AreaRegistration的注册类iRecruiteAreaRegistration,只要controller的命名空间和iRecruiteAreaRegistration的命名空间一致的,都能正常寻找到action。

  仔细看了一下MVC2中关于area注册路由的实现方式,确定area中的controller、action的路由跟命名空间是紧密联系在一起的。

  MVC2中新增的area的路由也是在网站启动的时候注册的,即global的start方法中执行的,调用的方法是 AreaRegistration.RegisterAllAreas();这个方法遍历程序集中个继承了AreaRegistration类的类型,然后逐个调用这些类型的RegisterArea方法。一个常见的AreaRegistration类型如下。通常如果通过visual studio添加的area都自动生成了这个类。(我这里的area是手动生成的)。那么areaRegistration会关注哪些controller呢?实际上AreaRegistration类型会将其所在的命名空间保存在DataTokens["Namespaces"]中,在接收请求的时候就只会在这些命名空间或子空间中寻找controller,如果命名空间写错了,当然就无法识别了。因此实际上area注册仅仅起到的作用是,将area的名字和命名空间关联起来。因此如果要导航area中的controller必须首先提供area名字,这样就不会找到其他命名空间下的controller了。

文字描述比较多,具体可参考Apress.Pro.ASP.NET.MVC.2.Framework一书中Chapter8关于urls和routes的描述,非常的详细。

View Code

 1 namespace Baza.Ats.Areas.iRecruite
 2 {
 3     public class iRecruiteAreaRegistration : AreaRegistration
 4     {
 5         public override string AreaName
 6         {
 7             get
 8             {
 9                 return "iRecruite";
10             }
11         }
12 
13         public override void RegisterArea(AreaRegistrationContext context)
14         {
15             context.MapRoute(
16                 "iRecruite_default",
17                 "iRecruite/{controller}/{action}/{id}",
18                 new { action = "Index", id = UrlParameter.Optional }
19             );
20         }
21     }
22 }

转载于:https://www.cnblogs.com/shenba/archive/2011/11/24/2262245.html

MVC2中Area的路由注册实现相关推荐

  1. VS2013和VS2015中MVC 区域路由匹配顺序相反

    创建测试工程 分别在vs2013和vs2015中创建mvc项目,并创建First.Second.Three三个Area,每个Area下面创建一个HomeController和Index视图.修改Rou ...

  2. ASP.NET Web API WebHost宿主环境中管道、路由

    ASP.NET Web API WebHost宿主环境中管道.路由 前言 上篇中说到ASP.NET Web API框架在SelfHost环境中管道.路由的一个形态,本篇就来说明一下在WebHost环境 ...

  3. ASP.NET Web API Selfhost宿主环境中管道、路由

    ASP.NET Web API Selfhost宿主环境中管道.路由 前言 前面的几个篇幅对Web API中的路由和管道进行了简单的介绍并没有详细的去说明一些什么,然而ASP.NET Web API这 ...

  4. ASP.NET Web API 中的属性路由

    为什么要有属性路由 基于约定路由的一个优点是模板在单个位置中定义,并且路由规则在所有控制器上一致的应用.但是基于约定的路由很难支持RESTFUl 中常见的某些URI模式.例如,资源通常包含子资源,客户 ...

  5. Win XP中恢复受损的注册表

    使用Windows 98的时代,如果注册表受损,我们可以启动到DOS下,然后用ScanReg来扫描和恢复受损的注册表,不过在Windows XP中这个方法就失效了.不过XP也有适用于它的恢复方法,下面 ...

  6. mvc 路由 .html 404,部署ASP.NET的MVC网站到IIS 6.0中,发现路由无法解析而出现404错误解决方案...

    部署ASP.NET MVC应用到IIS 6总是会引起混乱在第一.你已经编码在Visual Studio 2008中,看到你可爱干净的URL中内置的Web服务器很好地工作,你坚持了一些代码的Window ...

  7. 【夯实Spring Cloud】Spring Cloud中的Eureka服务注册与发现详解

    本文属于[夯实Spring Cloud]系列文章,该系列旨在用通俗易懂的语言,带大家了解和学习Spring Cloud技术,希望能给读者带来一些干货.系列目录如下: [夯实Spring Cloud]D ...

  8. 路由器中的静态路由设置

    静态路由设置实例解析 随着宽带接入的普及,很多家庭和小企业都组建了局域网来共享宽带接入.而且随着局域网规模的扩大,很多地方都涉及到2台或以上路由器的应用.当一个局域网内存在2台以上的路由器时,由于其下 ...

  9. Go语言WEB框架:路由注册

    路由注册 路由注册用于建立URL路径与处理器函数(也可以叫控制器函数)的对应关系.一条路由规则由三部分组成: http请求方法 url路径 处理器函数 以下代码注册了一个处理器函数:Hello,当用户 ...

最新文章

  1. 利用JS中window.showModalDialog()详解
  2. RHCSA 解析-01
  3. 西藏监狱首次奏响《婚礼进行曲》
  4. java-静态-单例-继承
  5. 使用 Apache Lucene 搜索文本——轻松为应用程序构建搜索和索引功能
  6. TypeScript 里的枚举类型 enum
  7. c语言python零基础教学_编程零基础应当如何开始学习 Python?
  8. C语言 几种排序方法(冒泡、选择、插入、归并、快速)
  9. 双十一有“后悔药”了?淘宝88VIP将推出退货秒退款服务
  10. FFmpeg wav转pcm(十一)
  11. mysql与oracle存储过程_MySQL与Oracle差异比较之五存储过程Function
  12. 黑马程序员_java基础笔记(03)...面向对象
  13. SQL server 数据库调用远程数据库存储过程的实现方法
  14. html网页计算器代码form,HTML网页之计算器代码
  15. Android之ListView
  16. 怎么注销百度云服务器账号,百度网盘如何注销账号?百度网盘注销账号的方法步骤...
  17. 3GPP最新提案查询方法
  18. ubuntu20编译Gmssl时,“version OPENSSL_1_1_0d not defined”问题的较好解决办法
  19. 博客导航——一站式搜索(所有博客的汇总帖)
  20. 电脑网正常,除了IE之外其他浏览器都能正常上网,IE不能上网解决办法

热门文章

  1. python求偏度系数_用 Python 讲解偏度和峰度
  2. c语言函数的三种调用方式是什么?
  3. 图解C语言的希尔排序
  4. php array assoc,如何学习PHP array_intersect_assoc()
  5. Android接入热敏打印机,Android 关于佳博和汉印蓝牙热敏打印机开发
  6. python区域找图命令_python读取图片任意范围区域
  7. ubuntu中安装sublime text3用于python编程
  8. CCF CSP 201403-1 相反数(C++)
  9. 武警多业务光端机,五防光端机产品介绍
  10. 【渝粤教育】 国家开放大学2020年春季 2772家畜环境卫生与设施 参考试题