2009-07-10 12 views
0

Sagen wir, ich habe eine absolute URL /testserver/tools/search.aspx, die ich in einer Variablen-URL speichern.Wie kann ich einen Teil der folgenden Zeichenfolge erhalten?

Ich möchte überprüfen, ob url ==/tools/search.aspx ohne/testserver zu verwenden.

Ein vollständigeres Beispiel wäre:

Meine Testserver die URL enthält http://www.testserver.com/tools/Search.aspx,

aber mein Live-Server enthält die URL http://www.liveserver.com/tools/Search.aspx

Wenn ich vergleiche eine Variable url, die die Testserver-URL speichert, die Liveserver-URL, es wird fehlschlagen, deshalb möchte ich nur den /tools/Search.aspx Teil überprüfen.

+0

Reguläre Ausdrücke, vielleicht? – thebrokencube

+0

Ist Ihre URL '/ testserver/tools/search.aspx' oder' http: // www.testserver.com/tools/Search.aspx'? – dtb

+0

wenn ich debugge und überprüfe die AbsoulteUrl ist /testserver/tools/search.aspx – Xaisoft

Antwort

2
if (url.ToLower().Contains("/tools/search.aspx")) 
{ 
    //do stuff here 
} 

ich verwenden würde Enthält, falls Sie eine Abfragezeichenfolge haben, aber man könnte auch EndsWith („/ tools/search.aspx“) verwenden, wenn Sie keine Abfragezeichenfolgen haben.

+2

"EndsWith" könnte eine bessere Wahl sein. –

+0

Nur neugierig, was EndsWith eine bessere Wahl macht. – Xaisoft

+1

@Andrew - außer in dem Fall, wo Sie auch wollen, dass es übereinstimmt .../search.aspx? Name = etwas. EndsWith wäre besser, wenn Sie sicher wären, dass Sie die URL ohne die Abfrageparameter hätten. – tvanfosson

0

Sie können die Eigenschaft AppRelativeCurrentExecutionFilePath verwenden, die Ihnen den Pfad relativ zum Anwendungsstamm angibt. So wird "http://host/virtualfolder/page.aspx""~/page.aspx" sein:

if (HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath.Equals("~/search.aspx", StringComparison.InvariantCultureIgnoreCase)) 
{ 
    // do something 
} 
3

Wenn Sie Ihre Eingabe des Formulars ist "http://www.testserver.com/tools/Search.aspx":

var path1 = new Uri("http://www.testserver.com/tools/Search.aspx").AbsolutePath; 
var path2 = new Uri("http://www.liveserver.com/tools/Search.aspx").AbsolutePath; 

Beides führt in "/tools/Search.aspx".

die Uri Verwendung ist die beste Lösung, wenn Sie irgendeine URI zu akzeptieren haben, also auch solche mit einem Query-String, Fragmentbezeichner usw.


Wenn Sie Ihre Eingabe in der Form „/ Testserver ist. com/tools/Search.aspx“und Sie wissen, dass alle Eingaben immer dieser Form sein und gültig und enthalten keine anderen URI-Komponenten:

var input = "/testserver.com/tools/Search.aspx"; 
var path1 = input.Substring(input.Index('/', 1)); 

Ergebnis ist "/tools/Search.aspx".

+1

Gesucht, weil es ziemlich vernünftig vorschlägt, bewährte Funktionalität zu verwenden, die von den Kernsystembibliotheken bereitgestellt wird. Warum würdest du noch etwas anderes machen? – belugabob

+0

Was passiert, wenn die Anwendung in einem virtuellen Ordner auf dem Server bereitgestellt wird, wie in der Frage angegeben? –

1
Regex.Match(url, @"^.*?/tools/search\.aspx\??.*", 
       RegexOptions.IgnoreCase).Success == true 

Wenn Sie url greift von Request.PathInfo Ihnen die Domain sowieso nicht ... aber Sie Frage nicht eindeutig ist, wie Sie sagen, Sie haben einen Weg/testserver/in einer, aber nicht in dem URLs, die Sie zu Verfügung stellen.

Andernfalls setzen url von Request.Url.ToString()

0

Wenn der einzige Unterschied in der Host-Teil der URL sein wird, ich die System.Uri Klasse verwenden würden ihre absolute Pfade (die "vergleichen tools/Search.aspx "Teil der uri).

Hier ist ein Beispiel dafür, wie es zu tun:

static void Main(string[] args) 
{ 
    //load up the uris 
    Uri uri = new Uri("http://www.testserver.com/tools/search.aspx");    
    Uri matchingUri = new Uri("http://www.liveserver.com/tools/search.aspx"); 
    Uri nonMatchingUri = new Uri("http://www.liveserver.com/tools/cart.aspx"); 

    //demonstrate what happens when the uris match 
    if (uri.AbsolutePath == matchingUri.AbsolutePath) 
     Console.WriteLine("These match"); 
    //demonstrate what happens when the uris don't match 
    if (uri.AbsolutePath != nonMatchingUri.AbsolutePath) 
     Console.WriteLine("These do not match"); 
} 
Verwandte Themen