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,哈哈

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏听雨堂

页面状态保持机制(编辑中)

Web应用程序中,有很多状态需要在页面的反复回调中能够保持住,还有一些状态需要在页面之间保持。对于状态的保持,是一个值得研究的问题。状态处理不当是页面失效或错误...

2695
来自专栏跟着阿笨一起玩NET

如何在使用了updatepanel后弹出提示信息

转载:http://www.cnblogs.com/brusehht/archive/2009/03/19/1416802.html

661
来自专栏hbbliyong

WCF浅尝

1.首先先建立一个WCF服务应用程序 ? 2.再建立一个宿主程序,这里用控制台,添加服务引用,这里会报错: ? 点击页面确定,回到添加服务页面 ? 点击箭头有如...

35710
来自专栏程序员的SOD蜜

使用微服务架构思想,设计部署OAuth2.0授权认证框架

2.8K3
来自专栏代码世界

Django-admin管理工具

1472
来自专栏JadePeng的技术博客

asp.net MVC 权限设计

几点说明:     1、该权限系统是个网站用的,用户简单,因此不涉及到部门这些信息     2、基于将角色与controller、action相关联来判断...

4859
来自专栏我的博客

安卓上传文件(绝对可以用)

说明:使用是httpclient+MultipartEntity,因此需要导入包:httpmime-4.1.1(这个包非常重要!务必导入!) 写在前面:我只是贴...

3775
来自专栏.NET开发那点事

AServer - 基于Asp.net core Kestrel的超迷你http服务器

  AServer是基于ASP.NET Core Kestrel封装的一个超迷你http服务器。它可以集成进你的Core程序里,用来快速的响应Http请求,而不...

1201
来自专栏GreenLeaves

WCF系列教程之WCF消息交换模式之单项模式

1、使用WCF单项模式须知 (1)、WCF服务端接受客户端的请求,但是不会对客户端进行回复 (2)、使用单项模式的服务端接口,不能包含ref或者out类型的参数...

1755
来自专栏更流畅、简洁的软件开发方式

【自然框架】QuickPager分页控件,新增一种分页方式——伪URL分页(Postback版)

适用场景   先说一下伪URL分页的适用场景。在网站的网页里实现查询功能,如果查询条件比较少的话,还比较好办,把查询条件放到URL里面传递即可。但是如果查...

2376

扫码关注云+社区