昨天有位同学问到关于在routes集合中添加自定义的路由实例的问题,她出现的问题是这样的:
1.因为要在应用程序戾动时将实例添加到routes表中,所以需要把代码写在Global类的RegisterRoutes方法中,代码如下两种方式:
routes.Add("s", new Route("a/b", new WebFormRouteHandler("~/WebForm1.aspx")));
routes.Add("a", new Route("c/b", new RouteValueDictionary { { "controller", "Default" }, { "Home", "Index" } }, new WebFormRouteHandler("~/WebForm1.aspx")));
其中,a为路由的名称,Route为路由的实例,同时,用到了一个WebFormRouteHandler的自定义类,该类的作用为处理一个虚拟路径并指定到一个实际的地址,具体代码如下:
public class WebFormRouteHandler : MvcRouteHandler { private string VirtualPath; public WebFormRouteHandler(string path) { VirtualPath = path; } protected override IHttpHandler GetHttpHandler(RequestContext requestContext) { var page = BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page)) as IHttpHandler; return page; } }
她的问题是,用上边第一种方式,那么在做RedirectToAction()操作时,就会直接跳转到WebForm1.aspx页面,而使用第二种方式时,则正常,只有在访问c/b时,才会访问到该页面。
对比上面两段代码,实际上第二种方式只是多了一个关于RouteValueDictionary类的实例,微软官方对这个实例的定义为:
表示不区分大小写的键/值对的集合,您可以在路由框架中的不同位置(例如,在定义路由的默认值时或在生成基于路由的 URL 时)使用该集合。
其实这个对象的创建,可以为url也就是c/b定义了一种默认的访问规则,那么url就一定会按照这种规则去访问指定的页面。
本文出自 “张剑的技术专栏” 博客,请务必保留此出处http://jianle.blog.51cto.com/429692/727680
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索实例
, 路由
, 代码
, 一个
, 方式
, Routes
, mvc默认路由
路由实例代码
,以便于您获取更多的相关知识。