博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVC中在路由表routes集合中添加Route实例的一些问题。
阅读量:7246 次
发布时间:2019-06-29

本文共 1076 字,大约阅读时间需要 3 分钟。

 昨天有位同学问到关于在routes集合中添加自定义的路由实例的问题,她出现的问题是这样的:

1.因为要在应用程序戾动时将实例添加到routes表中,所以需要把代码写在Global类的RegisterRoutes方法中,代码如下两种方式:

 
  1. routes.Add("s"new Route("a/b"new WebFormRouteHandler("~/WebForm1.aspx"))); 
 
  1. routes.Add("a"new Route("c/b"new RouteValueDictionary { { "controller""Default" }, { "Home""Index" } }, new WebFormRouteHandler("~/WebForm1.aspx"))); 

其中,a为路由的名称,Route为路由的实例,同时,用到了一个WebFormRouteHandler的自定义类,该类的作用为处理一个虚拟路径并指定到一个实际的地址,具体代码如下:

 
  1. public class WebFormRouteHandler : MvcRouteHandler 
  2.         { 
  3.             private string VirtualPath; 
  4.             public WebFormRouteHandler(string path) 
  5.             { 
  6.                 VirtualPath = path; 
  7.             } 
  8.  
  9.             protected override IHttpHandler GetHttpHandler(RequestContext requestContext) 
  10.             { 
  11.                 var page = BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page)) as IHttpHandler; 
  12.  
  13.                 return page; 
  14.             } 
  15.         } 

她的问题是,用上边第一种方式,那么在做RedirectToAction()操作时,就会直接跳转到WebForm1.aspx页面,而使用第二种方式时,则正常,只有在访问c/b时,才会访问到该页面。

对比上面两段代码,实际上第二种方式只是多了一个关于RouteValueDictionary类的实例,微软官方对这个实例的定义为:

表示不区分大小写的键/值对的集合,您可以在路由框架中的不同位置(例如,在定义路由的默认值时或在生成基于路由的 URL 时)使用该集合。

其实这个对象的创建,可以为url也就是c/b定义了一种默认的访问规则,那么url就一定会按照这种规则去访问指定的页面。

转载地址:http://ghjbm.baihongyu.com/

你可能感兴趣的文章
Grunt 快速入门
查看>>
《几何与代数导引》例2.9
查看>>
vc 获取窗口标题GetWindowText
查看>>
微软职位内部推荐-Senior SDE
查看>>
微软职位内部推荐-Sr. SW Engineer for Privacy Id
查看>>
what are the different types of hospital available in the different zone of area.
查看>>
微软职位内部推荐-Sr SDE for Win Apps Ecosystem
查看>>
js唤醒手机APP
查看>>
Python常用模块之sys
查看>>
Python基础8_线程-
查看>>
[转载]使用mpvue搭建一个初始小程序
查看>>
html元素英文含义
查看>>
mysql 原理 ~ 线程与IO
查看>>
《Linux内核设计与实现》读书笔记(十四)- 块I/O层
查看>>
php总结二篇
查看>>
vue 开发系列(七) 路由配置
查看>>
英特尔® 图形性能分析器 2019 R1 版本
查看>>
Developing avb
查看>>
Virtualbox中的Linux:未能加载虚拟光驱 VBoxsGuestAdditions.iso到虚拟电脑
查看>>
linux 本地账号密码无法登陆(shell可以登录),一直返回 登陆的login界面
查看>>