Вопрос

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

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

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

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

Это было полезно?

Решение

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

Uri.EscapeUriString(url);

Или

Uri.EscapeDataString(data)

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

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

Другие советы

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

HttpUtility.UrlEncode Method (String)

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

HttpUtility.Метод UrlEncode (строка) в MSDN

Код от Иэна Хопкинса делает это за меня без необходимости добавлять ссылку на 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));
    }
}

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

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

Убедитесь, что у вас есть system.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.Web.Чтобы сделать это,

  1. В обозревателе решений щелкните правой кнопкой мыши на ссылках
  2. Выберите "добавить ссылку".
  3. В диалоговом окне "Добавить ссылку" используйте вкладку .СЕТЬ
  4. Прокрутите вниз до пункта Система.Веб, выберите его и нажмите ok

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

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

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

System.Web.HttpUtility.UrlEncode(некоторая строка)

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

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

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

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

Вы можете найти этот Файл по адресу System.web.dll

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top