网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

详解ASP.NET MVC Controller激活系统:总体设计

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/01/05
,而目标Controller的名称就包含在通过该RouteData的Values属性表示的RouteValueDisctionary对象中,对应的Key为“controller”。而在默认的情况下,这个作为路由数据的名称只能帮助我们解析出Controller的类型名称,如果我们在不同的命名空间下定义了多个同名的Controller类,会导致激活系统无法确定具体的Controller的类型从而抛出异常。

为了解决这个问题,我们必须为定义了同名Controller类型的命名空间设置不同的优先级,具体来说我们有两种提升命名空间优先级的方式。第一种方式就是在调用RouteCollection的扩展方法MapRoute时指定一个命名空间的列表。通过这种方式指定的命名空间列表会保存在Route对象的DataTokens属性表示的RouteValueDictionary字典中,对应的Key为“Namespaces”。

  1. public static class RouteCollectionExtensions  
  2.  {  
  3.      //其他成员        
  4.      public static Route MapRoute(this RouteCollection routes, string name, string url, string[] namespaces);      
  5.      public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, string[] namespaces);      
  6.      public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints, string[] namespaces);  
  7.  }  

而另一种提升命名空间优先级的方式就是将其添加到当前的ControllerBuilder中的默认命名空间列表中。从上面的给出的ControllerBuilder的定义可以看出,它具有一个HashSet<string>类型的只读属性DefaultNamespaces就代表了这么一个默认命名空间列表。对于这两种不同的命名空间优先级提升方式,前者(通过路由注册)指定命名空间具有更高的优先级。

实例演示:如何提升命名空间的优先级

为了让读者对此如何提升命名空间优先级具有一个深刻的印象,我们来进行一个简单的实例演示。我们使用Visual Studio提供的项目模板创建一个空的ASP.NET MVC应用,并且使用如下所示的默认路由注册代码。

  1.  public class MvcApplication : System.Web.HttpApplication  
  2.  {  
  3.      public static void RegisterRoutes(RouteCollection routes)  
  4.      {        
  5.          routes.MapRoute(  
  6.              name: "Default",  
  7.              url: "{controller}/{action}/{id}",  
  8.              defaults: new { controller = "Home", action = "Index",   
  9.                  id = UrlParameter.Optional }  
  10.         );  
  11.    }  
  12.     protected void Application_Start()  
  13.     {  
  14.         //其他操作  
  15.         RegisterRoutes(RouteTable.Routes);  
  16.     }  
  17. }  
  18. public class MvcApplication : System.Web.HttpApplication  
  19. {  
  20.     public static void RegisterRoutes(RouteCollection routes)  
  21.     {        
  22.         routes.MapRoute(  
  23.             name: "Default",  
  24.             url: "{controller}/{action}/{id}",  
  25.             defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }  
  26.         );  
  27.     }  
  28.     protected void Application_Start()  
  29.     {  
  30.         //其他操作  
  31.         RegisterRoutes(RouteTable.Routes);  
  32.     }  

  • 上一篇资讯: 详细解读ASP.NET的异步
  • 网学推荐

    免费论文

    原创论文

    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号