Сведения о вопросе

LARVION

21:29, 16th August, 2020

Теги

c#   .net   console    

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

Просмотров: 409   Ответов: 12

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

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

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

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



  Сведения об ответе

piter

18:03, 4th August, 2020

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

Uri.EscapeUriString(url);

Или

Uri.EscapeDataString(data)

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

Edit: пожалуйста, смотрите другой ответ SO для получения дополнительной информации...


  Сведения об ответе

FAriza

21:06, 1st October, 2020

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

HttpUtility.UrlEncode Method (String)

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

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


  Сведения об ответе

P_S_S

13:26, 20th August, 2020

Код от Яна Хопкинса делает этот трюк для меня, не добавляя ссылку на 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));
    }
}


  Сведения об ответе

baggs

04:44, 11th August, 2020

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

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

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


  Сведения об ответе

Chhiki

08:27, 17th August, 2020

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

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


  Сведения об ответе

ASER

12:28, 8th August, 2020

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

''' <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


  Сведения об ответе

qwerty101

08:18, 2nd August, 2020

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


  Сведения об ответе

prince

17:04, 14th August, 2020

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

  1. В вашем решении explorer щелкните правой кнопкой мыши ссылки
  2. Выберите "add reference"
  3. В диалоговом окне "Add Reference" используйте вкладку .NET
  4. Прокрутите вниз до System.Web, выберите его и нажмите ok

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

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

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

System.Web.HttpUtility.UrlEncode(someString)


  Сведения об ответе

lats

13:13, 10th August, 2020

HttpUtility.UrlEncode("url") в System.Web году.


  Сведения об ответе

baggs

15:31, 20th August, 2020

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


  Сведения об ответе

$DOLLAR

16:27, 25th August, 2020

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

и использовать ВАР EncodedUrl=System.Web.HttpUtility.UrlEncode("URL_TEXT");

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


  Сведения об ответе

ITSME

21:06, 1st October, 2020

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться