UrlEncode通过控制台应用程序?
通常我只会使用:
HttpContext.Current.Server.UrlEncode("url");
但是由于这是一个控制台应用程序, HttpContext.Current
总是会为null
。
还有另一种方法可以做同样的事情吗?
尝试这个!
Uri.EscapeUriString(url);
无需引用System.Web。
我不是一个.NET的人,但是,你不能使用:
HttpUtility.UrlEncode Method (String)
这里描述的是:
在MSDN上的HttpUtility.UrlEncode方法(string)
伊恩·霍普金斯的代码为我做了窍门,而不必添加对System.Web的引用。 对于那些不使用VB.NET的人来说,这里是C#的端口:
/// <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是你的项目中的一个参考。 我不认为它是包含在控制台应用程序默认的参考。
尝试在HttpUtility类中使用UrlEncode方法。
我自己遇到了这个问题,而不是将System.Web程序集添加到我的项目中,我编写了一个编码/解码URL的类(它非常简单,我做了一些testing,但不是很多)。 我已经包含了下面的源代码。 请:如果你重复使用这个,请把评论留在最上面,如果它破坏了,不要怪我,从代码中学习。
''' <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的引用。 要做到这一点,
- 在解决scheme资源pipe理器中,右键单击引用
- select“添加参考”
- 在“添加引用”对话框中,使用.NET选项卡
- 向下滚动到System.Web,select它,然后点击确定
现在你可以使用UrlEncode方法。 你仍然想要添加,
使用System.Web
在控制台应用程序的顶部,或在调用方法时使用完整的名称空间,
System.Web.HttpUtility.UrlEncode(someString)
System.Web中的HttpUtility.UrlEncode(“url”)。
使用静态的HttpUtility.UrlEncode方法。
使用来自System.Net
命名空间的WebUtility.UrlEncode(string)
最好的事情是添加引用到System.web.dll
并使用var EncodedUrl = System.Web.HttpUtility.UrlEncode(“URL_TEXT”);
您可以在System.web.dll中find该文件