UrlEncode via une application console?

Normalement, je voudrais juste utiliser:

HttpContext.Current.Server.UrlEncode("url"); 

Mais comme il s’agit d’une application console, HttpContext.Current est toujours null .

Y a-t-il une autre méthode qui fait la même chose que je pourrais utiliser?

Essaye ça!

 Uri.EscapeUriSsortingng(url); 

Ou

 Uri.EscapeDataSsortingng(data) 

Pas besoin de référencer System.Web.

Edit: S’il vous plaît voir une autre réponse SO pour plus …

Je ne suis pas un gars .NET, mais vous ne pouvez pas utiliser:

 HttpUtility.UrlEncode Method (Ssortingng) 

Ce qui est décrit ici:

Méthode HttpUtility.UrlEncode (Ssortingng) sur MSDN

Le code de Ian Hopkins fait l’affaire pour moi sans avoir à append une référence à System.Web. Voici un port vers C # pour ceux qui n’utilisent pas VB.NET:

 ///  /// URL encoding class. Note: use at your own risk. /// Written by: Ian Hopkins (http://www.lucidhelix.com) /// Date: 2008-Dec-23 /// (Ported to C# by t3rse (http://www.t3rse.com)) ///  public class UrlHelper { public static ssortingng Encode(ssortingng str) { var charClass = Ssortingng.Format("0-9a-zA-Z{0}", Regex.Escape("-_.!~*'()")); return Regex.Replace(str, Ssortingng.Format("[^{0}]", charClass), new MatchEvaluator(EncodeEvaluator)); } public static ssortingng EncodeEvaluator(Match match) { return (match.Value == " ")?"+" : Ssortingng.Format("%{0:X2}", Convert.ToInt32(match.Value[0])); } public static ssortingng DecodeEvaluator(Match match) { return Convert.ToChar(int.Parse(match.Value.Subssortingng(1), System.Globalization.NumberStyles.HexNumber)).ToSsortingng(); } public static ssortingng Decode(ssortingng str) { return Regex.Replace(str.Replace('+', ' '), "%[0-9a-zA-Z][0-9a-zA-Z]", new MatchEvaluator(DecodeEvaluator)); } } 

Vous voudrez utiliser

 System.Web.HttpUtility.urlencode("url") 

Assurez-vous que system.web figure parmi les références de votre projet. Je ne pense pas qu’il soit inclus comme référence par défaut dans les applications de console.

Essayez d’utiliser la méthode UrlEncode dans la classe HttpUtility.

  1. http://msdn.microsoft.com/en-us/library/system.web.httputility.urlencode.aspx

J’ai moi-même rencontré ce problème et plutôt que d’append l’assembly System.Web à mon projet, j’ai écrit une classe pour encoder / décoder les URL (c’est assez simple, et j’ai fait des tests, mais pas beaucoup). J’ai inclus le code source ci-dessous. S’il vous plaît: laissez le commentaire en haut si vous réutilisez ceci, ne me blâmez pas si ça casse, apprenez du code.

 '''  ''' URL encoding class. Note: use at your own risk. ''' Written by: Ian Hopkins (http://www.lucidhelix.com) ''' Date: 2008-Dec-23 '''  Public Class UrlHelper Public Shared Function Encode(ByVal str As Ssortingng) As Ssortingng Dim charClass = Ssortingng.Format("0-9a-zA-Z{0}", Regex.Escape("-_.!~*'()")) Dim pattern = Ssortingng.Format("[^{0}]", charClass) Dim evaluator As New MatchEvaluator(AddressOf EncodeEvaluator) ' replace the encoded characters Return Regex.Replace(str, pattern, evaluator) End Function Private Shared Function EncodeEvaluator(ByVal match As Match) As Ssortingng ' Replace the " "s with "+"s If (match.Value = " ") Then Return "+" End If Return Ssortingng.Format("%{0:X2}", Convert.ToInt32(match.Value.Chars(0))) End Function Public Shared Function Decode(ByVal str As Ssortingng) As Ssortingng Dim evaluator As New MatchEvaluator(AddressOf DecodeEvaluator) ' Replace the "+"s with " "s str = str.Replace("+"c, " "c) ' Replace the encoded characters Return Regex.Replace(str, "%[0-9a-zA-Z][0-9a-zA-Z]", evaluator) End Function Private Shared Function DecodeEvaluator(ByVal match As Match) As Ssortingng Return "" + Convert.ToChar(Integer.Parse(match.Value.Subssortingng(1), System.Globalization.NumberStyles.HexNumber)) End Function End Class 

Utilisez WebUtility.UrlEncode(ssortingng) de l’espace de noms System.Net

Kibbee offre la vraie réponse. Oui, HttpUtility.UrlEncode est la bonne méthode à utiliser, mais elle ne sera pas disponible par défaut pour une application console. Vous devez append une référence à System.Web. Pour faire ça,

  1. Dans votre explorateur de solutions, cliquez avec le bouton droit sur les références.
  2. Choisissez “append une référence”
  3. Dans la boîte de dialog “Ajouter une référence”, utilisez l’onglet .NET
  4. Faites défiler jusqu’à System.Web, sélectionnez-le et appuyez sur ok

MAINTENANT, vous pouvez utiliser la méthode UrlEncode. Vous voudrez toujours append,

en utilisant System.Web

en haut de votre application de console ou utilisez l’espace de noms complet lorsque vous appelez la méthode,

System.Web.HttpUtility.UrlEncode (someSsortingng)

HttpUtility.UrlEncode (“url”) dans System.Web.

Utilisez la méthode statique HttpUtility.UrlEncode.

La meilleure chose est d’append une référence à System.web..dll

et utilisez var EncodedUrl = System.Web.HttpUtility.UrlEncode (“URL_TEXT”);

Vous pouvez trouver le fichier à System.web.dll

Uri.EscapeUriSsortingng ne doit pas être utilisé pour échapper à une chaîne à transmettre dans une URL, car elle n’encode pas tous les caractères comme prévu. Le «+» est un bon exemple qui n’est pas échappé. Cela est ensuite converti en un espace dans l’URL puisque c’est ce que cela signifie dans un simple URI. Évidemment, cela provoque des problèmes massifs dès que vous essayez de passer quelque chose comme une chaîne codée en base 64 dans l’URL et que des espaces apparaissent sur votre chaîne à la réception.

Vous pouvez utiliser HttpUtility.UrlEncode et append les références requirejses à votre projet (et si vous communiquez avec une application Web, je ne vois aucune raison de ne pas le faire).

Vous pouvez également utiliser Uri.EscapeDataSsortingng sur Uri.EscapeUriSsortingng comme cela est très bien expliqué ici: https://stackoverflow.com/a/34189188/7391