根据https://somedomain.com:1234/someotherstuff?a=b#def
这样的网址,浏览器的URL
类origin
属性返回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
的内容?
答案 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);