新Uri(..)和新UriBuilder(..)之间的区别是什么。同一主机的Uri?

时间:2015-05-25 18:10:09

标签: .net uri wif uribuilder

在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!

知道区别的是什么?

1 个答案:

答案 0 :(得分:0)

UriBuilder(与构建器模式的任何实现一样)允许您提供在零碎的组件中组装更大对象所需的部件。时尚,然后允许您生成最终产品的实例(使用.Uri属性)。您不一定需要一次性构建对象(即,您可以随时改变构建器)。

但是,您似乎没有正确使用UriBuilder(String)构造函数。 From MSDN

  

此构造函数初始化UriBuilder类的新实例,其中包含uri中指定的Fragment,Host,Path,Port,Query,Scheme和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;

(即,在单独的陈述中确定每个构建者属性的命运有些复杂的逻辑)。