Frage

Ich habe einen asp.net-URL-Pfad, der in einem Webformular generiert wird und in etwa wie „/foo/bar/../bar/path.aspx“ aussieht und im generierten HTML auch so ausgegeben wird .Es sollte auf „/foo/bar/path.aspx“ gekürzt werden.

Path.Combine hat das Problem nicht behoben.Gibt es eine Funktion zum Bereinigen dieses Pfades?

War es hilfreich?

Lösung

Sie können eine Hilfsklasse erstellen, die die UriBuilder Klasse in System.Net gewickelt

public static class UriHelper
{       
    public static string NormalizeRelativePath(string path)
    {
        UriBuilder _builder = new UriBuilder("http://localhost");
        builder.Path = path;
        return builder.Uri.AbsolutePath;
    }
}

, die dann wie folgt verwendet werden:

string url = "foo/bar/../bar/path.aspx";
Console.WriteLine(UriHelper.NormalizeRelativePath(url));

Es ist ein bisschen hacky, aber es wäre für das spezifische Beispiel arbeiten Sie gab.

EDIT:. Aktualisiert Andreas Kommentare spiegeln

Andere Tipps

Was immer Sie tun, verwenden Sie nicht einen statischen UriBuilder. Dies führt alle Arten von möglichen Rennbedingungen, die Sie möglicherweise nicht erkennen, bis Sie unter hohen Last sind.

Wenn zwei verschiedene Threads UriHelper.NormalizeRelativePath zugleich, der Rückgabewert für einen zum anderen Anrufer zurückgeleitet willkürlich. Werden könnten

genannt

Wenn Sie UriBuilder verwenden, um dies zu tun, erstellen Sie einfach eine neue, wenn Sie es brauchen (es ist nicht teuer zu erstellen).

Sarcastic Antwort ist so viel besser als meine, aber wenn Sie mit Dateisystem Pfade gearbeitet haben, mein hässliche Hack unten könnte sich als nützlich zu sein. (Übersetzung: Ich tippte es, so ich will verdammt sein, wenn ich es nicht schreiben:)

Path.Combine schlägt nur zwei Strings zusammen, die Aufmerksamkeit auf Vorder- oder Hinterschrägstriche zu bezahlen. Soweit ich weiß, ist der einzige Weg Methode, die Normalisierung tut, ist Path.GetFullPath. Im Folgenden werden Sie die „gereinigt“ -Version.

myPath = System.IO.Path.GetFullPath(myPath);

Natürlich gibt es das kleine Problem, dass der resultierende Pfad verwurzelt sein wird und die Schrägstriche umgewandelt werden Schrägstriche nach hinten (wie „C: \ foo \ bar \ path.aspx“). Aber wenn Sie die übergeordnete Wurzel des ursprünglichen Pfades kennen, sollte die Wurzel Strippen kein großes Problem sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top