1

次のように生成してURIいます(このコードは単純化され、改ざんされています):

Uri baseUri = "http://localhost/MyApp/Account/Login";
Uri fullUri = GetFullUri(baseUri, user);

GetFullUri は次のようになります (これは .NET 2 アセンブリにあります)。

public Uri GetFullUri(Uri baseUri, User user)
{
    string token = GetTokenFromUser(user); //Implementation not important.

    //Create a new URI based on the base URI, adding a query string.
    return new Uri(baseUri, string.Format("?Token={0}", token));
}

.NET 4 アセンブリから呼び出すGetFullUriと、結果は正しく、fullUri次のようになります。

http://localhost/MyApp/Account/Login?Token=ABC123

次に、.NET 2 アセンブリから同じ正確なコードを呼び出しましたが、結果は正しくありません。fullUri次のようになります。

http://localhost/MyApp/Account/?Token=ABC123

.NET 2 の結果で、4 番目の最後のセグメントである "Login" が欠落していることに注意してください。それとどうしたの?

4

1 に答える 1

1

.NET 4.0 で修正されたバグのようです。を使用してみてくださいUriBuilder。これは両方で機能します。

public Uri GetFullUri(Uri baseUri, User user)
{
   string token = GetTokenFromUser(user); //Implementation not important.

   var builder = new UriBuilder(baseUri);
   builder.Query = string.Format("Token={0}", token);
   return builder.Uri;
}
于 2012-11-30T16:51:13.297 に答える