我目前正在使用 .NET 1.1 框架开发一个项目,但我被困在了这一点上。我有一个像“ http://www.example.com/mypage/default.aspx ”这样的字符串,或者它可能是“ http://www.example.edu/mypage/default.aspx ”或“ http://www .example.eu/mypage/default.aspx ”。如何从这种字符串中提取基本 URl。
谢谢
我目前正在使用 .NET 1.1 框架开发一个项目,但我被困在了这一点上。我有一个像“ http://www.example.com/mypage/default.aspx ”这样的字符串,或者它可能是“ http://www.example.edu/mypage/default.aspx ”或“ http://www .example.eu/mypage/default.aspx ”。如何从这种字符串中提取基本 URl。
谢谢
您可以使用URI类来获取主机名。
var uri = new Uri("http://www.example.com/mypage/default.aspx");
var host = uri.Host;
编辑您可以使用uri.Scheme和uri.Port来获取 .Scheme 例如 (http, ftp) 和 .Port 来获取端口号,例如 (8080)
string host = uri.Host;
string scheme = uri.Scheme;
int port = uri.Port;
您可以使用Uri.GetLeftPart获取基本 URL。
GetLeftPart方法返回一个字符串,该字符串包含 URI 字符串的最左边部分,以 part 指定的部分结束。
var uri = new Uri("http://www.example.com/mypage/default.aspx");
var baseUri = uri.GetLeftPart(System.UriPartial.Authority);
以下示例显示了一个 URI 以及使用 Scheme、Authority、Path 或 Query、MSDN调用 GetLeftPart 的结果。
简答
myUri.GetLeftPart(System.UriPartial.Authority)
长答案
假设“基本 URI”的意思类似于http://www.example.com
,您可以像这样获得基本 uri:
var myUri= new Uri("http://www.example.com/mypage/default.aspx");
var baseUri = myUri.GetLeftPart(System.UriPartial.Authority)
这给出了:http://www.example.com
注意:uri.Host
给出:(www.example.com
不包括端口或方案)
var builder = new UriBuilder("http://www.example.com/mypage/default.aspx");
builder.Path = String.Empty;
var baseUri = builder.Uri;
var baseUrl = baseUri.ToString();
// http://www.example.com/
只需为 Uri 类创建一个扩展。在我看来,从一开始就应该存在的东西。它会让你的生活更轻松。
public static class UriExtensions
{
public static Uri AttachParameters(this Uri uri,
NameValueCollection parameters)
{
var stringBuilder = new StringBuilder();
string str = "?";
for (int index = 0; index < parameters.Count; ++index)
{
stringBuilder.Append(str +
System.Net.WebUtility.UrlEncode(parameters.AllKeys[index]) +
"=" + System.Net.WebUtility.UrlEncode(parameters[index]));
str = "&";
}
return new Uri(uri + stringBuilder.ToString());
}
public static string GetBaseUrl(this Uri uri) {
string baseUrl = uri.Scheme + "://" + uri.Host;
return baseUrl;
}
public static string GetBaseUrl_Path(this Uri uri) {
string baseUrl = uri.Scheme + "://" + uri.Host + uri.AbsolutePath;
return baseUrl;
}
}
用法:
//url - https://example.com/api/rest/example?firstname=Linus&lastname=Trovalds
Uri myUri = new Uri("https://example.com/api/rest/example").AttachParameters(
new NameValueCollection
{
{"firstname","Linus"},
{"lastname","Trovalds"}
}
);
// https://example.com
string baseUrl = myUri.GetBaseUrl();
// https://example.com/api/rest/example
string baseUrlandPath = myUri.GetBaseUrl_Path();
Host Name
如果您想将所有 3 个.com
都列在一个列表AbsolutePath
中,您也可以从这里开始
var uriList = new List<string>()
{
"http://www.mysite.com/mypage/default.aspx",
"http://www.mysite.edu/mypage/default.aspx",
"http://www.mysite.eu/mypage/default.aspx"
};
var holdList = new List<string>();
foreach (var uriName in uriList)
{
Uri uri = new Uri(uriName);
holdList.Add(uri.Host);
}