ASP.Net :Utilisation de System.Web.UI.Control.ResolveUrl() dans une fonction partagée/statique
-
09-06-2019 - |
Question
Quelle est la meilleure façon d’utiliser ResolveUrl() dans une fonction partagée/statique dans Asp.Net ?Ma solution actuelle pour VB.Net est la suivante :
Dim x As New System.Web.UI.Control
x.ResolveUrl("~/someUrl")
Ou C# :
System.Web.UI.Control x = new System.Web.UI.Control();
x.ResolveUrl("~/someUrl");
Mais je me rends compte que ce n’est pas la meilleure façon de l’appeler.
La solution
j'utilise System.Web.VirtualPathUtility.ToAbsolute.
Autres conseils
Il convient de noter que même si System.Web.VirtualPathUtility.ToAbsolute est très utile ici, il est pas un remplacement parfait pour Control.ResolveUrl.
Il y a au moins une différence significative :Control.ResolveUrl gère très bien les chaînes de requête, mais elles amènent VirtualPathUtility à lever une HttpException.Cela peut être absolument mystifiant la première fois que cela se produit, surtout si vous êtes habitué au fonctionnement de Control.ResolveUrl.
Si vous connaissez la structure exacte de la chaîne de requête que vous souhaitez utiliser, c'est assez simple à contourner, à savoir :
public static string GetUrl(int id)
{
string path = VirtualPathUtility.ToAbsolute("~/SomePage.aspx");
return string.Format("{0}?id={1}", path, id);
}
... mais si la chaîne de requête est transmise par une source inconnue, vous devrez l'analyser d'une manière ou d'une autre.(Avant d'approfondir cela, notez que System.Uri pourra peut-être le faire pour vous).
J'ai tendance à utiliser HttpContext.Current pour obtenir la page, puis à exécuter n'importe quelle méthode de contrôle de page/Web à partir de celle-ci.