URL-Codierung und -Decodierung in ASP.NET Core

113
HttpContext.Current.Server.UrlEncode

Es funktioniert nur in .NET Framework. Wie kann ich uri-Argumente in einem ASP.NET Core-Projekt codieren oder decodieren?

wtf512
quelle
2
In ASP.NET Core gibt es keinen HttpContext - oder ein Nicht-Webprojekt. Die gleiche Methode ist über die Methoden der Uri-Klasse verfügbar, z. B. Uri.EscapeDataString , Uri.EscapeUriString
Panagiotis Kanavos
1
@PanagiotisKanavos FALSCH - Es gibt keinen, HttpContext.Currentaber HttpContexteinen Teil von .Net Core - Microsoft.AspNetCore.Http.HttpContext. Denken Sie daran
J. Doe
Denken Sie daran, den gesamten Kommentar zu lesen. Der von Ihnen erwähnte HttpContext unterscheidet sich SEHR vom HttpContext früherer Versionen. Es ist weitaus üblicher , die Uri-Methoden zu verwenden
Panagiotis Kanavos
Mögliches Duplikat des Ersatzes
Win

Antworten:

186
  • Für ASP.NET Core 2.0+ fügen Sie einfach einen System.NetNamespace hinzu. Die WebUtilityKlasse wird als Teil des System.Runtime.ExtensionsNuget-Pakets geliefert, auf das im ASP.NET Core-Projekt standardmäßig verwiesen wird.

  • Für die vorherige Version fügen Sie das Microsoft.AspNetCore.WebUtilitiesNuget-Paket hinzu.

Dann WebUtilitysteht Ihnen die Klasse zur Verfügung:

public static class WebUtility
{
    public static string UrlDecode(string encodedValue);
    public static string UrlEncode(string value);
}
einstellen
quelle
6
Hat bei mir gegen SDK 2.0.0+ nicht funktioniert, aber die Antwort von Manuel Alves (System.Net.WebUility) hat funktioniert.
Matt.chatterley
80

Es ist in Version 2.0.0 des .Net Core SDK in verfügbar System.Net.WebUtility.UrlEncode( siehe Dokumentation ).

Manuel Alves
quelle
2
Dies sollte als die richtige Antwort markiert werden. Vielen Dank.
Tod Birdsall
11
Für Net Core 2+, wenn ich verwende System.Net.WebUtility.UrlEncode: Leerzeichen werden mit a codiert +. Ich habe Uri.EscapeDataStringmit codiert %20.
ttugates
43

Für ASP.Net Core 2.0+ und wenn Leerzeichen codiert werden müssen als %20

im Gegensatz zu +;

Verwenden:

 Uri.EscapeDataString(someString);
ttugates
quelle
2

Verschwenden Sie keine Zeit, ich habe viel Erfahrung mit diesen sogenannten URL-Encodern, sie sind alle nutzlos und haben unterschiedliche Macken. Zum Beispiel kümmert sich WebUtility.UrlEncode nicht um das "+" - Zeichen.

Wenn Sie URL-Parameter codieren möchten, verwenden Sie eine BASE58-Codierung. Es werden nur Buchstaben + Zahlen verwendet, sodass Sie keine URL-Codierung benötigen.

Erti-Chris Eelmaa
quelle
Können Sie all diese Macken erklären? Ich kenne nur +, was QueryHelpers.AddQueryString oder Uri.EscapeDataString nicht tun.
Michael
Ich habe es gerade ausprobiert WebUtility.UrlEncodeund es hat wunderbar ein Pluszeichen ("+") in ein "% 2B" umgewandelt. Ich verwende .NET Core 3.1.
Dejan
0

Ich verwende eine Umleitung , und UrlEncode hat bei mir nicht funktioniert, da es die gesamte URL codiert. Ich habe dies gelöst, indem ich stattdessen UriHelper.Encode verwendet habe (siehe unten).

UriHelper.Encode

// generate url string...
return Redirect(Microsoft.AspNetCore.Http.Extensions.UriHelper.Encode(new System.Uri(url)));
Jordanien
quelle