Как удалить PROTOCOL из URI

как я могу удалить протокол из URI? т.е. удалить HTTP

Ответ 1

Вы можете использовать этот класс System.Uri следующим образом:

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

Этот wil даст вам stackoverflow.com/search?q=something

Изменить: это также работает примерно: blank: -)

Ответ 2

В общем смысле (не ограничиваясь http/https), (абсолютный) uri всегда является схемой, сопровождаемой двоеточием, за которой следуют данные, специфичные для схемы. Итак, единственная безопасная вещь, которую нужно сделать, - это вырезать по схеме:

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

В случае с http и несколькими другими вам также может понадобиться .TrimStart('/'), но это не часть схемы и не гарантируется существование. Тривиальный пример: about:blank.

Ответ 3

Лучший (и для меня самый красивый) способ - использовать класс Uri для синтаксического анализа строки до абсолютного URI, а затем используйте метод GetComponents с правильным UriComponents перечисление, чтобы удалить схему:

Uri uri;
if (Uri.TryCreate("http://stackoverflow.com/...", UriKind.Absolute, out uri))
{
    return uri.GetComponents(UriComponents.AbsoluteUri &~ UriComponents.Scheme, UriFormat.UriEscaped);
}

Дальнейшая ссылка: перечисление UriComponents украшено FlagsAttribute, поэтому побитовые операции (например, & и |). В этом случае &~ удаляет биты для UriComponents.Scheme из UriComponents.AbsoluteUri с помощью оператора AND в сочетании с оператором побитового дополнения.

Ответ 4

Для этого вы можете использовать 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();
    }
  }
}

Сообщите мне, помогает ли это

Ответ 5

Это не самый красивый способ, но попробуйте что-то вроде этого:

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