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()

そのコードが実行された後、再び 2 つの ? があります。"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 に答える