通常我只会使用:
1
| HttpContext.Current.Server.UrlEncode("url"); |
但是,由于这是一个控制台应用程序,因此HttpContext.Current始终将是null。
还有另一种方法可以执行与我相同的操作吗?
尝试这个!
1
| Uri.EscapeUriString(url); |
要么
1
| Uri.EscapeDataString(data) |
无需引用System.Web。
编辑:请参阅另一个SO答案以了解更多...
我不是.NET专家,但您不能使用:
1
| HttpUtility.UrlEncode Method (String) |
此处描述:
MSDN上的HttpUtility.UrlEncode方法(字符串)
Ian Hopkins的代码无需添加对System.Web的引用即可为我解决问题。对于不使用VB.NET的用户,这是C#的端口:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| /// <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));
}
} |
您将要使用
1
| System.Web.HttpUtility.urlencode("url") |
确保您将system.web作为项目中的引用之一。我不认为默认情况下控制台应用程序会将其作为参考。
尝试在HttpUtility类中使用UrlEncode方法。
http://msdn.microsoft.com/zh-CN/library/system.web.httputility.urlencode.aspx
使用System.Net名称空间中的WebUtility.UrlEncode(string)
我自己遇到了这个问题,没有将System.Web程序集添加到我的项目中,而是编写了一个用于URL编码/解码的类(它非常简单,并且我已经做了一些测试,但还没有做很多事情)。我在下面包含了源代码。请:如果您重复使用此注释,请在顶部保留注释,如果注释破裂,请不要怪我,请从代码中学习。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| ''' <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 |
Kibbee提供了真正的答案。是的,使用HttpUtility.UrlEncode是正确的方法,但是默认情况下,控制台应用程序将无法使用它。您必须添加对System.Web的引用。要做到这一点,
在您的解决方案资源管理器中,右键单击引用
选择"添加参考"
在"添加引用"对话框中,使用.NET选项卡
向下滚动到System.Web,选择它,然后单击确定
现在,您可以使用UrlEncode方法。您仍然要添加,
使用System.Web
在控制台应用程序的顶部,或者在调用方法时使用完整的名称空间,
System.Web.HttpUtility.UrlEncode(someString)
使用静态HttpUtility.UrlEncode方法。
System.Web中的HttpUtility.UrlEncode(" url")。
Uri.EscapeUriString不应用于转义要在URL中传递的字符串,因为它不会像您期望的那样对所有字符进行编码。" +"是一个很好的例子,它不能逃脱。然后将其转换为URL中的空格,因为这就是简单URI中的含义。显然,当您尝试在URL中传递诸如base 64编码的字符串之类的内容时,就会导致大量问题,并且在接收端的字符串中都会出现空格。
您可以使用HttpUtility.UrlEncode并将所需的引用添加到您的项目中(如果您正在与Web应用程序进行通信,那么我认为没有理由不应该这样做)。
也可以在Uri.EscapeUriString上使用Uri.EscapeDataString,如此处所述:https://stackoverflow.com/a/34189188/7391
最好的办法是添加对System.web..dll的引用
和使用
var EncodedUrl = System.Web.HttpUtility.UrlEncode(" URL_TEXT");
您可以在System.web.dll中找到文件