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?


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);
}

6
Hat bei mir gegen SDK 2.0.0+ nicht funktioniert, aber die Antwort von Manuel Alves (System.Net.WebUility) hat funktioniert.
Matt.chatterley


43

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

im Gegensatz zu +;

Verwenden:

 Uri.EscapeDataString(someString);

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.


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)));
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.