什么是.NET相当于浏览器的URL.origin?

时间:2016-01-28 10:43:37

标签: .net url

根据https://somedomain.com:1234/someotherstuff?a=b#def这样的网址,浏览器的URLorigin属性返回https://somedomain.com:1234

var url = new URL("https://somedomain.com:1234/someotherstuff?a=b#def");
console.log(url.origin);

打印

"https://somedomain.com:1234"

.NET中是否有等价物?

我看到了Uri类,但它似乎没有一个与上面的origin对应的字段

Uri u = new Uri("https://somedomain.com:1234/someotherstuff?a=b#def");
Console.WriteLine(u.AbsolutePath);  //  /someotherstuff
Console.WriteLine(u.AbsoluteUri);   //  https://somedomain.com:1234/someotherstuff?a=b#def
Console.WriteLine(u.Fragment);      //  #def
Console.WriteLine(u.Host);          //  somedomain.com
Console.WriteLine(u.LocalPath);     //  /someotherstuff
Console.WriteLine(u.Port);          //  1234
Console.WriteLine(u.Query);         //  ?a=b
Console.WriteLine(u.DnsSafeHost);   //  somedomain.com
Console.WriteLine(u.HostNameType);  //  Dns
Console.WriteLine(u.Scheme);        //  https

从那看起来我需要这样做

string origin = u.Scheme + 
                "://" + 
                u.host + 
                (String.IsNullOrEmpty(u.Port) ? "" : (":" + u.Port)

还有一些其他我不知道的东西。

是否已经有一些跨平台(不仅仅是Windows)的.NET函数会给我相当于URL.origin的内容?

1 个答案:

答案 0 :(得分:0)

您可以替换PathAndQuery和Fragements:

var url = new Uri("https://somedomain.com:1234/someotherstuff?a=b#def#a");
var newUrl = url.AbsoluteUri.Replace(url.PathAndQuery, String.Empty).Replace(url.Fragment, String.Empty);

或者你可以在管理局之后削减部分:

var url = new Uri("https://somedomain.com:1234/someotherstuff?a=b#def#a");
var authorityIndex = url.AbsoluteUri.IndexOf(url.Authority);
var newUrl = url.AbsoluteUri.Substring(0, authorityIndex + url.Authority.Length);