MVC的强大之处之一当然是路由,这是几年前一位牛人给我说过的话,本人深感认同。今天就再次探究。

首先新建一个空的MVC项目,我们会发现在RouteConfig类中存在一个默认的路由配置,通常我会在这里的路由中添加一个命名空间,以防止路由配置冲突

            routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new string[] { "MvcRoute.Controllers" }
);

假如需要自定义路由则需要在默认路由上面再添加路由,他的原则的从上至下匹配路由,这些都是很简单的

有一个重点就是伪静态操作,不要告诉我你不知道伪静态这个东西,说明你太古董了

当然伪静态的配置原则一般都是将Action进行修改,如下:

            //html route
routes.MapRoute(
name: "Default_Html",
url: "{controller}/{action}.html/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new string[] { "MvcRoute.Controllers" }
);
//default
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new string[] { "MvcRoute.Controllers" }
);

如果你只是简单的进行这样的修改操作,你会报这样的错误:

原因是因为webconfig缺少了配置,添加如下配置:

原因顾名思义。这个原因当初把我害的够惨的。。。

以上的东西其实都是很简单的,下面来说一说控制器方面的:

其实我发现在稍微大一点的项目中,我们的开发人员会新建很多很多的控制器,外层的控制器不够用了,那么就会新建区域,其实这样给我的感觉就是太乱了,那有木有神马解决办法方便管理呢?当然有,那就是将控制器进行分离

我们首先将最外层的控制器进行分离操作

1、新建类库,用于单独存放控制器

我们发现将WEB中的控制器删除单独拿出来存放在一个类库中也是可以的,当然必须包含两个条件:

  首先这个类库中的控制器的命名空间必须和RouteConfig中的路由配置中的命名空间要相同,否则没办法访问

  WEB项目必须添加这个类库的引用

我们再次来观看这个项目的结构,是不是感觉项目变得很容易管理啊,WEB层中只包含了一些基本的配置和页面,假如有一天控制器中的逻辑需要修改了,我只需将这个类库进行替换操作

区域进行分离操作

这个区域分离操作我感觉十分的重要

首先我们在WEB中添加路由System(纯属测试),VS会自动添加了几个文件夹和当前区域的路由

下面我们也进行控制器分离操作,首先将WEB中区域没有用的文件夹删除,新建类库MvcRoute.Areas.System,具体如下

我们来看一下目录结构,控制器和区域路由都分离到了一个类库中了,WEB中只剩下视图和配置

成功运行图片:

运行成功必须满足一下条件:

  类库中的控制器命名空间必须和SystemAreaRegistration中的路由配置命名空间一致

  WEB必须添加这个类库的引用

说了这么多的优点,那么当然会存在一些缺点,比方说,我们会返现在区域的控制器中VS没有办法识别这个Action是否存在视图,而且根据Action查找视图也变得不方便

今天就到这里

ASP.NET MVC之路由深究的更多相关文章

  1. ASP.NET MVC 自定义路由中几个需要注意的小细节

    本文主要记录在ASP.NET MVC自定义路由时,一个需要注意的参数设置小细节. 举例来说,就是在访问 http://localhost/Home/About/arg1/arg2/arg3 这样的自定 ...

  2. 理解ASP.NET MVC的路由系统

    引言 路由,正如其名,是决定消息经由何处被传递到何处的过程.也正如网络设备路由器Router一样,ASP.NET MVC框架处理请求URL的方式,同样依赖于一张预定义的路由表.以该路由表为转发依据,请 ...

  3. 返璞归真 asp.net mvc (2) - 路由(System.Web.Routing)

    原文:返璞归真 asp.net mvc (2) - 路由(System.Web.Routing) [索引页] [源码下载] 返璞归真 asp.net mvc (2) - 路由(System.Web.R ...

  4. asp.net mvc 特性路由(MapMvcAttributeRoutes)的应用

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012835032/article/details/51160824asp.net mvc 特性路由 ...

  5. ASP.NET MVC的路由

    好久没写博文了,感觉最近好像少了点动力.唉!这回就看看这个MVC的路由. 说这个路由机制其实不是MVC里面特有的,ASP.NET里面本身就有的,只不过在WebForm里面一般比较少用,而在MVC里就是 ...

  6. ASP.NET MVC API 路由生成规则

    我们都知道调用ASP.NET MVC的某些API函数(诸如:Url.Action.RedirectToAction等)可以生成URL,ASP.NET MVC会根据调用API函数时传入的参数去匹配系统定 ...

  7. ASP.NET MVC 之 路由配置

    主要操作在App_Start 目录下的 RouteConfig.cs 文件. 一.Url构造方式 1.命名参数规范+匿名对象 routes.MapRoute( name: "Default& ...

  8. asp.net mvc 伪静态路由配置

    asp.net mvc实现伪静态路由必须按如下方式设置好,才能访问 .htm 或者.html页面 C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspne ...

  9. asp.net MVC URL路由入门指南

    asp.net MVC 的URL路由是一个非常强大的功能,而且有个优点:强大单不复杂.然而,目前我在网上看到的相关资料,却都仅仅提供一些示例,仅通过这些示例,初学者基本上不可能明白为什么要这么配置,更 ...

随机推荐

  1. DB的IO统计

    对数据的IO操作,都是写入到数据库文件中,sys.dm_io_virtual_file_stats Returns I/O statistics for data and log files. sys ...

  2. SSRS3: Credentials配置

    1,Service Account Service Account 是Reporting Service 运行的账户,可以通过查看Windows 的 Service 来查看,强烈建议使用 Report ...

  3. for循环或Repeat里面对某个字段进行复杂处理的解决方案

    在后台用一个方法处理

  4. sql语句的优化分析

    开门见山,问题所在 sql语句性能达不到你的要求,执行效率让你忍无可忍,一般会时下面几种情况. 网速不给力,不稳定. 服务器内存不够,或者SQL 被分配的内存不够. sql语句设计不合理 没有相应的索 ...

  5. 10年C#历程的MVP之路与MVP项目介绍

            本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html  1.意外的惊喜 10月份收到微软总部寄来的荣誉证书,非常激动, ...

  6. Android okHttp网络请求之Retrofit+Okhttp+RxJava组合

    前言: 通过上面的学习,我们不难发现单纯使用okHttp来作为网络库还是多多少少有那么一点点不太方便,而且还需自己来管理接口,对于接口的使用的是哪种请求方式也不能一目了然,出于这个目的接下来学习一下R ...

  7. SQL Server-数据库架构和对象、定义数据完整性(二)

    前言 本节我们继续SQL之旅,本节我们如题来讲讲一些基本知识以及需要注意的地方,若有不妥之处,还望指出,简短的内容,深入的理解,Always to review the basics. 数据库架构和对 ...

  8. 如何将MySQL help contents的内容有层次的输出

    经常会遇到这种情况,在一个不能上网的环境通过MySQL客户端登录数据库,想执行一个操作,却忘了操作的具体语法,各种不方便. 其实,MySQL数据库内置了帮助文档,通过help contents即可查看 ...

  9. IDDD 实现领域驱动设计-架构之经典分层

    上一篇:<IDDD 实现领域驱动设计-上下文映射图及其相关概念> 在<实现领域驱动设计>书中,分层的概念作者讲述的很少,也就几页的内容,但对于我来说,有很多的感触需要诉说.之前 ...

  10. iOS OC语言: Block底层实现原理

    先来简单介绍一下BlockBlock是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,Block可以在任何时候执行. Block和函数的相似性:(1)可以保存代码(2) ...