У мене така 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 у коментарях.
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(
- ще один дивовижний метод отримання частин урі. Я не знав про цих двох до цих пір!
Request.RawUrl.Split(new[] {'?'})[0];
RawUrl
отримаєте URL перед перезаписом 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 кидає виняток. Крім того, Urls також може містити хеш, такий як/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
Ось метод розширення за допомогою відповіді @ Колмана. Користуватися Path () набагато простіше запам'ятати, ніж GetLeftPart. Ви можете перейменувати Шлях на 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('?'))