从c#中的字符串中提取基本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 该方法返回一个

我目前正在从事一个使用.NET1.1框架的项目,我被困在这一点上。我有一个类似“”的字符串,也可能是“”或“”。如何从此类字符串中提取基本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();