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. About_PHP读写文件

    1.PHP部分文件操作函数:fopen ,fread ,filesize,fwrite,fclose 2.unlink() rmdir() 删除函数 unlink() 删除文件函数:unlink(路径 ...

  2. div样式text-align在子元素缩进不规范的情况下,chrome出现的问题(貌似结果是inline-block导致的)

    在调css的时候,发现居然有firefox实现效果完整而chrome出现问题的情况: 详细情况:segmentfault1 segmentfault2 全文表达: <html><he ...

  3. 反射 Class类和Class实例

  4. easyui-conbotree树形下拉框。。。转

    最近一直在研究这个树形的下拉选择框,感觉非常的有用,现在整理下来供大家使用: 首先数据库的表架构设计和三级菜单联动的表结构是一样,(父子关系) 1.下面我们用hibernate建一下对应的额实体类: ...

  5. java web(六)多个请求对应一个Servlet

    概要: 提交请求的常用方式有两种,get/post , 运行程序后被请求,在加载执行web.xml文件时通过该文件中的映射关系找到即将要执行的Servlet; 而在要执行的Servlet文件中可通过反 ...

  6. css伪类制作三角箭头

    <meta charset="utf-8"> <style type="text/css"> .tip{ padding: 5px 10 ...

  7. java学习笔记(1)

    最近开始学习java基本技术,在这里总结一下我学到的内容: 1.Java的基本历史 java起源于SUN公司的一个GREEN的项目,其原先目的是:为家用消费电子产品发送一个信息的分布式代码系统,通过发 ...

  8. 关于shiro

    1.1  简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Securi ...

  9. ASP.NET Core Docker部署

    前言 在前面文章中,介绍了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的发布和部署,本篇文章主要是如何在Docker容器中运行ASP.NET Core应用程序. ...

  10. 使用LinqToExcel读取Excel

    我们读取和写入Excel 经常使用NPOI工具,如果我们的需求只是需要读取Excel,可以考虑使用LinqToExcel这个组件.这个组件用起来简单,实用,操作方便,而且结合了Linq的查询特性,ex ...