关于c#:UrlEncode通过控制台应用程序?

关于c#:UrlEncode通过控制台应用程序?

UrlEncode through a console application?

通常我只会使用:

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中找到文件


    推荐阅读