Domanda

Di norma, vorrei solo utilizzare:

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

Ma dato che questa è un'applicazione console, HttpContext.Current sta andando sempre essere null.

C'è un altro metodo che fa la stessa cosa che potrei usare?

È stato utile?

Soluzione

Provare questo!

Uri.EscapeUriString(url);

O

Uri.EscapeDataString(data)

Non c'è bisogno di Sistema di riferimento.Web.

Edit: Si prega di consultare un altro In MODO da rispondere più...

Altri suggerimenti

Io non sono un .NET ragazzo, ma, non si può utilizzare:

HttpUtility.UrlEncode Method (String)

Che è descritto qui:

HttpUtility.Metodo UrlEncode (Stringa) su MSDN

Il codice da Ian Hopkins fa il trucco per me, senza dover aggiungere un riferimento a System.Web.Qui è un porto in C#, per coloro che non utilizzano 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));
    }
}

Ti consigliamo di utilizzare

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

Assicurarsi che si dispone di sistema.web come uno dei riferimenti del tuo progetto.Non credo che è incluso come riferimento per impostazione predefinita nelle applicazioni console.

Provare a utilizzare il metodo UrlEncode in HttpUtility classe.

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

Mi sono imbattuto in questo problema me, e invece di aggiungere il Sistema.Web assieme al mio progetto, ho scritto una classe per la codifica/decodifica di Url (la sua abbastanza semplice, e ho fatto alcune prove, ma non molto).Ho incluso il codice sorgente sotto.Si prega di:lasciare il commento in alto per il riutilizzo di questo, non date la colpa a me se si rompe, imparare dal codice.

''' <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

Utilizzare WebUtility.UrlEncode(string) da System.Net spazio dei nomi

Kibbee offre la vera risposta.Sì, HttpUtility.UrlEncode è il metodo giusto da usare, ma non sarà disponibile per impostazione predefinita per un'applicazione console.Si deve aggiungere un riferimento a System.Web.Per farlo,

  1. Nel solution explorer, fare clic su riferimenti
  2. Scegliere "aggiungi riferimento"
  3. Nella "casella di dialogo Aggiungi Riferimento, utilizzare il .Scheda rete
  4. Scorrere verso il basso per il Sistema.Web, selezionare e premere ok

ORA è possibile utilizzare il metodo UrlEncode.Si vuole ancora aggiungere,

utilizzando Sistema.Web

in cima alla vostra console app o utilizzare l'intero spazio dei nomi quando si chiama il metodo,

Sistema.Web.HttpUtility.UrlEncode(someString)

HttpUtility.UrlEncode("url") del Sistema.Web.

utilizzare la statica HttpUtility.UrlEncode metodo.

La cosa migliore è Aggiungere un Riferimento a System.web..dll

e l'uso var EncodedUrl=System.Web.HttpUtility.UrlEncode("URL_TEXT");

È possibile trovare il File System.web.dll

Uri.EscapeUriString non deve essere utilizzato per la fuga di una stringa in un URL come non codificare tutti i caratteri come ci si potrebbe aspettare.Il '+' è un buon esempio che non è sfuggito.Questo viene poi convertito in spazio l'URL dal momento che questo è ciò che significa in un semplice URI.Ovviamente, che causa enormi problemi di minuto in minuto si prova a passare qualcosa di simile a una base 64 stringa codificata nell'URL e spazi appaiono in tutta la stringa alla fine di ricezione.

È possibile utilizzare HttpUtility.UrlEncode e aggiungere i riferimenti al progetto (e se siete in comunicazione con un applicazione web, quindi non vedo il motivo per cui non dovrebbe farlo).

In alternativa, utilizzare Uri.EscapeDataString su Uri.EscapeUriString come spiegato molto bene qui: https://stackoverflow.com/a/34189188/7391

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top