ASP.NET MVC 及 Areas 简单控制路由

ASP.NET MVC中怎么去控制路由,这个想关的文章很多,我在这里就是自我总结一下,仅供参考。

1.我们新建一个项目,查看RouteConfig.cs,代码如下:

 1 public static void RegisterRoutes(RouteCollection routes)
 2         {
 3             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 4
 5             routes.MapRoute(
 6                 name: "Default",
 7                 url: "{controller}/{action}/{id}",
 8                 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
 9             );
10         }

第3行,routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 表示忽略有扩展名  axd的路由,

你可以仿照它,如果你项目里有哪些文件是不攻外部访问的,可以全部过滤掉。

1 routes.MapRoute(
2                 name: "Default",
3                 url: "{controller}/{action}/{id}",
4                 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
5             );

这个就是最基本的路由控制了。表示首页是HomeController里的ActionResult Index,默认路由参数为id

下面我们来改改这串代码,如下:

1 ///首页
2             routes.MapRoute(
3                 "Index", // Route name
4                 "{controller}/{action}",
5                 new { controller = "Index", action = "Index", id = UrlParameter.Optional },
6                 new string[] { "SnsCWan.Controllers" }
7             );

有备注大伙应该看得懂,其中 new string[] { "SnsCWan.Controllers" } 里的SnsCWan是当前网站名称,这个先注意一下。

1 ///PayStepIndex
2             routes.MapRoute(
3                 "PayStepIndex", // Route name
4                 "{controller}/{action}/{Method}/{id}.html",
5                 new { controller = "PayStep", action = "Index", Method = UrlParameter.Optional, id = UrlParameter.Optional },
6                 new string[] { "SnsCWan.Controllers" }
7             );

这个是有控制多个参数的路由,你可以改 "{controller}/{action}/{Method}/{id}.html" 来设置你需要的路由方式。

下面我们新建一个Admin的Areas,表示站点的管理员部分,默认生成的代码如下:

1 public override void RegisterArea(AreaRegistrationContext context)
2         {
3             context.MapRoute(
4                 "Admin_default",
5                 "Admin/{controller}/{action}/{id}",
6                 new { action = "Index", id = UrlParameter.Optional }
7             );
8         }

同一个网站里面,如果根目录下的路由和Areas下的路由同时都路由到一个Index/Index,此时项目就会报错,告诉你同时存在了2个路由,这个时候怎么处理呢? 如下:

1 context.MapRoute(
2                 "Admin_default",
3                 "Admin/{controller}/{action}/{id}",
4                 new { controller = "Index", action = "Index", id = UrlParameter.Optional },
5                 new string[] { "SnsCWan.Areas.Admin.Controllers" }
6             );

特别主意 new string[] { "SnsCWan.Areas.Admin.Controllers" } ,这个和根目录下的路由的区别,它表示指定 SnsCWan网站下的Areas区域的Admin控制器,

这样,路由间就不会再产生冲突了。

总得配置路由就是这些,具体怎么去设置更加美观的url还有待你更具创意的想法。

本群提供ASP.NET MVC,EF,LINQ,WEB API技术支持,不在乎人多,在乎人精。
ASP.NET MVC群 171560784  
诚邀各路高手、初学者加入。

ASP.NET MVC 及 Areas 简单控制路由

时间: 2024-10-24 12:44:31

ASP.NET MVC 及 Areas 简单控制路由的相关文章

跟我学ASP.NET MVC之十一:URL路由

跟我学ASP.NET MVC之十一:URL路由摘要: 在MVC框架之前,ASP.NET假定在请求的URLs和服务器硬盘文件之间有直接的关系.服务器的职责是接收浏览器请求,从相应的文件发送输出. 这种方法只能工作于Web表单,每一个ASPX页面既是一个文件,也是一个对应请求的自包含响应.而这对于MVC应用程序来说就无效了,因为请求是由控制器类里的行为方法处理的,而且没有磁盘上一对一关系的文件. ASP.NET平台使用路由系统处理MVC URLs.在这篇文章中,我将向你展示怎样为你的工程使用路由系统

