Pergunta

Normalmente eu usaria apenas:

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

Mas como este é um aplicativo de console, HttpContext.Current sempre vai ser null.

Existe outro método que faz a mesma coisa que eu poderia usar?

Foi útil?

Solução

Experimente isso!

Uri.EscapeUriString(url);

Ou

Uri.EscapeDataString(data)

Não há necessidade de fazer referência ao System.Web.

Editar: Por favor, veja outro Então responda para mais ...

Outras dicas

Não sou um cara de .NET, mas você não pode usar:

HttpUtility.UrlEncode Method (String)

Que está descrito aqui:

Método HttpUtility.UrlEncode (String) no MSDN

O código de Ian Hopkins funciona para mim sem precisar adicionar uma referência ao System.Web.Aqui está uma porta para C# para quem não está 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));
    }
}

Você vai querer usar

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

Certifique-se de ter system.web como uma das referências em seu projeto.Não acho que esteja incluído como referência por padrão em aplicativos de console.

Tente usar o método UrlEncode na classe HttpUtility.

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

Eu mesmo me deparei com esse problema e, em vez de adicionar o assembly System.Web ao meu projeto, escrevi uma classe para codificação/decodificação de URLs (é muito simples e fiz alguns testes, mas não muitos).Incluí o código-fonte abaixo.Por favor:deixe o comentário no topo se você reutilizar isso, não me culpe se quebrar, aprenda com o 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 espaço para nome

Kibbee oferece a verdadeira resposta.Sim, HttpUtility.UrlEncode é o método correto a ser usado, mas não estará disponível por padrão para um aplicativo de console.Você deve adicione uma referência ao System.Web.Fazer isso,

  1. No seu explorador de soluções, clique com o botão direito nas referências
  2. Escolha "adicionar referência"
  3. Na caixa de diálogo "Adicionar referência", use a guia .NET
  4. Role para baixo até System.Web, selecione-o e clique em ok

AGORA você pode usar o método UrlEncode.Você ainda vai querer adicionar,

usando System.Web

na parte superior do seu aplicativo de console ou use o namespace completo ao chamar o método,

System.Web.HttpUtility.UrlEncode(someString)

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

use o método estático HttpUtility.UrlEncode.

A melhor coisa é adicionar referência a System.web..dll

e use var codedurl = System.web.httputility.urlencode ("url_text");

Você pode encontrar o arquivo em System.web.dll

Uri.EscapeUriString não deve ser usado para escapar de uma string a ser passada em uma URL, pois não codifica todos os caracteres como você poderia esperar.O '+' é um bom exemplo do qual não há escape.Isso então é convertido em um espaço na URL, pois é isso que significa em um URI simples.Obviamente, isso causa grandes problemas no minuto em que você tenta passar algo como uma string codificada em base 64 no URL e espaços aparecem em toda a string no final do recebimento.

Você pode usar HttpUtility.UrlEncode e adicionar as referências necessárias ao seu projeto (e se estiver se comunicando com um aplicativo da web, não vejo razão para não fazer isso).

Como alternativa, use Uri.EscapeDataString sobre Uri.EscapeUriString conforme explicado muito bem aqui: https://stackoverflow.com/a/34189188/7391

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top