URL Encode dan Decode di ASP.NET Core

113
HttpContext.Current.Server.UrlEncode

Ini hanya berfungsi di .NET Framework. Bagaimana cara menyandikan atau memecahkan kode argumen uri dalam proyek ASP.NET Core?

wtf512
sumber
2
Tidak ada HttpContext di ASP.NET Core - atau proyek non-Web. Metode yang sama tersedia melalui metode kelas Uri, misalnya Uri.EscapeDataString , Uri.EscapeUriString
Panagiotis Kanavos
1
@PanagiotisKanavos SALAH - Tidak ada HttpContext.Currenttetapi HttpContextmerupakan bagian dari .Net Core - Microsoft.AspNetCore.Http.HttpContext. Ingat ini
J. Doe
Ingatlah untuk membaca seluruh komentar. HttpContext yang Anda sebutkan SANGAT berbeda dari HttpContext versi sebelumnya. Ini jauh lebih umum untuk menggunakan metode Uri
Panagiotis Kanavos
Kemungkinan duplikat pengganti WebUtility.HtmlDecode di .NET Core
Menangkan

Jawaban:

186
  • Untuk ASP.NET Core 2.0+ cukup tambahkan System.Netnamespace - WebUtilitykelas dikirimkan sebagai bagian dari System.Runtime.Extensionspaket nuget, yang direferensikan secara default dalam proyek ASP.NET Core.

  • Untuk versi sebelumnya tambahkan Microsoft.AspNetCore.WebUtilitiespaket nuget.

Kemudian WebUtilitykelas akan tersedia untuk Anda:

public static class WebUtility
{
    public static string UrlDecode(string encodedValue);
    public static string UrlEncode(string value);
}
Set
sumber
6
Tidak berhasil untuk saya terhadap SDK 2.0.0+, namun jawaban Manuel Alves (System.Net.WebUility) berhasil.
matt.chatterley
80

Ini tersedia pada versi 2.0.0 dari .Net Core SDK , di System.Net.WebUtility.UrlEncode( lihat dokumentasi )

Manuel Alves
sumber
2
Ini harus ditandai sebagai jawaban yang benar. Terima kasih.
Tod Birdsall
11
Untuk Net Core 2+, ketika saya menggunakan System.Net.WebUtility.UrlEncode: spasi dikodekan dengan a +. Saya biasa Uri.EscapeDataStringmenyandikan dengan %20.
ttugates
43

Untuk ASP.Net Core 2.0+ dan jika Anda memerlukan spasi untuk dikodekan sebagai %20

sebagai lawan +;

Menggunakan:

 Uri.EscapeDataString(someString);
ttugates
sumber
2

Jangan buang waktu Anda, saya punya banyak pengalaman dengan yang disebut pembuat enkode url ini, semuanya tidak berguna, dan memiliki kebiasaan yang berbeda. Misalnya WebUtility.UrlEncode tidak menangani tanda "+".

Jika Anda ingin menyandikan parameter URL, gunakan pengkodean BASE58. Ini hanya menggunakan huruf alfabet + angka, jadi Anda tidak perlu menyandikan url.

Erti-Chris Eelmaa
sumber
Bisakah Anda menjelaskan semua keanehan ini, saya hanya akrab dengan + yang QueryHelpers.AddQueryString atau Uri.EscapeDataString tidak melakukannya.
Michael
Saya baru saja mencoba WebUtility.UrlEncodedan secara menakjubkan mengubah tanda plus ("+") menjadi "% 2B". Saya menggunakan .NET Core 3.1.
Dejan
0

Saya menggunakan pengalihan , dan UrlEncode tidak berfungsi untuk saya karena mengkodekan seluruh url. Saya menyelesaikan ini dengan menggunakan UriHelper.Encode, yang ditunjukkan di bawah ini.

UriHelper.Encode

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