65.9K
CodeProject 正在变化。 阅读更多。
Home

一个有用的 UrlBuilder 类

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.70/5 (36投票s)

2005 年 7 月 20 日

3分钟阅读

viewsIcon

163272

downloadIcon

1901

一种生成和操作 URL 的简单方法。

引言

作为 ASP.NET 开发者,构建 URL 是一个经常要做的事情。.NET Framework 慷慨地提供了许多类来帮助我们简化这个问题,但经过我一番搜索,我发现框架中缺少的一个功能是轻松处理查询字符串参数的方法。我四处寻找了一下,发现了一些由不同人编写的解决方案,但它们都没有基于框架中已有的任何东西。框架提供了非常有用的 System.UriBuilder 类,但除了能够返回一个包含 URI 查询部分的字符串之外,它没有内置的方法来处理查询字符串参数。虽然这本身并没有什么用,但它确实帮助我们创建了一个派生类,扩展了 UriBuilder 中的功能。输入 UrlBuilder。虽然考虑到现代命名约定,UriBuilder 是一个更准确的名称,但 UrlBuilder 在语义上是等价的,更重要的是,它不是框架中已有的任何东西的重复名称。

如果读者希望深入研究代码以了解其内部工作原理,可以在下载中找到,供您阅读,并且应该很容易理解它是如何组合在一起的。我在这里尝试做的只是通过一些示例代码来简要解释如何使用 UrlBuilder 类,这些示例代码希望能够概述和突出显示该类的显着特征。所以,事不宜迟,让我们深入研究一下。

UrlBuilder 类可以通过多种方式实例化,但为简单起见,让我们假设用户希望使用字符串作为此 UrlBuilder 实例的初始化程序。

UrlBuilder builder = new 
    UrlBuilder(“http://www.codeproject.com/index.asp?cat=4”);

该类中提供的其余构造函数重载与基类 UriBuilder 的构造函数重载完全相同,但有一个例外,即它接受一个 System.Web.UI.Page 对象。当用户希望仅重定向到具有不同查询字符串参数的同一页面时,这非常有用。该对象也可以使用 System.Uri 对象进行初始化。实例化后,我们可以操作 URI 的任何部分(请参阅 System.Uri 文档)。

builder.Host = “www.gibbons.co.za”;
builder.Path = “archive/2005”;

有趣的是,正斜杠“/”在 Path 字符串的开头是可选的。无论哪种方式,UriBuilder 类都将返回一个格式正确的 URI。UriBuilder 类没有提供仅设置 URI 页面名称部分的方法,因此我添加了一个名为 PageName 的新属性,它允许您仅设置所需页面的名称。

builder.PageName = “06.aspx”;

到目前为止,除了 PageName 属性之外,这没有什么新东西;所有这些都可以通过 UriBuilder 类完成。当我们尝试操作查询字符串参数时,UrlBuilder 类的真正用处就显现出来了,如下所示

builder.QueryString[“cat”] = 12345;
builder.QueryString[“a”] = “A”;
builder.QueryString[“b”] = “B”; 

如果查询字符串已经包含构造函数传递给构造函数的 URI 中包含的参数(在本例中为“cat”),则该参数的值将被新值覆盖。如果该参数尚不存在,则将其附加到生成的查询字符串。此外,用于存储查询字符串对的内部 StringDictionary 对象的所有属性和方法都可供用户使用。例如,您可以删除其中一个参数

builder.QueryString.Remove(“cat”); 

或者检查集合是否包含给定的键或值

builder.QueryString.ContainsKey(“cat”);
builder.QueryString.ContainsValue(“12345”);

最后,有两种使用 URI 的方式。首先,通过调用

string uri = builder.ToString(); 

或者简单地通过调用

builder.Navigate(); 

这将执行重定向到当前包含在该对象中的 URI。

祝您编码愉快。

© . All rights reserved.