У меня есть такой URL:
http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye
Я хочу получить http://www.example.com/mypage.aspx
от него.
Можете ли вы рассказать мне, как я могу его получить?
У меня есть такой URL:
http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye
Я хочу получить http://www.example.com/mypage.aspx
от него.
Можете ли вы рассказать мне, как я могу его получить?
Вы можете использовать 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("?"));
EDIT: изменение первого решения, отражающего предложение brillyfresh в комментариях.
Здесь более простое решение:
var uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
string path = uri.GetLeftPart(UriPartial.Path);
Заимствовано здесь: Усечение строки запроса и возврат чистого URL-адреса С# ASP.net
Это мое решение:
Request.Url.AbsoluteUri.Replace(Request.Url.Query, String.Empty);
Request.RawUrl.Split(new[] {'?'})[0];
Хороший ответ также найден здесь источник ответа
Request.Url.GetLeftPart(UriPartial.Path)
Мой способ:
new UriBuilder(url) { Query = string.Empty }.ToString()
или
new UriBuilder(url) { Query = string.Empty }.Uri
Вы можете использовать Request.Url.AbsolutePath
, чтобы получить имя страницы, и Request.Url.Authority
для имени хоста и порта. Я не верю, что есть встроенное свойство, чтобы дать вам именно то, что вы хотите, но вы можете объединить их сами.
Здесь используется метод расширения с использованием ответа @Kolman. Немного легче запомнить использование Path(), чем GetLeftPart. Возможно, вам захочется переименовать Path в GetPath, по крайней мере, до тех пор, пока они не добавят свойства расширения на С#.
Использование:
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);
}
}
}
Split() Вариация
Я просто хочу добавить этот вариант для справки. Uri.GetLeftPart()
часто являются строками, поэтому использовать метод Split()
Uri.GetLeftPart()
чем Uri.GetLeftPart()
. И Split()
также может работать с относительными, пустыми и нулевыми значениями, тогда как Uri выдает исключение. Кроме того, /report.pdf#page=10
также могут содержать хэш, например /report.pdf#page=10
(который открывает PDF файл на определенной странице).
Следующий метод имеет дело со всеми этими типами URL:
var path = (url ?? "").Split('?', '#')[0];
Пример вывода:
page.html ---> page.html
Request.RawUrl.Split( '?') [0]
Только для имени URL-адреса!!
Решение для Silverlight:
string path = HtmlPage.Document.DocumentUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
Я создал простое расширение, так как некоторые другие ответы выдавали пустые исключения, если не было 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()
string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
string path = url.split('?')[0];
простой пример будет использовать подстроку как:
string your_url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
string path_you_want = your_url .Substring(0, your_url .IndexOf("?"));
var canonicallink = Request.Url.Scheme + "://" + Request.Url.Authority + Request.Url.AbsolutePath.ToString();
System.Uri.GetComponents
, просто указанные компоненты, которые вы хотите.
Uri uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
uri.GetComponents(UriComponents.SchemeAndServer | UriComponents.Path, UriFormat.UriEscaped);
Выход:
http://www.example.com/mypage.aspx
Попробуйте следующее:
urlString=Request.RawUrl.ToString.Substring(0, Request.RawUrl.ToString.IndexOf("?"))
из этого: http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye вы получите следующее: mypage.aspx
this.Request.RawUrl.Substring(0, this.Request.RawUrl.IndexOf('?'))