在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;
(即。使用一些复杂的逻辑(在单独的语句中决定每个构建器属性的命运)