Urlencode prostřednictvím aplikace konzoly?

hlasů
58

Normálně bych prostě použít:

HttpContext.Current.Server.UrlEncode(url);

Ale protože se jedná o konzolovou aplikaci, HttpContext.Currentje vždy bude null.

Je tu další metoda, která dělá totéž, že bych mohl použít?

Položena 18/08/2008 v 15:48
zdroj uživatelem
V jiných jazycích...                            


12 odpovědí

hlasů
72

Nejsem NET chlap, ale nelze použít:

HttpUtility.UrlEncode Method (String)

Která je popsána zde:

HttpUtility.UrlEncode Method (String) na webu MSDN

Odpovězeno 18/08/2008 v 15:51
zdroj uživatelem

hlasů
70

Zkuste to!

Uri.EscapeUriString(url);

Nebo

Uri.EscapeDataString(data)

Není třeba odkazovat System.Web.

Edit: Viz další SO zodpovědět více ...

Odpovězeno 19/01/2012 v 19:41
zdroj uživatelem

hlasů
13

Kód z Ian Hopkins dělá trik pro mě, aniž by museli přidat odkaz na System.Web. Zde je port pro C # pro ty, kteří nepoužívají 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));
    }
}
Odpovězeno 24/10/2010 v 02:25
zdroj uživatelem

hlasů
6

Budete chtít používat

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

Ujistěte se, že jste System.Web jako jeden z odkazů v projektu. Nemyslím si, že to je součástí jako odkaz ve výchozím nastavení aplikace konzoly.

Odpovězeno 18/08/2008 v 15:53
zdroj uživatelem

hlasů
4

Zkuste použít metodu urlencode ve třídě HttpUtility.

  1. http://msdn.microsoft.com/en-us/library/system.web.httputility.urlencode.aspx
Odpovězeno 18/08/2008 v 15:50
zdroj uživatelem

hlasů
3

Použijte WebUtility.UrlEncode(string)z System.Netnázvů

Odpovězeno 29/01/2016 v 20:08
zdroj uživatelem

hlasů
3

Narazil jsem na tento problém vyřešit sám, a spíše než přidat sestavu System.Web na můj projekt, jsem napsal třídu pro kódování / dekódování adresy URL (jeho docela jednoduché, a já jsem udělal nějaké testy, ale ne moc). Uvedl jsem zdrojový kód níže. Prosím: nechat komentář na vrcholu, když se opakovaně to, neříkejte mi vyčítat, pokud se rozbije, poučit se z kódu.

''' <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
Odpovězeno 24/12/2008 v 03:43
zdroj uživatelem

hlasů
2

Kibbee nabízí skutečnou odpověď. Ano, HttpUtility.UrlEncode je tou správnou metodu použít, ale nebude k dispozici ve výchozím nastavení aplikace konzoly. Vy musíte přidat odkaz na System.Web. Udělat to,

  1. Ve vaší aplikaci Solution Explorer klepněte pravým tlačítkem myši na odkazy
  2. Zvolte „přidat odkaz“
  3. V dialogovém okně „Přidat odkaz“, použijte kartu .NET
  4. Přejděte dolů do System.Web, vyberte to, a hit ok

Nyní můžete použít metodu urlencode. Stále budete chtít přidat,

použitím System.Web

V horní části konzoly aplikace nebo použít plnou názvů při volání metody,

System.Web.HttpUtility.UrlEncode (someString)

Odpovězeno 16/03/2009 v 16:08
zdroj uživatelem

hlasů
1

použít statické metody HttpUtility.UrlEncode.

Odpovězeno 18/08/2008 v 15:52
zdroj uživatelem

hlasů
1

HttpUtility.UrlEncode ( "URL") v System.Web.

Odpovězeno 18/08/2008 v 15:51
zdroj uživatelem

hlasů
0

Uri.EscapeUriString by neměly být používány k útěku řetězec předán do URL, protože nekóduje všechny znaky, jak by se dalo očekávat. K ‚+‘ je dobrým příkladem, který není unikl. To pak dostane převeden do prostoru v URL, protože to je to, co to znamená v jednoduchém URI. Je zřejmé, že způsobuje masivními emisemi minutu pokusu a předat něco jako základna 64 kódovaného řetězce v URL a zobrazí prostor po celém řetězci na přijímací straně.

Můžete použít HttpUtility.UrlEncode a přidejte požadované odkazy na projektu (a pokud jste komunikaci s webovou aplikací pak nevidím důvod, proč byste neměli to udělat).

Alternativně použít Uri.EscapeDataString přes Uri.EscapeUriString jak je vysvětleno velmi dobře se zde: https://stackoverflow.com/a/34189188/7391

Odpovězeno 15/02/2018 v 11:09
zdroj uživatelem

hlasů
0

Nejlepší je přidat odkaz na System.web..dll

a použití var EncodedUrl = System.Web.HttpUtility.UrlEncode ( "URL_TEXT");

Najdete soubor na System.web.dll

Odpovězeno 02/08/2016 v 06:16
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more