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中先注册路由规则

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

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-12-20 04:59:52

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

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

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

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.

ASP.NET4.0新特性

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

[转]Material Design Library 23.1.0的新变化与代码实战

Design Library出来已经快有一个月了,当时大概看了一下介绍这个新版本变化的译文,内容不多,给我印象最深的就是Percent lib.AppBarLayout 和NavigationView的变化,当然还有Design Lib的一些控件内部实现的变化没有介绍,从而使得在使用新版本的控件时候难免因为版本的不同会发生一些异常,而本人正好在上个星期对一个项目换库时发现了这个问题,什么问题呢? NavigationView使用注意的问题 就是NavigationView的内部实现发生了改变,它

Material Design Library 23.1.0的新变化与代码实战

Design Library出来已经快有一个月了,当时大概看了一下介绍这个新版本变化的译文,内容不多,给我印象最深的就是Percent lib.AppBarLayout 和NavigationView的变化,当然还有Design Lib的一些控件内部实现的变化没有介绍,从而使得在使用新版本的控件时候难免因为版本的不同会发生一些异常,而本人正好在上个星期对一个项目换库时发现了这个问题,什么问题呢? NavigationView使用注意的问题 就是NavigationView的内部实现发生了改变,它

ASP.NET4.0所有网页指令

ASP.NET网页指令(Page Directive)就是在网页开头的标签声明: <% Page Language="C#" %> 而指令的作用在于指定网页和用户控件编译程序,在处理ASP.NET Web Form网页(.aspx文件)和用户控件(.ascx)文件时所使用的设置.下表为ASP.NET4.0的所有指令. ASP.NET4.0指令 指令 说明 @Master 将网页识别为主页面(Master Page),并定义用于ASP.NET Web网页剖析器和编译程序且只可

iis asp.net4.0注册

asp.net4.0下载地址:https://download.microsoft.com/download/9/5/A/95A9616B-7A37-4AF6-BC36-D6EA96C8DAAE/dotNetFx40_Full_x86_x64.exe asp.net4.0注册: 打开程序-运行-cmd:输入一下命令重新注册IISC:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i asp.net2.0注册: C:

本机搭建ASP.NET4.0动态网页https://www.yljianzhan.com

关于聊天室(手机上看,visual studio 2017要把字体调到最大,窗口尺寸也要调整到大的吓人!!还有手机登录后不显示用户列表!)“未将对象引用设置到对象的实例”?(其实我是想说说这个“空值”问题----if语句!!!)参考书籍:ASP.NET从入门到精通(第五版)清华大学出版社79.80元 (2.3.5聊天室一文中省略掉了很多重要的内容,根本无法成功实现运行,主页没有考虑到加空值问题语句:if (Session["userName"] != null)以及提供下载的空网站聊天

ASP.NET4 与 VS2010 Web 开发页面服务改进

转:http://blog.163.com/kele_lipeng/blog/static/81345278201132754729336/ 作者:朱先忠 本文将接着上一篇 ASP.NET4与VS2010Web开发核心服务改进 继续讨论核心ASP.NET服务方面的改进. 四.永久重定向页面 一种常见的Web应用程序做法是,随着时间的推移经常移动网页和其他内容,从而导致搜索引擎失效链接的积累.在ASP.NET中,开发商通常采用的处理旧网址请求的方案是,使用 Response.Redirect方法把