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


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

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

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

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

12 59

12 ответов:

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

Uri.EscapeUriString(url);

или

Uri.EscapeDataString(data)

нет необходимости в системе отсчета.Сеть.

Edit: см. другое так отвечу...

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

HttpUtility.UrlEncode Method (String)

, который описан здесь:

HttpUtility.UrlEncode метод (строка) на MSDN

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

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

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

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

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

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

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

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

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

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

теперь вы можете использовать метод UrlEncode. Вы все равно хотите добавить,

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

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

HttpUtility.UrlEncode ("url") в системе.Сеть.

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

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

и использовать var EncodedUrl=система.Сеть.HttpUtility.UrlEncode ("URL_TEXT");

вы можете найти файл в

Uri.EscapeUriString не следует использовать для экранирования строки, передаваемой в URL, поскольку она не кодирует все символы, как можно было бы ожидать. "+"Является хорошим примером, который не ускользнул. Затем это преобразуется в пробел в URL-адресе, так как это то, что это означает в простом URI. Очевидно, что это вызывает массовые проблемы в ту минуту, когда вы пытаетесь передать что-то вроде кодированной строки base 64 в URL-адресе, и пробелы появляются по всей строке на приемном конце.

вы можете использовать HttpUtility.UrlEncode и добавить необходимые ссылки на ваш проект (и если вы общаетесь с веб-приложением, то я не вижу причин, почему вы не должны этого делать).

альтернативно используйте Uri.Сбежал из-за Ури.EscapeUriString как очень хорошо объяснил здесь:https://stackoverflow.com/a/34189188/7391