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?


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

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

6
Tidak berhasil untuk saya terhadap SDK 2.0.0+, namun jawaban Manuel Alves (System.Net.WebUility) berhasil.
matt.chatterley


43

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

sebagai lawan +;

Menggunakan:

 Uri.EscapeDataString(someString);

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.


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)));
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.