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ć?
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.
substring
Metoda da błąd, jeśli nie ma ciąg zapytań. Użyjstring path = url.Substring(0, url.IndexOf("?") > 0? url.IndexOf("?") : url.Length);
zamiast tego.Oto prostsze rozwiązanie:
Pożyczono stąd: Obcinanie ciągu zapytania i zwracanie czystego adresu URL C # ASP.net
źródło
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!To jest moje rozwiązanie:
źródło
źródło
RawUrl
dostanie adres URL przed jego ponownym zapisaniem, więc może użyjAbsoluteUri
?Request.Url.AbsoluteUri.Split('?')[0]
Dobra odpowiedź również znalazła tutaj źródło odpowiedzi
źródło
Moja droga:
lub
źródło
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.AbsolutePath
aby uzyskać nazwę strony orazRequest.Url.Authority
nazwę 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ć.źródło
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()
. ISplit()
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:
Przykładowe dane wyjściowe:
http: //domain/page.html#page=2 ---> http: //domain/page.html
page.html ---> page.html
źródło
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:
Klasa:
źródło
źródło
System.Uri.GetComponents
, właśnie określone komponenty, które chcesz.Wynik:
źródło
Tylko dla nazwy adresu URL !!
źródło
Rozwiązanie dla Silverlight:
źródło
Stworzyłem proste rozszerzenie, ponieważ kilka innych odpowiedzi zniosło zerowe wyjątki, jeśli nie było
QueryString
na początek:Stosowanie:
źródło
prostym przykładem byłoby użycie podciągów takich jak:
źródło
źródło
Spróbuj tego:
z tego: http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye otrzymasz: mypage.aspx
źródło
źródło