WebForm MapPageRoute 路由配置
WebForm MapPageRoute 路由配置
MapPageRoute 应该是 ASP.NET 4.0 中的东西,但现在我是第一次使用它,使用场景是:MVC 混合使用 WebForm,然后对 WebForm 进行路由配置,当然也可以使用 ISAPI_Rewrite 3,不同的是要在 IIS 中配置,相对而言,MapPageRoute 在程序中进行配置更加灵活方便,下面是关于 MapPageRoute 的简单整理。
1. 最简单:
public class MvcApplication : System.Web.HttpApplication
{
	protected void Application_Start()
	{
		RouteTable.Routes.MapPageRoute("WebFormRoute",
			"test",
			"~/WebForm1.aspx");
	}
}
public partial class WebForm1 : System.Web.UI.Page
{
	protected void Page_Load(object sender, EventArgs e)
	{
		Response.Write("hello world!");
	}
}效果:

2. 带参数:
public class MvcApplication : System.Web.HttpApplication
{
	protected void Application_Start()
	{
		RouteTable.Routes.MapPageRoute("WebFormRoute",
			"test/{para}",
			"~/WebForm1.aspx");
	}
}
public partial class WebForm1 : System.Web.UI.Page
{
	protected void Page_Load(object sender, EventArgs e)
	{
		Response.Write("hello world! <br />");
		Response.Write("para: " + Page.RouteData.Values["para"]);
	}
}效果:

注意:
当我们使用参数映射的时候,在获取参数值使用的是 Page.RouteData.Values,而不是 Request.QueryString,有一种情况是,如果你的 Url 映射还是 WebForm1.aspx 文件名的形式,只不过这个文件地址发生了变化,这时候你就不需要在 MapPageRoute 中进行参数配置了,只需要进行 Url 和 WebForm 文件地址配置,那这样配置,使用 Request.QueryString 可以获取到参数值吗?我试过是可以的,没有了参数映射配置,也就不需要 Page.RouteData.Values 进行获取参数值了,一种偷巧行为。
3. 带多个参数:
public class MvcApplication : System.Web.HttpApplication
{
	protected void Application_Start()
	{
		RouteTable.Routes.MapPageRoute("WebFormRoute",
			"test/{para1}/{para2}",
			"~/WebForm1.aspx");
	}
}
public partial class WebForm1 : System.Web.UI.Page
{
	protected void Page_Load(object sender, EventArgs e)
	{
		Response.Write("hello world! <br />");
		Response.Write("para1: " + Page.RouteData.Values["para1"]+ "<br />");
		Response.Write("para2: " + Page.RouteData.Values["para2"]+ "<br />");
	}
}效果:

注意:
多个参数的映射还有一种写法是:test/{para1}&{para2},但我试过这种写法会报错,而在 Scott Guthrie 的一篇博文中评论回复,这种方式是可以的,如下:

4. 非正规参数:
public class MvcApplication : System.Web.HttpApplication
{
	protected void Application_Start()
	{
		RouteTable.Routes.MapPageRoute("WebFormRoute",
			"test/{para1}/{para2}.html",
			"~/WebForm1.aspx");
	}
}
public partial class WebForm1 : System.Web.UI.Page
{
	protected void Page_Load(object sender, EventArgs e)
	{
		Response.Write("hello world! <br />");
		Response.Write("para1: " + Page.RouteData.Values["para1"]+ "<br />");
		Response.Write("para2: " + Page.RouteData.Values["para2"]+ "<br />");
	}
}效果:

注意:
<system.webServer>
	<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>在 MapPageRoute Url 映射的时候,使用的后缀是 .html,需要在 web.config 添加上面配置,如果使用的是 .aspx,则不需要,runAllManagedModulesForAllRequests 在之前的博文中有说过,就不重复了。
4. MapPageRoute 方法参数:
//参数
public Route MapPageRoute(
	string routeName,//路由的名称。
	string routeUrl,//路由的 URL 模式。
	string physicalFile,//路由的物理 URL。
	bool checkPhysicalUrlAccess,//一个值,该值指示 ASP.NET 是否应验证用户是否有权访问物理 URL(始终会检查路由 URL)。
	RouteValueDictionary defaults,//路由参数的默认值。
	RouteValueDictionary constraints,//一些约束,URL 请求必须满足这些约束才能作为此路由处理。
	RouteValueDictionary dataTokens//与路由关联的值,但这些值不用于确定路由是否匹配 URL 模式。
)
public class MvcApplication : System.Web.HttpApplication
{
	protected void Application_Start()
	{
		RouteTable.Routes.MapPageRoute("WebFormRoute",
			"test/{para1}/{para2}/{*queryvalues}",
			"~/WebForm1.aspx",
			false,
			null,
			new RouteValueDictionary { { "para1", "^[0-9]*$" }, { "para2", "^[A-Za-z]+$" } },
			new RouteValueDictionary { { "para3", "xishuai1" }, { "para4", "xishuai2" } });
	}
}
public partial class WebForm1 : System.Web.UI.Page
{
	protected void Page_Load(object sender, EventArgs e)
	{
		Response.Write("hello world! <br />");
		Response.Write("para1: " + Page.RouteData.Values["para1"]+ "<br />");
		Response.Write("para2: " + Page.RouteData.Values["para2"]+ "<br />");
		Response.Write("para3: " + Page.RouteData.DataTokens["para3"] + "<br />");
		Response.Write("para4: " + Page.RouteData.DataTokens["para4"]+ "<br />");
	}
}效果:

