Answers:
您可以使用 System.Uri
Uri url = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
string path = String.Format("{0}{1}{2}{3}", url.Scheme,
Uri.SchemeDelimiter, url.Authority, url.AbsolutePath);
或者你可以使用 substring
string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
string path = url.Substring(0, url.IndexOf("?"));
编辑:修改第一个解决方案以在评论中反映brillyfresh的建议。
substring
如果没有查询字符串,该方法将给出错误。使用string path = url.Substring(0, url.IndexOf("?") > 0? url.IndexOf("?") : url.Length);
代替。
这是一个更简单的解决方案:
var uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
string path = uri.GetLeftPart(UriPartial.Path);
从这里借来的:截断查询字符串并返回干净的URL C#ASP.net
return Request.Url.GetLeftPart(UriPartial.Path);
uri.GetComponent(
是获取Uri零件的另一种很棒的方法。直到现在我都不知道这两个!
Request.RawUrl.Split(new[] {'?'})[0];
RawUrl
将在 URL重写之前获得URL,所以也许使用AbsoluteUri
? Request.Url.AbsoluteUri.Split('?')[0]
好的答案也在这里找到答案的来源
Request.Url.GetLeftPart(UriPartial.Path)
您可以使用Request.Url.AbsolutePath
获取页面名称以及Request.Url.Authority
主机名和端口。我不相信有内置属性可以为您提供所需的确切信息,但您可以自己组合它们。
Split()变化
我只想添加此变体以供参考。Urls通常是字符串,因此使用Split()
方法比更为简单Uri.GetLeftPart()
。并且Split()
还可以使其与相对,空和null值一起工作,而Uri引发异常。此外,Ulls还可能包含一个散列,例如/report.pdf#page=10
(在特定页面上打开pdf)。
以下方法处理所有这些类型的Urls:
var path = (url ?? "").Split('?', '#')[0];
示例输出:
page.html ---> page.html
这是使用@Kolman答案的扩展方法。与GetLeftPart相比,记住使用Path()稍微容易一点。您可能想要将Path重命名为GetPath,至少直到它们将扩展属性添加到C#为止。
用法:
Uri uri = new Uri("http://www.somewhere.com?param1=foo¶m2=bar");
string path = uri.Path();
班上:
using System;
namespace YourProject.Extensions
{
public static class UriExtensions
{
public static string Path(this Uri uri)
{
if (uri == null)
{
throw new ArgumentNullException("uri");
}
return uri.GetLeftPart(UriPartial.Path);
}
}
}
string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
string path = url.split('?')[0];
Request.RawUrl.Split('?')[0]
仅用于URL名称!
我创建了一个简单的扩展,因为其他一些答案如果没有以a QueryString
开头的话会抛出null异常:
public static string TrimQueryString(this string source)
{
if (string.IsNullOrEmpty(source))
return source;
var hasQueryString = source.IndexOf('?') != -1;
if (!hasQueryString)
return source;
var result = source.Substring(0, source.IndexOf('?'));
return result;
}
用法:
var url = Request.Url?.AbsoluteUri.TrimQueryString()
var canonicallink = Request.Url.Scheme + "://" + Request.Url.Authority + Request.Url.AbsolutePath.ToString();
试试这个:
urlString=Request.RawUrl.ToString.Substring(0, Request.RawUrl.ToString.IndexOf("?"))
从此:http ://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=再见,您将获得:mypage.aspx
this.Request.RawUrl.Substring(0, this.Request.RawUrl.IndexOf('?'))