Mã hóa và giải mã URL trong ASP.NET Core


113
HttpContext.Current.Server.UrlEncode

Nó chỉ hoạt động trong .NET Framework. Làm cách nào để mã hóa hoặc giải mã các đối số của uri trong dự án ASP.NET Core?


2
Không có HttpContext trong ASP.NET Core - hoặc bất kỳ dự án không phải Web nào. Cùng một phương pháp có sẵn thông qua các phương thức của lớp Uri, ví dụ như Uri.EscapeDataString , Uri.EscapeUriString
Panagiotis Kanavos

1
@PanagiotisKanavos SAI - Không có HttpContext.Currentnhưng HttpContextlà một phần của .Net Core - Microsoft.AspNetCore.Http.HttpContext. Hãy nhớ điều này
J. Doe

Nhớ đọc toàn bộ bình luận. HttpContext mà bạn đề cập RẤT khác với HttpContext của các phiên bản trước. Đó là phổ biến hơn để sử dụng các phương pháp Uri
Panagiotis Kanavos

Câu trả lời:


186
  • Đối với ASP.NET Core 2.0+, chỉ cần thêm System.Netkhông gian tên - WebUtilitylớp được vận chuyển như một phần của System.Runtime.Extensionsgói nuget, được tham chiếu theo mặc định trong dự án ASP.NET Core.

  • Đối với phiên bản trước, thêm Microsoft.AspNetCore.WebUtilitiesgói nuget.

Sau đó, WebUtilitylớp học sẽ có sẵn cho bạn:

public static class WebUtility
{
    public static string UrlDecode(string encodedValue);
    public static string UrlEncode(string value);
}

6
Không phù hợp với tôi với SDK 2.0.0+, tuy nhiên câu trả lời của Manuel Alves (System.Net.WebUility) đã làm được.
matt.chatterley


43

Đối với ASP.Net Core 2.0+ và nếu bạn cần khoảng trắng được mã hóa thành %20

trái ngược với +;

Sử dụng:

 Uri.EscapeDataString(someString);

2

Đừng lãng phí thời gian của bạn, tôi đã có rất nhiều kinh nghiệm với những cái gọi là bộ mã hóa url này, chúng đều vô dụng và có những điểm khác nhau. Ví dụ: WebUtility.UrlEncode không quan tâm đến dấu "+".

Nếu bạn muốn mã hóa các tham số URL, hãy sử dụng mã hóa BASE58. Nó chỉ sử dụng các chữ cái + số trong bảng chữ cái, do đó bạn không cần mã hóa url.


Bạn có thể giải thích tất cả những điều kỳ quặc này không, tôi chỉ quen thuộc với + mà QueryHelpers.AddQueryString hoặc Uri.EscapeDataString không làm được.
Michael

Tôi vừa dùng thử WebUtility.UrlEncodevà nó đã chuyển đổi một cách tuyệt vời dấu cộng ("+") thành "% 2B". Tôi đang sử dụng .NET Core 3.1.
Dejan

0

Tôi đang sử dụng chuyển hướng và UrlEncode không hoạt động với tôi vì nó mã hóa toàn bộ url. Tôi đã giải quyết điều này thay vào đó bằng cách sử dụng UriHelper.Encode, được hiển thị bên dưới.

UriHelper.Encode

// generate url string...
return Redirect(Microsoft.AspNetCore.Http.Extensions.UriHelper.Encode(new System.Uri(url)));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.