Frage

Normalerweise würde ich nur verwenden:

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

Aber da dies ist eine Konsolenanwendung, HttpContext.Current immer null.

Gibt es eine andere Methode, die die gleiche Sache, die ich verwenden könnte?

War es hilfreich?

Lösung

Versuchen Sie dies!

Uri.EscapeUriString(url);

Oder

Uri.EscapeDataString(data)

Keine Notwendigkeit zu Referenz-System.Web.

Edit: Finden andere SO beantworten Sie für mehr...

Andere Tipps

Bin ich nicht ein .NET-Typ, aber, können Sie nicht verwenden:

HttpUtility.UrlEncode Method (String)

Die ist hier beschrieben:

HttpUtility.UrlEncode-Methode (String) auf der MSDN-Website

Den code aus Ian Hopkins hat den trick für mich, ohne dass Sie einen Verweis auf System.Web.Hier ist eine Portierung nach C# für diejenigen, die nicht verwenden 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));
    }
}

Sie wollen zu verwenden

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

Stellen Sie sicher, Sie haben system.web als eine der Referenzen in Ihrem Projekt.Ich glaube nicht, dass es als Referenz aufgenommen standardmäßig in der Konsole-Anwendungen.

Versuchen Sie, die UrlEncode Methode in die HttpUtility-Klasse.

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

Ich lief in dieses problem selbst, und anstatt Sie zu erhöhen die System.Web-assembly zu meinem Projekt, ich schrieb eine Klasse für encoding/decoding URLs (seine ziemlich einfach, und ich habe ein paar Tests gemacht, aber nicht viel).Ich habe den source-code unten.Bitte:verlassen Sie den Kommentar auf der Oberseite, wenn Sie wiederverwenden, nicht mir die Schuld, wenn es bricht, aus dem lernen 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

Verwenden WebUtility.UrlEncode(string) von System.Net namespace

Kibbee bietet die richtige Antwort.Ja, HttpUtility.UrlEncode ist die richtige Methode zu verwenden, aber es wird nicht standardmäßig verfügbar für eine Konsolenanwendung.Sie muss fügen Sie einen Verweis auf System.Web.Um das zu tun,

  1. In Ihrem Projektmappen-explorer mit der rechten Maustaste auf Referenzen
  2. Wählen Sie "Verweis hinzufügen"
  3. In der "Add Reference" - dialog-box, verwenden .NET-Register
  4. Scrollen Sie nach unten zu System.Web, wählen Sie diese und drücken Sie ok

JETZT können Sie die UrlEncode Methode.Werden Sie noch hinzufügen wollen,

mit System.Web

an der Oberseite der Konsole der app oder verwenden Sie den vollständigen namespace beim Aufruf der Methode

System.Web.HttpUtility.UrlEncode(classextender)

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

verwenden Sie die statische HttpUtility.UrlEncode-Methode.

Beste Sache ist, um Sie Verweis Hinzufügen aus, um System.web..dll

und verwenden Sie var EncodedUrl=System.Web.HttpUtility.UrlEncode("URL_TEXT");

Sie finden die Datei unter System.web.dll

Uri.EscapeUriString sollte nicht verwendet werden für die Flucht ein string übergeben werden, die in einer URL, da es nicht die Codierung aller Zeichen, wie Sie Sie vielleicht erwarten.Das '+' ist ein gutes Beispiel, das nicht entgangen.Diese wird dann umgewandelt, um ein Leerzeichen in der URL, da dies ist, was es bedeutet, in einer einfachen URI.Offensichtlich, dass die Ursachen der massiven Probleme, die minute, die Sie versuchen, und übergeben Sie so etwas wie eine base 64-codierte Zeichenfolge in der URL und Leerzeichen erscheinen alle über Ihre string auf dem empfangenden Ende.

Sie verwenden können, HttpUtility.UrlEncode und fügen Sie die erforderlichen Verweise zu Ihrem Projekt (und wenn Sie die Kommunikation mit einem web-Anwendung, dann sehe ich keinen Grund, warum sollten Sie das nicht tun).

Nutzen Sie alternativ Uri.EscapeDataString über Uri.EscapeUriString als sehr gut erklärt hier: https://stackoverflow.com/a/34189188/7391

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top