Question

Normalement, j'utiliserais simplement :

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

Mais comme il s'agit d'une application console, HttpContext.Current sera toujours null.

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

Était-ce utile?

La solution

Essaye ça!

Uri.EscapeUriString(url);

Ou

Uri.EscapeDataString(data)

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

Modifier: S'il te plait regarde un autre Alors répondez pour en savoir plus...

Autres conseils

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

HttpUtility.UrlEncode Method (String)

Qui est décrit ici :

Méthode HttpUtility.UrlEncode (String) sur MSDN

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

/// <summary>
/// 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))
/// </summary>
public class UrlHelper
{
    public static string Encode(string str) {
        var charClass = String.Format("0-9a-zA-Z{0}", Regex.Escape("-_.!~*'()"));
        return Regex.Replace(str, 
            String.Format("[^{0}]", charClass),
            new MatchEvaluator(EncodeEvaluator));
    }

    public static string EncodeEvaluator(Match match)
    {
        return (match.Value == " ")?"+" : String.Format("%{0:X2}", Convert.ToInt32(match.Value[0]));
    }

    public static string DecodeEvaluator(Match match) {
        return Convert.ToChar(int.Parse(match.Value.Substring(1), System.Globalization.NumberStyles.HexNumber)).ToString();
    }

    public static string Decode(string str) 
    {
        return Regex.Replace(str.Replace('+', ' '), "%[0-9a-zA-Z][0-9a-zA-Z]", new MatchEvaluator(DecodeEvaluator));
    }
}

Vous aurez envie d'utiliser

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

Assurez-vous d'avoir system.web comme l'une des références de votre projet.Je ne pense pas qu'il soit inclus comme référence par défaut dans les applications 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'ajouter 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 quelques tests, mais pas beaucoup).J'ai inclus le code source ci-dessous.S'il te plaît:laissez le commentaire en haut si vous le réutilisez, ne me blâmez pas s'il casse, apprenez du code.

''' <summary>
''' URL encoding class.  Note: use at your own risk.
''' Written by: Ian Hopkins (http://www.lucidhelix.com)
''' Date: 2008-Dec-23
''' </summary>
Public Class UrlHelper
    Public Shared Function Encode(ByVal str As String) As String
        Dim charClass = String.Format("0-9a-zA-Z{0}", Regex.Escape("-_.!~*'()"))
        Dim pattern = String.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 String
    ' Replace the " "s with "+"s
        If (match.Value = " ") Then
            Return "+"
        End If
        Return String.Format("%{0:X2}", Convert.ToInt32(match.Value.Chars(0)))
    End Function

    Public Shared Function Decode(ByVal str As String) As String
        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 String
        Return "" + Convert.ToChar(Integer.Parse(match.Value.Substring(1), System.Globalization.NumberStyles.HexNumber))
    End Function
End Class

Utiliser WebUtility.UrlEncode(string) depuis System.Net espace de noms

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.Toi doit ajoutez une référence à System.Web.Pour faire ça,

  1. Dans votre explorateur de solutions, faites un clic droit sur les références
  2. Choisissez "ajouter une référence"
  3. Dans la boîte de dialogue "Ajouter une référence", utilisez l'onglet .NET
  4. Faites défiler jusqu'à System.Web, sélectionnez-le et cliquez sur OK.

MAINTENANT, vous pouvez utiliser la méthode UrlEncode.Vous aurez toujours envie d'ajouter,

en utilisant System.Web

en haut de votre application console ou utilisez l'espace de noms complet lors de l'appel de la méthode,

System.Web.HttpUtility.UrlEncode(someString)

HttpUtility.UrlEncode("url") dans System.Web.

utilisez la méthode statique HttpUtility.UrlEncode.

La meilleure chose est d'ajouter une référence à System.web..dll

et utiliser var cocodUrl = System.web.httputility.urlencode ("url_text");

Vous pouvez trouver le fichier sur System.web.dll

Uri.EscapeUriString ne doit pas être utilisé pour échapper une chaîne à transmettre dans une URL car il n'encode pas tous les caractères comme on pourrait s'y attendre.Le '+' est un bon exemple auquel on n'échappe pas.Ceci est ensuite converti en espace dans l'URL puisque c'est ce que cela signifie dans un simple URI.Évidemment, cela provoque d'énormes problèmes dès que vous essayez de transmettre quelque chose comme une chaîne codée en base 64 dans l'URL et que des espaces apparaissent partout dans votre chaîne à la réception.

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

Vous pouvez également utiliser Uri.EscapeDataString sur Uri.EscapeUriString comme très bien expliqué ici : https://stackoverflow.com/a/34189188/7391

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