新的Uri(..)和新的UriBuilder(..)有什么区别?同一主机的 Uri?



在web应用程序中,我有一个用于身份验证的audienceURI。当我像下面这样从代码中设置它时:

var audience1 = new UriBuilder("dev.website.com")
                 {
                    Port = 443,
                    Scheme = "https",
                    Path = "/"
                 }.Uri; // Does not work!

它不工作。

但是当我这样设置时:

var audenice2 = new Uri("https://dev.website.com"); // It works!

它工作得很好。

有趣的是,下面的工作很好!!

var audience3 = new Uri(audience1.ToString());  // It works!

知道有什么区别吗?

UriBuilder(像任何构建器模式的实现一样)允许您提供以"分段"方式组装更大对象所需的部分,然后允许您生成最终产品的实例(使用.Uri属性)。你不一定需要一次构建对象(也就是说,你可以随着时间的推移改变一个构建器)。

然而,似乎你没有正确使用UriBuilder(String)构造函数。从MSDN

这个构造函数初始化一个urbuilder类的新实例,它的Fragment、Host、Path、Port、Query、Scheme和Uri属性设置在Uri中指定。

意味着你需要这样做来使用这个构造函数重载:

 var audience1 = new UriBuilder("https://dev.website.com").Uri;

(或甚至https://dev.website.com:443)

这对你来说是没有用的,因为它比直接用同一个字符串构造Uri没有任何好处。

UriBuilder通常用于分段组装Uri,如下所示:

var myUriBuilder = new UriBuilder();
myUriBuilder.Host = (host == "dev")
  ? "dev.website.com"
  : "qa.website.com";
 if (useSsl)
 {
     myUriBuilder.Scheme = "https";
     myUriBuilder.Port = 443;
 }
var myUri = myUriBuilder.Uri;

(即。使用一些复杂的逻辑(在单独的语句中决定每个构建器属性的命运)

相关内容

  • 没有找到相关文章

最新更新