UrlEncode attraverso un'applicazione console?
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?
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:
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.
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,
- Nel solution explorer, fare clic su riferimenti
- Scegliere "aggiungi riferimento"
- Nella "casella di dialogo Aggiungi Riferimento, utilizzare il .Scheda rete
- 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