从c#中的字符串中提取基本URl?
我目前正在从事一个使用.NET1.1框架的项目,我被困在这一点上。我有一个类似“”的字符串,也可能是“”或“”。如何从此类字符串中提取基本URl 谢谢您可以使用类获取主机名从c#中的字符串中提取基本URl?,c#,.net,string,C#,.net,String,我目前正在从事一个使用.NET1.1框架的项目,我被困在这一点上。我有一个类似“”的字符串,也可能是“”或“”。如何从此类字符串中提取基本URl 谢谢您可以使用类获取主机名 var uri = new Uri("http://www.example.com/mypage/default.aspx"); var host = uri.Host; 编辑您可以使用和获取.Scheme,例如(http,ftp)和.Port,以获取端口号,如(8080) 您可以使用获取基本URL 该方法返回一个
var uri = new Uri("http://www.example.com/mypage/default.aspx");
var host = uri.Host;
编辑您可以使用和获取.Scheme,例如(http,ftp)和.Port,以获取端口号,如(8080)
您可以使用获取基本URL
该方法返回一个包含最左边
URI字符串的一部分,以part指定的部分结尾
以下示例显示了URI以及使用Scheme、Authority、Path或Query调用GetLeftPart的结果。
如果你想把这三个项目都列在一个列表中,你也可以从这里开始 一旦您获得
主机名
,您就可以执行许多选项。如果您希望所有内容都通过.com
,请使用绝对路径
方法
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);
}
var uriList=新列表()
{
"http://www.mysite.com/mypage/default.aspx",
"http://www.mysite.edu/mypage/default.aspx",
"http://www.mysite.eu/mypage/default.aspx"
};
var holdList=新列表();
foreach(uriList中的var uriName)
{
Uri=新的Uri(名称);
添加(uri.Host);
}
简短回答
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
(不包括端口或方案)只需创建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;
}
}
您需要使用正则表达式为什么有这么多“使用Uri类”的变体?如果有人已经回答了,最好对他们的答案提出任何改进建议,而不是创造一打近乎重复的答案。@EricJ.-这就是以太网的工作原理-任何人在同一时间发布,而不是冲突解决-只有几个好的幸存下来:)我相信你可以在网上找到你想要的东西page@AlexeiLevenkov更像是一个懒散的垃圾问题,应该得到一个懒散的垃圾答案。我会把它拿走,因为它冒犯了你。。。或者我也可以带着笑脸去寻求帮助。这有帮助。谢谢大家的回复。@HRK:我不明白提供主机的答案如何满足对“基本URI”的请求。这不是你要的.+1到这个@spender(+1)-因为没有真正严格的定义“基本URI”是什么,所以很难猜测原始海报需要什么…:)这使得
www.example.com
(不包括任何端口或协议)这正是我的一个问题所需要的!我很欣赏这个实际的答案。如果URI没有使用默认的端口,您还需要附加端口,这是一个潜在的错误
myUri.GetLeftPart(System.UriPartial.Authority)
var myUri= new Uri("http://www.example.com/mypage/default.aspx");
var baseUri = myUri.GetLeftPart(System.UriPartial.Authority)
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();