参考资料:
WebForm MapPageRoute 路由配置的更多相关文章
- WebForm MapPageRoute 路由配置(转载)
		使用场景是:MVC 混合使用 WebForm,然后对 WebForm 进行路由配置 http://www.cnblogs.com/xishuai/archive/2015/02/26/web-form ... 
- ASP.NET WebForms MapPageRoute 路由配置
		MapPageRoute 应该是 ASP.NET 4.0 中的东西,但现在我是第一次使用它,使用场景是:MVC 混合使用 WebForm,然后对 WebForm 进行路由配置,当然也可以使用 ISAP ... 
- ASP.NET WebForm 的路由
		ASP.NET WebForm 的路由 偷会闲, 看看博客园, 有筒子写了篇: ASP.NET的路由 我翻了翻两前的一份邮件, 是我当时在项目之余的时间研究的,那时还没用MVC,所有项目都是 WebF ... 
- .NetCore MVC中的路由(1)路由配置基础
		.NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ... 
- MVC路由配置
		目录 URL Routing 的定义方式 示例准备 给片段变量定义默认值 定义静态片段 自定义片段变量 自定义片段变量的定义和取值 将自定义片段变量作为Action方法的参数 指定自定义片段变量为可选 ... 
- ui-router带参数的路由配置
		ui-router带参数的路由配置 使用ng-route的时候带参数的连接这样配置: $routeProvider.when('item/itemid/:itemid', { templateUrl: ... 
- [水煮 ASP.NET Web API2 方法论](3-8)怎样给指定路由配置处理器
		阅读导航 问题 解决方案 工作原理 代码演示 问题 如果仅仅针对指定的路由进行某些特定的消息处理,而不是应用于所有路由,我们应该怎么做呢? 解决方案 ASP.NET WEB API 的很多功能都内建了 ... 
- Linux和Windows路由配置
		Linux和Windows路由配置 一.配置路由 1- 原则上一台主机只能有一条缺省路由.如果一台主机上有多个网段的话,请配置能够上网的那个网段的网关为缺省路由 Linux配置缺省路由: ... 
- cisco 路由配置
		Cisco路由配置基础 刚刚接触cisco路由配置,下面是学习的笔记,感觉命令还是多敲才能熟悉 一. 所处状态各类 router> 用户处于用户命令状态,可以查看网络和主机 router# 用户 ... 
随机推荐
- Redis实现分布式锁与任务队列
			Redis实现分布式锁 与 实现任务队列 这一次总结和分享用Redis实现分布式锁 与 实现任务队列 这两大强大的功能.先扯点个人观点,之前我看了一篇博文说博客园的文章大部分都是分享代码,博文里强调说 ... 
- C#使用xpath找到一个节点
			Xpath这是非常强大.但对比是一个更复杂的技术,希望上面去博客园特别想看看一些专业职位.下面是一些简单Xpath的语法和示例,给你参考 <?xml version="1.0" ... 
- .ARM.exidx
			简介: `.ARM.exidx` is the section containing information for unwinding the stack. If your C program ha ... 
- java  major version(转)
			在jar包中,用winrar解压一个类文件,然后在命令行下面输入 javap -verbose classname 会输出一些信息,大致如下: Compiled from "HtmlCraw ... 
- NET 中的多线程
			NET 中的多线程 为什么使用多线程 使用户界面能够随时相应用户输入 当某个应用程序在进行大量运算时候,为了保证应用程序能够随时相应客户的输入,这个时候我们往往需要让大量运算和相应用户输入这两个行为在 ... 
- nodejs http静态服务器
			使用nodejs写的很简单的静态服务器,没有做cluster处理,没有做缓存处理,不支持访问文件夹,功能只有一个,就是获取到文件后再返回文件内容. var fs = require('fs'); va ... 
- android4.4组件分析--service组件-bindService源代码分析
			6.1.1. bindService 由于有前面分析startService的代码实现过程,则对于bindService的代码分析就不用那么具体介绍,在介绍流程的同一时候更关注一些细节上的部分. ... 
- 中国的手写输入法iOS8.1在崩溃
			当中国的手写输入法.会导致app收起.于debug时刻.报错: 2014-10-22 14:45:10.269 App[524:170755] -[UIKBBlurredKeyView candida ... 
- c++读取文本文件
			#include<iostream> #include<fstream> using namespace std; int main() { int a,b=-100000,c ... 
- 用命令行在github新建一个项目
			Github Repository API中说明了可以通过发送一个请求来认证,之后就能通过命令行自动新建远程仓库了. 认证 curl -u 'username' https://api.github. ... 