在 asp.net mvc中的简单分页算法

//第一步:建立如下分页实体类:namespace MVCPager.Helpers { /// <summary> /// 简单分页算法类 /// </summary> public class Pager { public int RecordCount { get; set; } public int PageIndex { get; set; } public int PageSize { get; set; } public int PageCount { get { r

ASP.NET MVC ViewData/ViewBag 简单小结

近期在项目中遇到一个问题,就是用ViewBag.Model存储匿名对象传递给View,但是需要根据条件给匿名对象添加属性,这个可真心不易,Google了一下发现很多方案都是动态编译神马的,感觉好高大上,最后也没采用,因为不知道动态编译的性能消耗大不大. 最后是自己简单研究了一下,在ViewBag.Model中存储了Dictionary<string, object>,在View通过Model[key]的方式可以正常读取相应的值,在此对ViewData和ViewBag的使用进行一个简单的小结:1

ASP.NET MVC 多语言实现——URL路由

考虑实现一个完整的基于asp.net mvc的多语言解决方案,从路由到model再到view最后到数据库设计(先挖好坑,后面看能填多少). 我所见过的多语言做得最好的网站莫过于微软的msdn了,就先从模仿它的路由开始 仅实现相同的url格式很简单,只要将默认的路由加上一个表示语言的变量就可以了 public static void RegisterRoutes(RouteCollection routes) { //other routes routes.MapRoute( name: "Def

ASP.NET MVC 5 入门教程 (3) 路由route

文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-get-started-route.html 上一节:ASP.NET MVC 5 入门教程 (2) 控制器Controller 源码下载:点我下载 上一节我们讲了如何创建一个控制器,本节我们来讨论如何通过路由来访问控制器及其Action. 那么问题来了,怎么写url能访问到我想要访问的控制器呢? 要想正确访问路由器,就得知道路由规则.它被写在解决方案的App_Start文件夹下的Ro

ASP.NET MVC Ajax.ActionLink 简单用法

ASP.NET MVC 项目中,如何使用类似于 iframe 的效果呢?或者说 Ajax 局部刷新,比如下面操作: 我们想要的效果是,点击 About 链接,页面不刷新(地址栏不变),然后下面的内容进行更新,其实实现这个效果,很简单,只需要使用 Ajax.ActionLink 即可. 1. 安装 Microsoft.jQuery.Unobtrusive.Ajax 程序包 Install-Package Microsoft.jQuery.Unobtrusive.Ajax 2. 引用 JS 文件:

ASP.NET MVC使用Areas后怎样获取Area(区域)的名称

写此随笔,目的只为今后在ASP.NET MVC项目中再用到Area(区域)时作为备查. 获取当前Area(区域)名称的方法是: ViewContext.RouteData.DataTokens["area"] 这样,我就可以通过下面三个语句,分别获取用户当前访问的Area.Controller和Action string areaName = filterContext.RouteData.DataTokens["area"] == null ? "&qu

Asp.net mvc自定义Filter简单使用

自定义Filter的基本思路是继承基类ActionFilterAttribute,并根据实际需要重写OnActionExecuting,OnActionExecuted,OnResultExecuting,OnResultExecuted这四个中的一个或多个方法. 注意类名一定要以Attribute结尾. 故名思义,Action执行前,执行后,结果返回前,结果返回后.所以它们的执行先后顺序就是OnActionExecuting,OnActionExecuted,Action,OnResultEx

asp.net MVC把Areas区域绑定成二级域名

先分析需求 在MVC项目中,我们如果有两个Areas.比如Test和DEMO.我们的访问地址应该是 http://localhost:8098/test http://localhost:8098/demo 如果我们绑定域名后想实现这样访问 http://test.abc.com:8098/ http://demo.abc.com:8098/ 这个问题的相关解决办法倒是不少,比如http://www.cnblogs.com/jobily/archive/2011/10/09/2204800.ht