如何从URI中删除PROTOCOL

时间:2010-12-23 09:08:10

标签: c# asp.net

如何从URI中删除协议?即删除HTTP

5 个答案:

答案 0 :(得分:50)

你可以像这样使用System.Uri类:

System.Uri uri = new Uri("http://stackoverflow.com/search?q=something");
string uriWithoutScheme = uri.Host + uri.PathAndQuery + uri.Fragment;

这将为您提供 stackoverflow.com/search?q=something

修改:这也适用于 about:blank : - )

答案 1 :(得分:13)

一般意义上(不限于http / https),(绝对)uri始终是 scheme ,后跟冒号,后跟特定于方案的数据。因此,唯一安全的做法是削减计划:

    string s = "http://stackoverflow.com/questions/4517240/";
    int i = s.IndexOf(':');
    if (i > 0) s = s.Substring(i + 1);

对于http和其他一些人,您可能还需要.TrimStart('/'),但这是计划的一部分,并且不保证存在。琐碎的例子:about:blank

答案 2 :(得分:11)

最好的(也是我最漂亮的)方法是使用Uri类将字符串解析为绝对URI,然后使用GetComponents方法和正确的UriComponents枚举删除方案:

belongs_to :product, class_name: "Product",  foreign_key: "data ->'product_id'"

有待进一步参考:Uri uri; if (Uri.TryCreate("http://stackoverflow.com/...", UriKind.Absolute, out uri)) { return uri.GetComponents(UriComponents.AbsoluteUri &~ UriComponents.Scheme, UriFormat.UriEscaped); } 枚举是用FlagsAttribute修饰的,因此可以在其上使用按位运算(例如UriComponents&)。在这种情况下,|使用AND运算符和按位补码运算符从&~中删除UriComponents.Scheme的位。

答案 3 :(得分:1)

您可以使用RegEx。以下样本将满足您的需求。

    using System;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {
      string txt="http://www.google.com";

      string re1="((?:http|https)(?::\\/{2}[\\w]+)(?:[\\/|\\.]?)(?:[^\\s\"]*))";    // HTTP URL 1

      Regex r = new Regex(re1,RegexOptions.IgnoreCase|RegexOptions.Singleline);
      Match m = r.Match(txt);
      if (m.Success)
      {
            String httpurl1=m.Groups[1].ToString();
            Console.Write("("+httpurl1.ToString()+")"+"\n");
      }
      Console.ReadLine();
    }
  }
}

如果有帮助,请告诉我

答案 4 :(得分:1)

这不是最美丽的方式,但尝试这样的事情:

var uri = new Uri("http://www.example.com");
var scheme = uri.Scheme;
var result = uri.ToString().SubString(scheme.Length + 3);