c# - httputility - UrlEncode a través de una aplicación de consola?
convert to url encoding c# (11)
HttpUtility.UrlEncode ("url") en System.Web.
Normalmente solo usaría:
HttpContext.Current.Server.UrlEncode("url");
Pero como se trata de una aplicación de consola, HttpContext.Current
siempre será null
.
¿Hay algún otro método que haga lo mismo que yo podría usar?
Intenta usar el método UrlEncode en la clase HttpUtility.
utilice el método estático HttpUtility.UrlEncode.
Me encontré con este problema yo mismo, y en lugar de agregar el ensamblado System.Web a mi proyecto, escribí una clase para codificar / descodificar URL (es bastante simple, y he hecho algunas pruebas, pero no mucho). He incluido el código fuente a continuación. Por favor: deja el comentario en la parte superior si vuelves a usar esto, no me culpes si se rompe, aprende del código.
'''''' <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
Kibbee ofrece la respuesta real. Sí, HttpUtility.UrlEncode es el método correcto para usar, pero no estará disponible por defecto para una aplicación de consola. Debe agregar una referencia a System.Web. Para hacer eso,
- En su explorador de soluciones, haga clic derecho en referencias
- Elija "agregar referencia"
- En el cuadro de diálogo "Agregar referencia", use la pestaña .NET
- Desplázate hasta System.Web, selecciona eso y presiona ok
AHORA puedes usar el método UrlEncode. Aún querrás agregar,
usando System.Web
en la parte superior de la aplicación de la consola o usa el espacio de nombres completo cuando llamas al método,
System.Web.HttpUtility.UrlEncode (someString)
El código de Ian Hopkins me lo explica sin tener que agregar una referencia a System.Web. Aquí hay un puerto a C # para aquellos que no están usando 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));
}
}
Querrás usar
System.Web.HttpUtility.urlencode("url")
Asegúrese de tener system.web como una de las referencias en su proyecto. No creo que esté incluido como referencia por defecto en las aplicaciones de la consola.
No soy un chico de .NET, pero, ¿no puedes usar:
HttpUtility.UrlEncode Method (String)
Que se describe aquí:
¡Prueba esto!
Uri.EscapeUriString(url);
No es necesario hacer referencia a System.Web.
Use WebUtility.UrlEncode(string)
desde el espacio de nombres System.Net
Lo mejor es Agregar referencia a System.web..dll
y use var EncodedUrl = System.Web.HttpUtility.UrlEncode ("URL_TEXT");
Puede encontrar el archivo en System.web.dll