ResolveUrl sans une page ASP.NET
-
28-10-2019 - |
Question
Je cherche un moyen de résoudre une URL relative comme vous le feriez avec une page ou une instance de contrôle ( MSDN Docs ) tel que:
Page.ResolveUrl("~/common/Error.aspx");
... mais quand je n'ai qu'un HttpContext à ma disposition, comme lorsque je suis dans un HttpHandler.
Dois-je utiliser une fonction personnalisée, telle que celle vue ici ?
Ou y a-t-il un moyen d'accéder à la fonction sous-jacente utilisée par la page.
La solution
Essayez d'obtenir la page du gestionnaire et utilisez ResolveUrl
, ou créez un objet Control ...
(HttpContext.Current.Handler as Page).ResolveUrl("~/virtualpath");
Ou utilisez VirtualPathUtility.ToAppRelative(string)
ou VirtualPathUtility.ToAbsolute(string)
Par exemple:
System.Web.VirtualPathUtility.ToAbsolute("~/Styles/Contoso.xslt");
renvoie
/WebSite/Styles/Contoso.xslt
Autres conseils
Cette question sur SO ( ASP.Net: Utiliser System.Web.UI.Control.ResolveUrl () dans une fonction partagée / statique ) semble assez utile ... En gros, vous pouvez utiliser le VirtualPathUtility qui se trouve sous l'espace de noms System.Web.Il y a une réponse supplémentaire à cette question qui dit de faire attention aux paramètres QueryString, mais une solution à cela est également fournie.
En même temps, le code de Rick Strahl est plutôt soigné!
Utilisez quelque chose comme ça - Controls est un nom de dossier dans votre application et myController est le nom du contrôleur.pour créer et instancier et charger le contrôleur, vous pouvez le faire en:
Controls_myController ctrl = Page.LoadControl(Page.ResolveUrl("controls/myController.ascx"));
J'espère que cela vous aidera.