Pregunta

Normalmente solo usaría:

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

Pero como se trata de una aplicación de consola, HttpContext.Current siempre va a ser null.

¿Existe otro método que haga lo mismo que pueda usar?

¿Fue útil?

Solución

¡Prueba esto!

Uri.EscapeUriString(url);

O

Uri.EscapeDataString(data)

No es necesario hacer referencia a System.Web.

Editar: Por favor mira otro Así que responda para más...

Otros consejos

No soy un tipo de .NET, pero ¿no puedes usar?

HttpUtility.UrlEncode Method (String)

Que se describe aquí:

Método HttpUtility.UrlEncode (cadena) en MSDN

El código de Ian Hopkins me funciona sin tener que agregar una referencia a System.Web.Aquí hay una adaptación a C# para aquellos que no usan 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úrate de tener system.web como una de las referencias en tu proyecto.No creo que esté incluido como referencia por defecto en las aplicaciones de consola.

Intente utilizar el método UrlEncode en la clase HttpUtility.

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

Yo mismo me encontré con este problema y, en lugar de agregar el ensamblado System.Web a mi proyecto, escribí una clase para codificar/decodificar URL (es bastante simple y he realizado algunas pruebas, pero no muchas).He incluido el código fuente a continuación.Por favor:deja el comentario en la parte superior si reutilizas 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

Usar WebUtility.UrlEncode(string) de System.Net espacio de nombres

Kibbee ofrece la verdadera respuesta.Sí, HttpUtility.UrlEncode es el método correcto a utilizar, pero no estará disponible de forma predeterminada para una aplicación de consola.Tú debe agregue una referencia a System.Web.Para hacer eso,

  1. En su explorador de soluciones, haga clic derecho en referencias
  2. Elija "añadir referencia"
  3. En el cuadro de diálogo "Agregar referencia", use la pestaña .NET
  4. Desplácese hacia abajo hasta System.Web, selecciónelo y presione Aceptar

AHORA puedes usar el método UrlEncode.Aún querrás agregar,

usando System.Web

en la parte superior de la aplicación de su consola o use el espacio de nombres completo al llamar al método,

System.Web.HttpUtility.UrlEncode (alguna cadena)

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

utilice el método estático HttpUtility.UrlEncode.

Lo mejor es agregar una referencia a System.web..dll

y use var encodedUrl = system.web.httputility.urlencode ("url_text");

Puede encontrar el archivo en System.web.dll

Uri.EscapeUriString no debe usarse para escapar de una cadena que se pasará en una URL, ya que no codifica todos los caracteres como se podría esperar.El '+' es un buen ejemplo que no se escapa.Luego, esto se convierte en un espacio en la URL, ya que esto es lo que significa en una URI simple.Obviamente, eso causa grandes problemas en el momento en que intentas pasar algo como una cadena codificada en base 64 en la URL y aparecen espacios en toda la cadena en el extremo receptor.

Puede usar HttpUtility.UrlEncode y agregar las referencias requeridas a su proyecto (y si se está comunicando con una aplicación web, no veo ninguna razón por la que no deba hacer esto).

Alternativamente, use Uri.EscapeDataString sobre Uri.EscapeUriString como se explica muy bien aquí: https://stackoverflow.com/a/34189188/7391

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top