У меня есть такой 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("?"));
РЕДАКТИРОВАТЬ: изменение первого решения, чтобы отразить предложение 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];
RawUrlURL- адрес будет получен до того, как URL будет перезаписан, так что, возможно, используйте AbsoluteUri? Request.Url.AbsoluteUri.Split('?')[0]
Хороший ответ также нашел здесь источник ответа
Request.Url.GetLeftPart(UriPartial.Path)
Мой путь:
new UriBuilder(url) { Query = string.Empty }.ToString()
или
new UriBuilder(url) { Query = string.Empty }.Uri
Uri.GetLeftPart. Последняя версия NET Core (1.1) должна иметь этот метод (не могу подтвердить, потому что я сейчас не в сетевом ядре 1.1)
Вы можете использовать, Request.Url.AbsolutePathчтобы получить имя страницы, а Request.Url.Authorityтакже имя хоста и порт. Я не верю, что есть встроенная собственность, чтобы дать вам именно то, что вы хотите, но вы можете объединить их самостоятельно.
Разбить () Вариация
Я просто хочу добавить этот вариант для справки. URL-адреса часто являются строками, поэтому использовать Split()метод проще, чем Uri.GetLeftPart(). И Split()также может работать с относительными, пустыми и нулевыми значениями, тогда как Uri выдает исключение. Кроме того, URL-адреса могут также содержать хэш, например /report.pdf#page=10(который открывает PDF на определенной странице).
Следующий метод имеет дело со всеми этими типами URL:
var path = (url ?? "").Split('?', '#')[0];
Пример вывода:
http: //domain/page.html#page=2 ---> http: //domain/page.html
page.html ---> page.html
Вот метод расширения, использующий ответ @ Kolman. Немного легче запомнить использование Path (), чем GetLeftPart. Возможно, вы захотите переименовать 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];
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
Request.RawUrl.Split('?')[0]
Только для названия URL!
Я создал простое расширение, так как некоторые другие ответы выдавали нулевые исключения, если не было 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()
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
this.Request.RawUrl.Substring(0, this.Request.RawUrl.IndexOf('?'))