ASP.NET Core'da URL Kodlama ve Kod Çözme


114
HttpContext.Current.Server.UrlEncode

Yalnızca .NET Framework'te çalışır. ASP.NET Core projesinde uri bağımsız değişkenlerini nasıl kodlayabilir veya kodunu çözebilirim?


2
ASP.NET Core'da veya Web dışı herhangi bir projede HttpContext yoktur. Aynı yöntem Uri sınıfının yöntemleri aracılığıyla kullanılabilir, örneğin Uri.EscapeDataString , Uri.EscapeUriString
Panagiotis Kanavos

1
@PanagiotisKanavos YANLIŞ - Hayır HttpContext.Currentama HttpContext.Net Core'un bir parçası - Microsoft.AspNetCore.Http.HttpContext. Bunu hatırla
J. Doe

Yorumun tamamını okumayı unutmayın. Bahsettiğiniz HttpContext, önceki sürümlerin HttpContext'inden ÇOK farklı. Bu var çok daha yaygındır Uri yöntemleri kullanmak
Panagiotis Kanavos

Yanıtlar:


187
  • ASP.NET Core 2.0+ için yalnızca System.Netad alanını ekleyin - WebUtilitysınıf, System.Runtime.ExtensionsASP.NET Core projesinde varsayılan olarak başvurulan nuget paketinin bir parçası olarak gönderilir .

  • Önceki sürüm için Microsoft.AspNetCore.WebUtilitiesnuget paketi ekleyin .

O zaman WebUtilityders sizin için uygun olacak:

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

6
SDK 2.0.0+ 'e karşı benim için işe yaramadı, ancak Manuel Alves cevabı (System.Net.WebUility) yaptı.
matt.chatterley


43

ASP.Net Core 2.0+ için ve şu şekilde kodlanacak boşluklara ihtiyacınız varsa %20

aksine +;

Kullanım:

 Uri.EscapeDataString(someString);

2

Vaktinizi boşa harcamayın, bu sözde url kodlayıcılarla ilgili pek çok deneyimim var, hepsi işe yaramaz ve farklı tuhaflıkları var. Örneğin, WebUtility.UrlEncode "+" işaretiyle ilgilenmez.

URL parametrelerini kodlamak istiyorsanız, bir BASE58 kodlaması kullanın. Yalnızca alfabe harfleri + sayılar kullanır, bu nedenle URL kodlamanıza gerek yoktur.


Tüm bu tuhaflıkları açıklayabilir misiniz, yalnızca QueryHelpers.AddQueryString veya Uri.EscapeDataString'in yapmadığını + aşinayım.
Michael

Az önce denedim WebUtility.UrlEncodeve harika bir şekilde artı işaretini ("+") "% 2B" ye dönüştürdü. .NET Core 3.1 kullanıyorum.
Dejan

0

Bir yönlendirme kullanıyorum ve UrlEncode, tüm url'yi kodladığı için benim için çalışmadı. Bunun yerine aşağıda gösterilen UriHelper.Encode kullanarak bunu çözdüm.

UriHelper.Encode

// generate url string...
return Redirect(Microsoft.AspNetCore.Http.Extensions.UriHelper.Encode(new System.Uri(url)));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.