webform中也可以直接url路由
2012-09-07 13:07
134 查看
以前在做asp的时候,要把 /default.asp?id=123映射成/default/123,需要借助IISRewriter这个组件,到了asp.net以后,可以用代码写了,但是个人觉得很麻烦,要写一堆代码,还要修改web.config,现在好了:asp.net4.0中 asp.net mvc中的路由规则全部可以用于webform了
使用步骤:
1.Global.ascx.cs中先注册路由规则
在根目录下弄个default.aspx来测试下:
后端代码:
先看看传统的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>
出处:http://yjmyzz.cnblogs.com
使用步骤:
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>
出处:http://yjmyzz.cnblogs.com
相关文章推荐
- Asp.Net4.0/VS2010新变化(3):webform中也可以直接url路由
- Asp.Net4.0/VS2010新变化(3):webform中也可以直接url路由
- Asp.Net4.0/VS2010新变化(3):webform中也可以直接url路由
- Asp.Net4.0/VS2010新变化(3):webform中也可以直接url路由2
- java项目中普遍存在的一个bug,用户直接可以通过url访问本人没有权限的页面
- 在web项目中把文件放在什么地方可以直接根据url访问
- 在ISP 设备上建立BGP路由是,最好是吧,ISP连接CE直接的线路路由通告到BGP进程里,这样BGP的CE才可以学到PE-CE的直连路由,除非题目要求ISP的PE不可以通知face面向CE的直连路由
- vue中如何不通过路由直接获取url中的参数
- Nginx配置ReactJs项目,Url后面直接输入路由路径时老报404问题。
- web工程下的有些路径的jsp可以直接在http url中输入进行显示,有些却不能显示??The requested resource is not available.
- vue不通过路由直接获取url中参数的方法示例
- LNMP一键安装包+Thinkphp搭建基于pathinfo模式的路由(可以去除url中的.php)
- URL 的查询字符串,比如localhost:8080?name=Alice里面的name,可以用req.query.name拿到。请修改一个路由,使之可以收到查询字符串,然后输出'Hello ' +
- WebForm设置URL路由后要照顾好之前的连接
- 让UIImageView可以直接设置网络图片url,并且支持图片缓存
- PHP安全编程:留心后门URL 直接可以通过URL访问(转)
- link_to和其对应要跳转的的url,用path和直接路由方法
- 部分添加epel源失败的可以试试直接把mirror站网址写到baseurl里
- js获取URL参数的2个方法,可以直接使用
- WCF 的 WebGet 方式,可以当url 直接访问服务内方法