Mam taki adres URL:
http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye
Chcę z tego wyjść http://www.example.com/mypage.aspx.
Czy możesz mi powiedzieć, jak mogę to zdobyć?
Mam taki adres URL:
http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye
Chcę z tego wyjść http://www.example.com/mypage.aspx.
Czy możesz mi powiedzieć, jak mogę to zdobyć?
Odpowiedzi:
Możesz użyć 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);
Lub możesz użyć substring
string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
string path = url.Substring(0, url.IndexOf("?"));
EDYCJA: Modyfikacja pierwszego rozwiązania w celu odzwierciedlenia sugestii brillyfresh w komentarzach.
substringMetoda da błąd, jeśli nie ma ciąg zapytań. Użyj string path = url.Substring(0, url.IndexOf("?") > 0? url.IndexOf("?") : url.Length);zamiast tego.
Oto prostsze rozwiązanie:
var uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
string path = uri.GetLeftPart(UriPartial.Path);
Pożyczono stąd: Obcinanie ciągu zapytania i zwracanie czystego adresu URL C # ASP.net
return Request.Url.GetLeftPart(UriPartial.Path);
uri.GetComponent(to kolejna niesamowita metoda uzyskiwania części Uri. Do tej pory nie wiedziałem o tych dwóch!
Request.RawUrl.Split(new[] {'?'})[0];
RawUrldostanie adres URL przed jego ponownym zapisaniem, więc może użyj AbsoluteUri? Request.Url.AbsoluteUri.Split('?')[0]
Dobra odpowiedź również znalazła tutaj źródło odpowiedzi
Request.Url.GetLeftPart(UriPartial.Path)
Moja droga:
new UriBuilder(url) { Query = string.Empty }.ToString()
lub
new UriBuilder(url) { Query = string.Empty }.Uri
Uri.GetLeftPart. Najnowsza wersja NET Core (1.1) powinna mieć tę metodę (nie mogę potwierdzić, ponieważ nie jestem na razie w wersji Net Core 1.1)
Możesz użyć, Request.Url.AbsolutePathaby uzyskać nazwę strony oraz Request.Url.Authoritynazwę hosta i port. Nie wierzę, że istnieje wbudowana własność, która da ci dokładnie to, czego chcesz, ale możesz sam je połączyć.
Wariant Split ()
Chcę tylko dodać tę odmianę w celach informacyjnych. Adresy URL są często ciągami znaków, więc łatwiej jest użyć tej Split()metody niż Uri.GetLeftPart(). I Split()może być również zmuszony do pracy z wartościami względnymi, pustymi i zerowymi, podczas gdy Uri zgłasza wyjątek. Ponadto adresy URL mogą również zawierać skrót, taki jak /report.pdf#page=10(który otwiera plik pdf na określonej stronie).
Poniższa metoda dotyczy wszystkich tych typów adresów URL:
var path = (url ?? "").Split('?', '#')[0];
Przykładowe dane wyjściowe:
http: //domain/page.html#page=2 ---> http: //domain/page.html
page.html ---> page.html
Oto metoda rozszerzenia wykorzystująca odpowiedź @ Kolmana. Nieco łatwiej jest pamiętać o użyciu Path () niż GetLeftPart. Możesz zmienić nazwę ścieżki na GetPath, przynajmniej dopóki nie dodadzą właściwości rozszerzenia do C #.
Stosowanie:
Uri uri = new Uri("http://www.somewhere.com?param1=foo¶m2=bar");
string path = uri.Path();
Klasa:
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, właśnie określone komponenty, które chcesz.
Uri uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
uri.GetComponents(UriComponents.SchemeAndServer | UriComponents.Path, UriFormat.UriEscaped);
Wynik:
http://www.example.com/mypage.aspx
Request.RawUrl.Split('?')[0]
Tylko dla nazwy adresu URL !!
Stworzyłem proste rozszerzenie, ponieważ kilka innych odpowiedzi zniosło zerowe wyjątki, jeśli nie było QueryStringna początek:
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;
}
Stosowanie:
var url = Request.Url?.AbsoluteUri.TrimQueryString()
var canonicallink = Request.Url.Scheme + "://" + Request.Url.Authority + Request.Url.AbsolutePath.ToString();
Spróbuj tego:
urlString=Request.RawUrl.ToString.Substring(0, Request.RawUrl.ToString.IndexOf("?"))
z tego: http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye otrzymasz: mypage.aspx
this.Request.RawUrl.Substring(0, this.Request.RawUrl.IndexOf('?'))