UrlEncode через консольное приложение?
Вопрос
Обычно я бы просто использовал:
HttpContext.Current.Server.UrlEncode("url");
Но поскольку это консольное приложение, HttpContext.Current
так будет всегда null
.
Есть ли другой метод, который делает то же самое, что я мог бы использовать?
Решение
Попробуй это!
Uri.EscapeUriString(url);
Или
Uri.EscapeDataString(data)
Нет необходимости ссылаться на System.Web.
Редактировать: Пожалуйста, посмотрите другой ТАК что отвечайте за большее...
Другие советы
Я не специалист по .NET, но разве вы не можете использовать:
HttpUtility.UrlEncode Method (String)
Который описан здесь:
Код от Иэна Хопкинса делает это за меня без необходимости добавлять ссылку на 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.
Я сам столкнулся с этой проблемой, и вместо того, чтобы добавлять Систему.Веб-сборка для своего проекта я написал класс для кодирования / декодирования 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.Чтобы сделать это,
- В обозревателе решений щелкните правой кнопкой мыши на ссылках
- Выберите "добавить ссылку".
- В диалоговом окне "Добавить ссылку" используйте вкладку .СЕТЬ
- Прокрутите вниз до пункта Система.Веб, выберите его и нажмите 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