ASP.NET MVC之路由深究

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查找视图也变得不方便

今天就到这里

时间: 2025-01-16 03:13:29

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

[学习笔记] 理解ASP.NET MVC的路由系统

引言 路由,正如其名,是决定消息经由何处被传递到何处的过程.也正如网络设备路由器Router一样,ASP.NET MVC框架处理请求URL的方式,同样依赖于一张预定义的路由表.以该路由表为转发依据,请求URL最终被传递给特定Controller的特定Action进行处理.而在相反的方向上,MVC框架的渲染器同样要利用这张路由表,生成最终的HTML页面并返回URL.所以,理解整个ASP.NET MVC的路由系统,有两个必须出现的关键元素:Controller与Action,有两个方向的操作:传入的

asp.net MVC 5 路由 Routing

ASP.NET MVC ,一个适用于WEB应用程序的经典模型 model-view-controller 模式.相对于web forms一个单一的整块,asp.net mvc是由连接在一起的各种代码层所组成. 最近又接触了关于asp.net mvc的项目,又重拾以前的记忆,感觉忘了好多,特此记录. 首先,来说说路由Routing. ASP.NET MVC 不再是要依赖于物理页面了,你可以使用自己的语法自定义URL,通过这些语法来指定资源和操作.语法通过URL模式集合表达,也称为路由. 路由是代表

asp.net mvc 伪静态路由配置

asp.net mvc实现伪静态路由必须按如下方式设置好,才能访问 .htm 或者.html页面 C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll 来自为知笔记(Wiz)

ASP.NET MVC API 路由生成规则

我们都知道调用ASP.NET MVC的某些API函数(诸如:Url.Action.RedirectToAction等)可以生成URL,ASP.NET MVC会根据调用API函数时传入的参数去匹配系统定义的路由(Route),然后通过匹配成功的路由去生成相应的URL. ASP.NET MVC会依次根据如下三个规则生成URL: 调用ASP.NET MVC API函数时传入的参数信息 当前请求的URL(就是Request.Url)和系统中定义路由匹配(按照路由表定义的顺序,从上往下匹配)后的匹配值 系

Asp.Net MVC的路由

通过前面几篇博文的介绍,现在我们已经清楚了asp.net请求管道是怎么一回事了,这篇博文来聊聊MVC的路由. 其实MVC的请求管道和Asp.Net请求管道一样,只是MVC扩展了UrlRoutingModule的动作.我们知道MVC网站启动后第一个请求会执行Global.asax文件中的Application_Start方法,完成一些初始化工作,其中就会注册路由,先来看下面一张图,该图可以直观的展示了MVC执行的流程. 结合上图,我们一起来看看代码是如何实现路由的注册的. protected vo

ASP.NET MVC——URL路由

在MVC之前,ASP.NET假设请求的URL与服务器上的文件之间有关联,服务器接受请求,并输出相应的文件.而在引入MVC后,请求是由控制器的动作方法来处理的.为了处理URL,便引入了路由系统. 首先我们来创建一个基础项目用来演示.代码如下: 1 public class HomeController : Controller 2 { 3 public ActionResult Index() 4 { 5 ViewBag.Controller = "Home"; 6 ViewBag.Ac

asp.net MVC动态路由

项目中遇到需要动态生成控制器和视图的. 于是就折腾半天,动态生成控制器文件和视图文件,但是动态生成控制器不编译是没法访问的. 找人研究后,得到要领: 1.放在App_Code文件夹内 2.不要命名空间 功能虽然实现了,可是觉得这个发放实在有些挫,心里老挂念这个事情.想着既然使用MVC,能不能实现动态路由访问呢? 果然找到两篇相关的文章,解决了问题: 1.http://www.cnblogs.com/gyche/p/5216361.html 2.http://stackoverflow.com/q

ASP.NET MVC自定义路由 - 实现IRouteConstraint限制控制器名(转载)

自定义约束前 namespace MvcApplication2 { public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); //默认 routes.MapRoute( name: "Default", url: "{controller}/

对ASP.NET MVC 的路由一点理解

这个东西,真搞不懂.看了网上的教程和文章,也不懂(也不清楚写那些文章的人自己是否真的懂).只好靠自己一顿乱摸索. 好比说,下面这个路由: //路由1 config.Routes.MapHttpRoute( name: "SysApi", routeTemplate: "api/SysManager/{action}/{id}", defaults: new { controller = "SysManager", id = RouteParame