<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>URL重写 on 冯威的博客</title><link>https://fwhyy.com/tags/url%E9%87%8D%E5%86%99/</link><description>Recent content in URL重写 on 冯威的博客</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Wed, 28 Jul 2010 00:00:00 +0800</lastBuildDate><atom:link href="https://fwhyy.com/tags/url%E9%87%8D%E5%86%99/atom.xml" rel="self" type="application/rss+xml"/><item><title>Net4.0—AspNet中的控件HyperLink的改进（支持路由跳转）</title><link>https://fwhyy.com/2010/07/net-4-aspnet-controls-the-hyperlink-in-the-improvement/</link><pubDate>Wed, 28 Jul 2010 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2010/07/net-4-aspnet-controls-the-hyperlink-in-the-improvement/</guid><description>&lt;p&gt;作过Web开发的人对HyperLink控件一定非常熟悉，在客户端生成的代码就是一个a标签。AspNet4中的Hyperlink控件相比以前的版本做了些改进，可以更好地支持URl重写，下面结合在&lt;a href="http://blog.fwhyy.com/?p=20"&gt;Net4.0—AspNet中URL重写的改进&lt;/a&gt;一文中的例子来讲解下Hyperlink这个新的功能。&lt;/p&gt;
&lt;p&gt;1 在项目中的Default.aspx页面中加入一个Hyperlink控件，在设计视图中右击该控件，选择属性，在属性窗口中选择Expresstions，如下图：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300729640.webp" alt="2010-07-27_172142" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;2 点击右边的三个小点点，在弹出的对话框中进行如下设置：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300729586.webp" alt="2010-07-27_172422" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;设置RouteName为productdetail，就是让该链接导向test.aspx页面，因为在Global.asax中设置名为productdetail的路由对应的物理文件时test.aspx。RouteValus就是配置参数项，此处的category和name也是在Global.asax中配置的。&lt;/p&gt;
&lt;p&gt;3 设置好后点击OK，切换到代码视图，可以看到代码如下：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;asp:HyperLink ID=&amp;#34;HyperLink1&amp;#34; runat=&amp;#34;server&amp;#34;
 NavigateUrl=&amp;#34;&amp;lt;%$ RouteUrl:RouteName=productdetail,category=computer,name=thinkpad %&amp;gt;&amp;#34;&amp;gt;
 Test Page&amp;lt;/asp:HyperLink&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;4 设置Default.aspx为起始页，按F5运行，点击链接Test Page链接，会跳转到test.aspx页面，如下图：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300729625.webp" alt="2010-07-27_173712" loading="lazy" decoding="async"&gt;
&lt;/p&gt;</description></item><item><title>Net4.0—AspNet中URL重写的改进</title><link>https://fwhyy.com/2010/07/net-4-aspnet-url-rewriting-in-the-improvement/</link><pubDate>Tue, 27 Jul 2010 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2010/07/net-4-aspnet-url-rewriting-in-the-improvement/</guid><description>&lt;p&gt;URL重写有很多的好处，如有利于SEO、便于记忆、隐藏真实路径使安全性提高、便于更新等等。在AspNet4.0之前的版本中要实现URL重写比较复杂，有时还会借助第三方类库，而在AspNet4.0中可以很方面实现，下面就一步一步来讲解怎样在AspNet4.0中实现URL重写。&lt;/p&gt;
&lt;p&gt;1 打开VS2010，创建一个AspNet项目命名为UrlRewriterDemo。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300727900.webp" alt="2010-07-27_100812" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;可以看到AspNet4中的项目结构有点类似AspNet MVC ，加了很多现成的东西，只需稍加修改就可以变成一个简单的个人站点。&lt;/p&gt;
&lt;p&gt;2 打开Global.asax文件，引用命名空间System.Web.Routing，System.Web.Routing命名空间在Net3.5中就已经存在，不过功能没有4.0中的强大。在该文件中添加如下方法:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;void RegisterRoutes(RouteCollection routes)
{
 routes.MapPageRoute(&amp;#34;productdetail&amp;#34;,
 &amp;#34;products/{category}/{name}&amp;#34;,
 &amp;#34;~/test.aspx&amp;#34;, false,
 new RouteValueDictionary { { &amp;#34;category&amp;#34;, &amp;#34;book&amp;#34; }, { &amp;#34;name&amp;#34;, &amp;#34;aspnet&amp;#34; } });
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;MapPageRoute方法的参数解释：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“productdetail”：路由名称，取一个和当前路由设置相匹配的名称即可。&lt;/li&gt;
&lt;li&gt;“products/{category}/{name}”：URL的重写规则。&lt;/li&gt;
&lt;li&gt;“~/test.aspx”：配置对应的物理文件。&lt;/li&gt;
&lt;li&gt;new RouteValueDictionary { { “category”, “book” }, { “name”, “aspnet” } }：配置默认值。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;3 在Global.asax中的方法Application_Start中添加如下代码：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;void Application_Start(object sender, EventArgs e)
{
 RegisterRoutes(RouteTable.Routes);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;4 在项目中添加一个页面命名为test.aspx，如果命名为别的名称，在上面的MapPageRoute方法的配置物理文件的参数就应该设置为相应的名称。在test.aspx页面中添加如下内容：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;asp:Content ID=&amp;#34;Content2&amp;#34; ContentPlaceHolderID=&amp;#34;MainContent&amp;#34; runat=&amp;#34;server&amp;#34;&amp;gt;
 &amp;lt;h1&amp;gt;Url Rewriter Test Page!&amp;lt;/h1&amp;gt;
&amp;lt;/asp:Content&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;5 将该项目设置为固定端口，比如10000，按F5运行项目，将URL地址修改为http://localhost:10000/products，此处的products为URL重写规则中配置的名称。运行结果如下：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300727307.webp" alt="2010-07-27_104717_thumb" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;6 我们在RegisterRoutes中配置了默认参数值category和name，如需要在页面中获取参数值，可以使用RouteData.Values，将test.aspx页面代码修改如下：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;asp:Content ID=&amp;#34;Content2&amp;#34; ContentPlaceHolderID=&amp;#34;MainContent&amp;#34; runat=&amp;#34;server&amp;#34;&amp;gt;
 &amp;lt;h1&amp;gt;Url Rewriter Test Page!&amp;lt;/h1&amp;gt;&amp;lt;br /&amp;gt;

 分类名为：&amp;lt;%= RouteData.Values[&amp;#34;category&amp;#34;] %&amp;gt;&amp;lt;br /&amp;gt;
 产品名为：&amp;lt;%= RouteData.Values[&amp;#34;name&amp;#34;] %&amp;gt;
&amp;lt;/asp:Content&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;7 刷新页面可以看到在RegisterRoutes中配置的默认值会呈现在页面上：&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201300728509.webp" alt="2010-07-27_111408" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;8 将URL修改为http://localhost:10000/products/computer/thinkpad，再刷新页面可以看到页面中呈现的是URL中设置的分类名和产品名:&lt;/p&gt;</description></item></channel></rss>