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 />");
}
}

效果:

参考资料:

ASP.NET WebForms MapPageRoute 路由配置的更多相关文章

  1. WebForm MapPageRoute 路由配置

    WebForm MapPageRoute 路由配置   MapPageRoute 应该是 ASP.NET 4.0 中的东西,但现在我是第一次使用它,使用场景是:MVC 混合使用 WebForm,然后对 ...

  2. WebForm MapPageRoute 路由配置(转载)

    使用场景是:MVC 混合使用 WebForm,然后对 WebForm 进行路由配置 http://www.cnblogs.com/xishuai/archive/2015/02/26/web-form ...

  3. ASP.NET MVC 之 路由配置

    主要操作在App_Start 目录下的 RouteConfig.cs 文件. 一.Url构造方式 1.命名参数规范+匿名对象 routes.MapRoute( name: "Default& ...

  4. asp.net mvc 伪静态路由配置

    asp.net mvc实现伪静态路由必须按如下方式设置好,才能访问 .htm 或者.html页面 C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspne ...

  5. ASP.NET MVC 混搭 ASP.NET WebForms 所导致的 Html.ActionLink/BeginForm 问题

    首先,需要了解下这篇博文:<ASP.NET WebForms MapPageRoute 路由配置> 之前,在 ASP.NET MVC 中混搭 ASP.NET WebForms,使用 Map ...

  6. ASP.NET Web API 2 之路由配置

    Ø  简介 ASP.NET Web API 路由配置也是必须掌握的技术点之一,要真正的完全掌握和理解它也是需要一定的过程的.不过,在平常的开发过程中,对它有基本的了解就足够了.因为我们主要关注点并不在 ...

  7. asp.net MVC路由配置总结

    URL构造 命名参数规范+匿名对象 routes.MapRoute(name: "Default",url: "{controller}/{action}/{id}&qu ...

  8. [水煮 ASP.NET Web API2 方法论](3-8)怎样给指定路由配置处理器

    阅读导航 问题 解决方案 工作原理 代码演示 问题 如果仅仅针对指定的路由进行某些特定的消息处理,而不是应用于所有路由,我们应该怎么做呢? 解决方案 ASP.NET WEB API 的很多功能都内建了 ...

  9. ASP.NET WebApi 路由配置【转】

    一.路由介绍 ASP.NET Web API路由是整个API的入口.我们访问某个资源就是通过路由映射找到对应资源的URL.通过URL来获取资源的. 对于ASP.NET Web API内部实现来讲,我们 ...

随机推荐

  1. 格式化input输入内容(金额)

    项目中要用到格式化金额输入框,要求每三个数字用逗号分割开. 添加一个directive angular.module('myApp.directives', []) .directive('filte ...

  2. STM32之输入捕获以及小小应用(库)

    五一之际,先祝大家五一快乐.其实快乐很简单,工作的人有假放,学习的人也有假放,像我,有假放才有更多的时间学自己想学的东西.51假期学51,可惜没有32假期呀.好了..言归正传,大家听过吸星大法吧..在 ...

  3. CSS居中demo

      <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...

  4. Java的四种引用方式

    一.引用基本概念 从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用.虚引用. 1.强引用(StrongRef ...

  5. 解决 adb.exe 停止工作小续

    继adb 停止工作的问题之后,又碰见了adb 停止工作的问题. 在使用adb install app.apk 之后给出错误信息如下: * daemon not running. starting it ...

  6. webform 组合查询

    界面: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx ...

  7. 有哪些LabVIEW快捷键让你相见恨晚

    前言 任何一门工具,当你使用它到极致的时候,往往都朝着这样子的两个方向发展 1. 具有鼠标操作功能的软件,他的使用的极致就是脱离鼠标,迈向键盘 2. 主要是键盘操作的,他的极致就是脚本自动化,或者说一 ...

  8. “我爱背单词”beta版发布与使用说明

    我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的“我爱背单词”beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天大学计算机学院  拒 ...

  9. Page

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> <met ...

  10. myeclipse tomcat内存溢出解决方法

    Tomcat直接启动正常,通过myeclipse启动tomcat内存溢出.MyEclipse启动Tomcat无视catalina.bat中设置内存大小的问题.在 tomcat的catalina.bat ...