Asp.Net4.0/VS2010新变化(3):webform中也可以直接url路由

以前在做asp的时候,要把 /default.asp?id=123映射成/default/123,需要借助IISRewriter这个组件,到了asp.net以后,可以用代码写了,但是个人觉得很麻烦,要写一堆代码,还要修改web.config,现在好了:asp.net4.0中 asp.net mvc中的路由规则全部可以用于webform了

 

使用步骤:

1.Global.ascx.cs中先注册路由规则

using System;
using System.Web.Routing;

namespace WebApp
{
    public class Global : System.Web.HttpApplication
    {
        void RegisterRouters(RouteCollection routes)
        {
            //参数含义:
            //第一个参数:路由名称--随便自己起
            //第二个参数:路由规则
            //第三个参数:该路由规则交给哪一个页面来处理
            routes.MapPageRoute("my-route-name", "default/{id}", "~/default.aspx");
            //...当然,您还可以添加更多路由规则
        }

        protected void Application_Start(object sender, EventArgs e)
        {
            RegisterRouters(RouteTable.Routes);
        }
    }
}

在根目录下弄个default.aspx来测试下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApp.Default" EnableViewState="false" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    待提交的Id:<asp:TextBox runat="server" ID="txtId" /><br />
    接收到的Id:<asp:Label ID="lblId" runat="server" Text="" /><br />
    其它常规参数:<asp:Label ID="lblOther" Text="" runat="server" /><br />
    <asp:Button Text="提交" runat="server" ID="btn1" />
    </form>
</body>
</html>

后端代码:

using System;
using System.Web.UI;

namespace WebApp
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                string _id = Page.RouteData.Values["id"] as string;//接收路由参数
                lblId.Text = _id;

                string _t = "";
                foreach (var item in Request.QueryString) //如果是用 /default/123?name=xxx之类的传过来的,测试一下能不能收到其它参数
                {
                    _t += item + "=" + Request.QueryString[item.ToString()] + ",";
                }
                lblOther.Text = _t.Trim(',');
            }
            else //提交以后的测试
            {
                //看看能不能继续用以前的Request.Form来处理
                string _t = "";
                foreach (var item in Request.Form)
                {
                    _t += item + "=" + Request.Form[item.ToString()] + ",";
                }
                lblOther.Text = _t.Trim(',');
            }
        }
    }
}

 先看看传统的url参数方式还能不能用(结果证明:加了路由后,以前的方式仍然可运行)

再用路由规则访问试下,同时加了路由中未定义的url参数,看看能不能同时处理,结果再次证明,一切Ok,注意:如果这时又传了?id=xxx参数,仍然可以正常区分出来(见下图)

把路径换成大写试下,结果证明不区分大小写(这一点个人觉得比ror要好)

试下省略掉前面的default.aspx能不能正常默认交给default.aspx来处理,结果ok

试下提交的场景,结果证明,仍然可以用以前的Request.Form来处理,同时源代码查看下来,系统自动把action设置成了路由参数

前台页面写链接时,以前的<a href="/default.aspx?id=123">xxx</a>当然可以继续用,不过从SEO角度考虑,也应该换成<a href="/default/123">xxx</a>了,当然这样并不是最好办法,比如你以后路由规则换了,这个链接就失效了,建议写成:

<a href="<%=this.GetRouteUrl("my-route-name", new { id="123"}) %>">xxx</a>

最后我们还能玩点雷人的把戏:比如利用路由,可以把/default/123 变成 /default.jsp/123,然后跑去跟客户说:我们的系统用了国际最主流的java,哈哈

时间: 2024-10-03 13:02:44

Asp.Net4.0/VS2010新变化(3):webform中也可以直接url路由的相关文章

Asp.Net4.0/VS2010新变化(4):SEO的改进

asp.net4.0的webform中,对于Page对象新增加了二个属性:MetaKeywords,MetaDescription  后端代码上,写法也更简单,以前可能需要这样写: this.Header.Controls.AddAt(0, new HtmlMeta() { Name = "keywords", Content = Website.MetaKeyword });//关键字 this.Header.Controls.AddAt(1, new HtmlMeta() { Na

Asp.Net4.0/VS2010新变化(5):可扩展的(分布式)缓存

