Resolveurl senza una pagina ASP.NET
-
28-10-2019 - |
Domanda
Sto cercando un modo per risolvere un URL relativo come faresti con una pagina o un'istanza di controllo (MSDN DOCS) come:
Page.ResolveUrl("~/common/Error.aspx");
... ma quando ho solo un httpcontext a disposizione a me, come quando sono in un httphandler.
Dovrò utilizzare una funzione personalizzata, come quella vista qui?
O esiste un modo per ottenere la funzione sottostante utilizzata dalla pagina.
Soluzione
Prova a ottenere la pagina dal gestore e usa ResolveUrl
, o crea un oggetto di controllo ...
(HttpContext.Current.Handler as Page).ResolveUrl("~/virtualpath");
O usare VirtualPathUtility.ToAppRelative(string)
o VirtualPathUtility.ToAbsolute(string)
Per esempio:
System.Web.VirtualPathUtility.ToAbsolute("~/Styles/Contoso.xslt");
ritorna
/WebSite/Styles/Contoso.xslt
Altri suggerimenti
Questa domanda su così (ASP.NET: utilizzando System.Web.UI.Control.Resolveurl () in una funzione condivisa/statica) sembra un po 'utile ... Fondamentalmente, puoi usare il Virtualpathutility Classe che è sotto lo spazio dei nomi System.Web. Esiste una risposta aggiuntiva a quella domanda che dice di fare attenzione ai parametri di querystring, ma viene fornita anche una soluzione.
Allo stesso tempo, il codice di Rick Strahl è piuttosto pulito!
Usa qualcosa del genere: i controlli è un nome di cartella nell'applicazione e MyController è il nome del controller. Per creare e istanza e caricare il controller puoi farlo da:
Controls_myController ctrl = Page.LoadControl(Page.ResolveUrl("controls/myController.ascx"));
Spero che sia di aiuto.