9

我在 .NET 中发现了一个奇怪的行为 UriBuilder

情景 1:

 Dim uri As New UriBuilder("http://www.test/login.aspx")
 uri.Query = "?test=Test"
 Dim url As String = uri.ToString()

运行此代码后,url 字符串包含“http://www.test/login.aspx??test=Test”

解决方案是不添加?。

情景 2:

 Dim uri As New UriBuilder("http://www.test/login.aspx?test=123")
 uri.Query += "&abc=Test"
 Dim url As String = uri.ToString()

运行该代码后,我们又得到了两个 ? “http://www.test:80/login.aspx??test=123&abc=Test”。

那么在使用 uri 构建器时我做错了什么吗?

4

2 回答 2

9

下面的示例设置 Query 属性。

   UriBuilder baseUri = new UriBuilder("http://www.contoso.com/default.aspx?Param1=7890");
   string queryToAppend = "param2=1234";

   if (baseUri.Query != null && baseUri.Query.Length > 1)
       baseUri.Query = baseUri.Query.Substring(1) + "&" + queryToAppend; 
   else
       baseUri.Query = queryToAppend;

第一个字符?不是必需的。

更多信息:http: //msdn.microsoft.com/en-us/library/system.uribuilder.query.aspx

于 2012-10-26T12:31:09.850 回答
7

根据对该类的MSDN 文档的评论,如果您多次设置查询属性,则会出现此错误。

刚刚查看了反编译器,?如果设置的值不为空,则 Query 的设置器总是在前面加上前导。

于 2012-06-18T13:01:03.573 回答