UrlEncode через консольное приложение? - PullRequest
61 голосов
/ 18 августа 2008

Обычно я бы просто использовал:

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

Но так как это консольное приложение, HttpContext.Current всегда будет null.

Есть ли другой метод, который делает то же самое, что я мог бы использовать?

Ответы [ 12 ]

76 голосов
/ 19 января 2012

Попробуйте!

Uri.EscapeUriString(url);

Или

Uri.EscapeDataString(data)

Нет необходимости ссылаться на System.Web.

Редактировать: Пожалуйста, смотрите другой ТАК ответ на больше ...

72 голосов
/ 18 августа 2008

Я не парень .NET, но вы не можете использовать:

HttpUtility.UrlEncode Method (String)

Что описано здесь:

Метод HttpUtility.UrlEncode (String) в MSDN

13 голосов
/ 24 октября 2010

Код от Яна Хопкинса помогает мне без добавления ссылки на System.Web. Вот порт для C # для тех, кто не использует 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));
    }
}
6 голосов
/ 18 августа 2008

Вы захотите использовать

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

Убедитесь, что system.web является одной из ссылок в вашем проекте. Я не думаю, что он включен в качестве ссылки по умолчанию в консольных приложениях.

4 голосов
/ 18 августа 2008

Попробуйте использовать метод UrlEncode в классе HttpUtility.

  1. http://msdn.microsoft.com/en-us/library/system.web.httputility.urlencode.aspx
3 голосов
/ 29 января 2016

Использование WebUtility.UrlEncode(string) из System.Net пространства имен

3 голосов
/ 24 декабря 2008

Я столкнулся с этой проблемой сам, и вместо того, чтобы добавить сборку System.Web в свой проект, я написал класс для кодирования / декодирования URL-адресов (это довольно просто, и я провел некоторое тестирование, но не много) , Я включил исходный код ниже. Пожалуйста: оставьте комментарий вверху, если вы снова его используете, не вините меня, если он сломается, учитесь на коде.

''' <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
2 голосов
/ 16 марта 2009

Кибби предлагает реальный ответ. Да, HttpUtility.UrlEncode - правильный метод для использования, но он не будет доступен по умолчанию для консольного приложения. Вы должны добавить ссылку на System.Web. Для этого

  1. В обозревателе решений щелкните правой кнопкой мыши ссылки
  2. Выберите «Добавить ссылку»
  3. В диалоговом окне «Добавить ссылку» используйте вкладку .NET
  4. Прокрутите вниз до System.Web, выберите его и нажмите ОК

СЕЙЧАС вы можете использовать метод UrlEncode. Вы все еще хотите добавить,

с использованием System.Web

в верхней части консольного приложения или использовать полное пространство имен при вызове метода,

System.Web.HttpUtility.UrlEncode (SomeString) * 1 021 *

1 голос
/ 18 августа 2008

использовать статический метод HttpUtility.UrlEncode.

1 голос
/ 18 августа 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...