在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!
知道区别的是什么?
答案 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;
(即,在单独的陈述中确定每个构建者属性的命运有些复杂的逻辑)。