UrlEncode через консольное приложение?

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

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

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

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

Ответ 1

Попробуйте это!

Uri.EscapeUriString(url);

Не нужно ссылаться на System.Web.

Ответ 3

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

Ответ 4

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

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

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

Ответ 6

Я столкнулся с этой проблемой сам, и вместо того, чтобы добавить сборку 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

Ответ 7

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

  • В своем проводнике решений щелкните правой кнопкой мыши по ссылкам
  • Выберите "добавить ссылку"
  • В диалоговом окне "Добавить ссылку" используйте вкладку .NET
  • Прокрутите вниз до System.Web, выберите это и нажмите ok

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

с помощью System.Web

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

System.Web.HttpUtility.UrlEncode(SomeString)

Ответ 8

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

Ответ 9

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

Ответ 10

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

Ответ 11

Лучше всего добавить ссылку на System.web..dll

и используйте var EncodedUrl = System.Web.HttpUtility.UrlEncode( "URL_TEXT" );

Файл находится в System.web.dll