我有一个这样的URL:

http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye

我想从中得到http://www.example.com/mypage.aspx。

你能告诉我怎么买吗?


当前回答

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=goodbye 你会得到这个:mypage.aspx

我已经创建了一个简单的扩展,因为其他一些答案抛出空异常,如果没有QueryString开始:

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() 

您可以使用Request.Url.AbsolutePath获取页面名,使用Request.Url.Authority获取主机名和端口。我不相信有一个内置的属性可以给你想要的东西,但你可以自己组合它们。

Request.RawUrl.Split('?')[0]

仅为url名!!

你可以使用系统。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在评论中的建议。