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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top