.net3.0/3.5时代,asp.net的outPut缓存默认只能存放于内存中,但是内存资源是有限的,这就导致了缓存的无法扩展. 而asp.net4.0中允许开发人员对缓存扩展,您可以选择把要缓存的内容,放到内存,硬件,数据库,甚至与时下流行的memcached直接对接. 以下是我摘自msdn的一段话: ASP.NET 4对输出缓存添加了扩展点,现在允许开发人员配置一个或多个定制的输出缓存提供器(output-cache provider).输出缓存提供器可以使用任何存储机制来持久化缓存内容.

Asp.Net4.0/VS2010新变化(6):内置的图表控件

.net4.0以前,要想在网页上画个饼图,那还真不是个轻松的活儿,得有点技术含量,比如:可以用System.Drawing下的那些东东,再或者用Silverlight/Flash或第三方控件   现在asp.net 4.0已经把它做成控件了   直接拖到页面就完事了,下面是示例代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inhe

Asp.Net4.0/VS2010新变化(1):web.config与publish

Vs2010正式版据说4月12号就要发行,是时候摆弄一下它了  新建web application后,最直观的一个变化就在于web.config变干净了: 只有寥寥数行代码,赏心悦目!   另外注意到web.config在解决方案视图中,分成了二个: 个人觉得这是吸收了ROR中database.yml中数据库(开发,生产,测试)环境配置的思想,我们在做web开发时,难免会对调试/发布二种环境的配置做一些调整,比如:发布环境中连接字符串将连接到正式数据库,调试环境中连接字符串连接到开发数据库,以往

Asp.Net4.0/VS2010新变化(2):网站自动预热

往往我们会有一些web应用,在网站初次被访问时要做一些初始化处理,比如加载数据到缓存中之类. 如果某个用户正好不幸成为第一个访客,他可能会觉得网站速度很慢,现在好了,asp.net 4.0 IIS7.0/7.5环境提供了自动预热功能,相当于系统自动充当第一个访客了,虽然只是一个小细节,但对于用户体验来讲,确是一个不错的改进. 打开IIS 7.5的applicationHost.config文件(C:\Windows\System32\inetsrv\config\applicationHost.

IIS7上部署Asp.Net4.0时UrlRouting的若干问题

今天把公司的一个小web项目从Asp.Net3.5升级到Asp.Net4.0,结果在UrlRouting上遇到一系列很纠结的问题.(注:Url路由是Asp.Net4.0新增的一项功能,初次接触的朋友请移步这里Asp.Net4.0/VS2010新变化(3):webform中也可以直接url路由)   vs2010开发环境中一切运行正常,结果部署到IIS7上以后,首先遇到下面这个问题: 我确定服务器上的asp.net4.0 已经启用了(如下图),对应的网站应用程序池也切换到了4.0,但还是这样! 到

ASP.NET4.0新特性

原文:ASP.NET4.0新特性 在以前试用VS2010的时候已经关注到它在Web开发支持上的一些变化了,为此我还专门做了一个ppt,当初是计划在4月12日那天讲的,结果因为莫名其妙的原因导致没有语音以致放弃在LiveMeeting上的这次讲课,也导致了本篇的产生. 新增了项目模板 在创建Web项目时可以看到增加了更多的Web项目模板在VS2008中对应的情况如下: 在新模板中有如下改进:基础MemberShip功能.在大多数网站和应用程序中需要进行认证,因此在新模板中增加了认证功能使得用户能在

《圣殿祭司的ASP.NET4.0专家技术手册》----1-2 .NET 4.0平台新功能概览

1-2 .NET 4.0平台新功能概览 圣殿祭司的ASP.NET4.0专家技术手册 .NET平台版本从1.0.1.1.2.0.3.0.3.5不断演进.最新4.0版的重要改进如下: NET Framework 4.0 Visual C# 2010 Visual Basic 2010 Visual F# 2010(或F# 2.0) 新的CLR 4.0运行时 DLR动态语言运行时(Dynamic Language Runtime) ASP.NET 4.0 ASP.NET MVC 2.0(最新版为4.0

《圣殿祭司的ASP.NET4.0专家技术手册》----2-1 C# 4.0语言新功能

2-1 C# 4.0语言新功能 圣殿祭司的ASP.NET4.0专家技术手册 C# 4.0新增的语言功能,除了命名实参和可选实参(VB早已支持)较为常用,其他功能几乎是从动态基础衍生出来的便利性或灵活性,新功能如下: 命名实参和可选实参(Named and Optional Arguments): Dynamic动态类型(Dynamic Type): 共变量与反变量(Covariance and Contravariance): Office可程序性支持(Office Programmabilit