如何从URI中删除协议?即删除HTTP
答案 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);