Holen Sie sich URL ohne Querystring

189

Ich habe eine URL wie diese:

http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye

Ich möchte davon profitieren http://www.example.com/mypage.aspx.

Kannst du mir sagen, wie ich es bekommen kann?

Rocky Singh
quelle

Antworten:

129

Sie können verwenden 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);

Oder Sie können verwenden substring

string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
string path = url.Substring(0, url.IndexOf("?"));

BEARBEITEN: Ändern der ersten Lösung, um den Vorschlag von brillyfresh in den Kommentaren widerzuspiegeln.

Josh
quelle
6
url.AbsolutePath gibt nur den Pfadabschnitt der URL zurück (/mypage.aspx); Stellen Sie url.Scheme (http) + Uri.SchemeDelimiter (: //) + url.Authority (www.somesite.com) vor die vollständige URL, die Sie wollten
Ryan
20
Uri.GetLeftPart Methode ist einfacher als erwähnt stackoverflow.com/questions/1188096/…
Edward Wilde
Die substringMethode gibt einen Fehler aus, wenn keine Abfragezeichenfolge vorhanden ist. Verwenden Sie string path = url.Substring(0, url.IndexOf("?") > 0? url.IndexOf("?") : url.Length);stattdessen.
Stomy
378

Hier ist eine einfachere Lösung:

var uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
string path = uri.GetLeftPart(UriPartial.Path);

Von hier ausgeliehen: Abfragezeichenfolge abschneiden und saubere URL C # ASP.net zurückgeben

Johnny Oshika
quelle
17
Einzeilige Version:return Request.Url.GetLeftPart(UriPartial.Path);
jp2code
uri.GetComponent(ist eine weitere großartige Methode, um Teile eines Uri zu erhalten. Ich wusste bis jetzt nichts über diese beiden!
AaronLS
38

Das ist meine Lösung:

Request.Url.AbsoluteUri.Replace(Request.Url.Query, String.Empty);
Kolman
quelle
35
Request.RawUrl.Split(new[] {'?'})[0];
tyy
quelle
2
Ich mag das nur, weil du es ohne vollen Uri benutzen kannst.
KingOfHypocrites
Denken Sie daran, dass RawUrldie URL vor dem erneuten Schreiben der URL abgerufen wird. Verwenden Sie sie also möglicherweise AbsoluteUri? Request.Url.AbsoluteUri.Split('?')[0]
Beschützer ein
16

Meine Art:

new UriBuilder(url) { Query = string.Empty }.ToString()

oder

new UriBuilder(url) { Query = string.Empty }.Uri
Sa.
quelle
Dies ist, was ich für NET Core 1.0-Projekt verwende, weil es keine Methode hat Uri.GetLeftPart. Die neueste Version von NET Core (1.1) sollte diese Methode haben (kann nicht bestätigen, da ich
momentan
1
Ich mag dieses, weil das Erstellen von URIs genau das ist, wofür der UriBuilder gedacht ist. Alle anderen Antworten sind (gute) Hacks.
Neun Schwänze
11

Sie können verwenden Request.Url.AbsolutePath, um den Seitennamen sowie Request.Url.Authorityden Hostnamen und den Port abzurufen. Ich glaube nicht, dass es eine eingebaute Immobilie gibt, die Ihnen genau das bietet, was Sie wollen, aber Sie können sie selbst kombinieren.

Brandon
quelle
1
Es gibt mir /mypage.aspx, nicht das, was ich wollte.
Rocky Singh
4

Split () Variation

Ich möchte diese Variante nur als Referenz hinzufügen. URLs sind oft Zeichenfolgen und daher ist es einfacher, die Split()Methode zu verwenden als Uri.GetLeftPart(). Und Split()kann auch dazu gebracht werden, mit relativen, leeren und Nullwerten zu arbeiten, während Uri eine Ausnahme auslöst. Darüber hinaus können URLs auch einen Hash wie /report.pdf#page=10(der das PDF auf einer bestimmten Seite öffnet) enthalten.

Die folgende Methode behandelt alle diese Arten von URLs:

   var path = (url ?? "").Split('?', '#')[0];

Beispielausgabe:

Roberto
quelle
1
Ich bin ziemlich schockiert, dass dies bis zu meinem eigenen keine positiven Stimmen bekommen hat. Dies ist eine großartige Lösung.
Jason
3

Hier ist eine Erweiterungsmethode unter Verwendung der Antwort von @ Kolman. Es ist geringfügig einfacher, sich daran zu erinnern, Path () zu verwenden als GetLeftPart. Möglicherweise möchten Sie Path to GetPath umbenennen, zumindest bis C # Erweiterungseigenschaften hinzugefügt werden.

Verwendung:

Uri uri = new Uri("http://www.somewhere.com?param1=foo&param2=bar");
string path = uri.Path();

Die Klasse:

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);
        }
    }
}
stevieg
quelle
1
    string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
    string path = url.split('?')[0];
Padam Singh
quelle
1
Request.RawUrl.Split('?')[0]

Nur für URL-Namen !!

Bhavishya Singh Chauhan
quelle
0

Lösung für Silverlight:

string path = HtmlPage.Document.DocumentUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
Schamane
quelle
0

Ich habe eine einfache Erweiterung erstellt, da einige der anderen Antworten null Ausnahmen auslösten, wenn es zunächst keine gab 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;
}

Verwendung:

var url = Request.Url?.AbsoluteUri.TrimQueryString() 
Sam Jones
quelle
0

System.Uri.GetComponents, nur angegebene Komponenten, die Sie möchten.

Uri uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
uri.GetComponents(UriComponents.SchemeAndServer | UriComponents.Path, UriFormat.UriEscaped);

Ausgabe:

http://www.example.com/mypage.aspx
RainVision
quelle
-1

Ein einfaches Beispiel wäre die Verwendung von Teilzeichenfolgen wie:

string your_url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
string path_you_want = your_url .Substring(0, your_url .IndexOf("?"));
Paras
quelle
-1
var canonicallink = Request.Url.Scheme + "://" + Request.Url.Authority + Request.Url.AbsolutePath.ToString();
Pradeep Balaji
quelle
-3
this.Request.RawUrl.Substring(0, this.Request.RawUrl.IndexOf('?'))
Prasad Patil
quelle