2008-08-25 19 views

Antwort

3

Ich neige dazu, HttpContext.Current zu verwenden, um die Seite zu erhalten, und führe dann alle Seiten-/Websteuerungsmethoden aus.

21

Es ist erwähnenswert, dass obwohl System.Web.VirtualPathUtility.ToAbsolute ist hier sehr nützlich, es ist nicht ein perfekter Ersatz für Control.ResolveUrl.

Es gibt mindestens einen signifikanten Unterschied: Control.ResolveUrl behandelt Query Strings sehr gut, aber sie verursachen VirtualPathUtility, eine HttpException zu werfen. Dies kann absolut verwirrend sein, wenn es zum ersten Mal passiert, besonders wenn Sie daran gewöhnt sind, wie Control.ResolveUrl funktioniert.

Wenn Sie die genaue Struktur des Abfrage-String wissen Sie verwenden möchten, ist dies leicht genug, um zu arbeiten, nämlich:

public static string GetUrl(int id) 
{ 
    string path = VirtualPathUtility.ToAbsolute("~/SomePage.aspx"); 
    return string.Format("{0}?id={1}", path, id); 
} 

... aber wenn der Query-String wird immer in von einer weitergegeben unbekannte Quelle, dann wirst du es irgendwie analysieren müssen. (Bevor Sie zu sehr darauf eingehen, beachten Sie, dass System.Uri das möglicherweise für Sie erledigen kann).

+0

Dies ist möglicherweise nicht mehr wahr. In .NET 4, wenn ich 'VirtualPathUtility.ToAbsolute auswerte (" ~/bar/baz? Qux = 123 & quux = 456 ","/foo ")' Ich bekomme '/ foo/bar/baz? Qux = 123 & quux = 456' –

Verwandte Themen