转载地址:http://www.cnblogs.com/oec2003/archive/2010/07/27/1785862.html

URL重写有很多的好处,如有利于SEO、便于记忆、隐藏真实路径使安全性提高、便于更新等等。在AspNet4.0之前的版本中要实现URL重写比较复杂,有时还会借助第三方类库,而在AspNet4.0中可以很方面实现,下面就一步一步来讲解怎样在AspNet4.0中实现URL重写。

1 打开VS2010,创建一个AspNet项目命名为UrlRewriterDemo。

可以看到AspNet4中的项目结构有点类似AspNet MVC ,加了很多现成的东西,只需稍加修改就可以变成一个简单的个人站点。

2 打开Global.asax文件,引用命名空间System.Web.RoutingSystem.Web.Routing命名空间在Net3.5中就已经存在,不过功能没有4.0中的强大。在该文件中添加如下方法:

void RegisterRoutes(RouteCollection routes)
{
routes.MapPageRoute("productdetail",
"products/{category}/{name}",
"~/test.aspx", false,
new RouteValueDictionary { { "category", "book" }, { "name", "aspnet" } });
}

MapPageRoute方法的参数解释:

"productdetail":路由名称,取一个和当前路由设置相匹配的名称即可。

"products/{category}/{name}":URL的重写规则。

"~/test.aspx":配置对应的物理文件。

new RouteValueDictionary { { "category", "book" }, { "name", "aspnet" } }:配置默认值。

3 在Global.asax中的方法Application_Start中添加如下代码:

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

4 在项目中添加一个页面命名为test.aspx,如果命名为别的名称,在上面的MapPageRoute方法的配置物理文件的参数就应该设置为相应的名称。在test.aspx页面中添加如下内容:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h1>Url Rewriter Test Page!</h1>
</asp:Content>

5 将该项目设置为固定端口,比如10000,按F5运行项目,将URL地址修改为http://localhost:10000/products,此处的products为URL重写规则中配置的名称。运行结果如下:

6 我们在RegisterRoutes中配置了默认参数值category和name,如需要在页面中获取参数值,可以使用RouteData.Values,将test.aspx页面代码修改如下:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h1>Url Rewriter Test Page!</h1><br /> 分类名为:<%= RouteData.Values["category"] %><br />
产品名为:<%= RouteData.Values["name"] %>
</asp:Content>

7 刷新页面可以看到在RegisterRoutes中配置的默认值会呈现在页面上:

8 将URL修改为http://localhost:10000/products/computer/thinkpad,再刷新页面可以看到页面中呈现的是URL中设置的分类名和产品名:

Net4.0---AspNet中URL重写的改进(转载)的更多相关文章

  1. IIS-详解IIS中URL重写工具的规则条件(Rule conditions)

    出处:https://shiyousan.com/post/635654920639643421 本文结合官方文档和相关示例,详细记录了在IIS中URL重写工具下的规则条件(Rule conditio ...

  2. “RazorEngine.Templating.TemplateCompilationException”类型的异常在 RazorEngine.NET4.0.dll 中发生,但未在用户代码中进行处理

    错误信息: "RazorEngine.Templating.TemplateCompilationException"类型的异常在 RazorEngine.NET4.0.dll 中 ...

  3. yii2.0中url重写实现方法

    在yii框架里有前台和后台页面,举例前台url重写. 控制器与路由 控制器以Controller作为后缀,继承自yii\web\Controller; 动作以action作为前缀,public访问修饰 ...

  4. DTcmsV4.0分析学习——(3)URL重写

    3.URL重写 3.1 控制流程 通过IHttpModule控制所有页面请求,具体流程如下 (1)真实路径可正常访问 (2)前台页面通过URL重写映射aspx目录,后台页面通过URL重写映射admin ...

  5. Java中URL重写(urlrewrite+Maven)

    一.UrlRewrite的作用   UrlRewrite即地址重写,用户得到的全部都是经过处理后的URL地址.将我们的动态网页地址转化为静态的地址,如html.shtml,还可以隐藏网页的真正路径.此 ...

  6. “RazorEngine.Templating.TemplateParsingException”类型的异常在 RazorEngine.NET4.0.dll 中发生,但未在用户代码中进行处理 其他信息: Expected model identifier.

    这个问题是由于在cshtml中 引用了model这个单词  它可能和Model在解析时有冲突. 解决方法:把model换成别的单词就可以了.

  7. ASP.NET中Url重写后,打不开真正的Html页面

    不对IIS配置.html的映射,IIS站点目录下.html页面都能显示.当配置了.html的映射 IIS站点目录下真实存在的.html页面无法显示,错误信息:“页面无法显示”解决方法:1.首先照旧在网 ...

  8. IIS7下.NET4.0 网站UrlRewriter.dll重写无后缀路径 失效

    解决方法: 1.添加通配符脚本映射,选择:C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll 2.找到和网站相对的连接池,选择 ...

  9. thinkphp5和thinkphp3.2.3中URL重写出现No input file specified

    查询后解决办法是打开public目录下的.htaccess文件,把:RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 改为:RewriteRule ^(.*)$ i ...

随机推荐

  1. mysql语句分析

    explain的每个输出行提供一个表的相关信息,并且每个行包括下面的列: 1,id   select识别符.这是select的查询序列号.2,select_type 可以为一下任何一种类型simple ...

  2. std::bind(二)

    bind - boost 头文件: boost/bind.hpp bind 是一组重载的函数模板. 用来向一个函数(或函数对象)绑定某些参数. bind的返回值是一个函数对象. 它的源文件太长了. 看 ...

  3. 使用存取方法来设置Property value

    对比如下代码,第一种使用了存取方法来设置,第二种直接对实例变量操作.显然我们应该采用第一种, 使用第二种情况,简单的情况还好,如果情况一旦复杂,就非常容易出错.并且直接对实例变量操作,不会引发KVO通 ...

  4. linux (centos) 单机50w+链接 内核参数配置

    1 突破系统最大fd   查看当前文件描述符的限制数目的命令: ulimit -n .修改文件描述符的限制数目 2.1 临时改变当前会话: ulimit -n 2.2 永久变更需要下面两个步骤: ./ ...

  5. .NET笔试面试题

    .NET 1.const和readonly的区别? 2.静态类和实例区别?什么时候使用? 3.接口和抽象类的区别?什么时候使用? 4.类和结构体的区别?什么时候使用? 5.文件操作 6.序列化 7.O ...

  6. win7 电脑能上网,但是下面的图标显示红叉的解决方法

    win7 电脑能上网,但是下面的图标显示红叉的解决方法 任务管理器里面结束explorer.exe进程,然后,点击文件,新建任务,输入explorer回车看看

  7. DOM: 如何获取元素下的第一个子元素

    Element.firstChild ?,是的,这是第一种方法,当然,通常来说支持 W3C 规范的浏览器,如 Firefox 等取到的应该是 TEXT_NODE.很早之前,或者说现在最流行的方法可能是 ...

  8. quartz定时任务时间设置

    这些星号由左到右按顺序代表 :     *    *     *     *    *     *   *                                   格式: [秒] [分] ...

  9. 简单聊下Unicode和UTF-8

    今晚听同事分享提到这个,简单总结下. ## Unicode字符集 Unicode的出现是因为ASCII等其他编码码不够用了,比如ASCII是英语为母语的人发明的,只要一个字节8位就能够表示26个英文字 ...

  10. web_url、web_custom_request、web_submit_data、web_submit_form的使用实例

    业务:根据url获取图片用web_url()函数访问数据;请求方式:HTTP GET 请求;Action(){web_url("imageproxytest", "URL ...