เข้ารหัสและถอดรหัส URL ใน ASP.NET Core


114
HttpContext.Current.Server.UrlEncode

ใช้ได้เฉพาะใน. NET Framework เท่านั้น ฉันจะเข้ารหัสหรือถอดรหัสอาร์กิวเมนต์ uri ในโครงการ ASP.NET Core ได้อย่างไร


2
ไม่มี HttpContext ใน ASP.NET Core - หรือโปรเจ็กต์อื่น ๆ ที่ไม่ใช่เว็บ วิธีการเดียวกันนี้สามารถใช้ได้กับวิธีการของคลาส Uri เช่นUri.EscapeDataString , Uri.EscapeUriString
Panagiotis Kanavos

1
@PanagiotisKanavos ผิด - ไม่มีHttpContext.Currentแต่HttpContextเป็นส่วนหนึ่งของ. Net Core - Microsoft.AspNetCore.Http.HttpContext. จำสิ่งนี้ไว้
J. Doe

อย่าลืมอ่านความคิดเห็นทั้งหมด HttpContext ที่คุณกล่าวถึงเป็นอย่างมากแตกต่างจาก HttpContext ของรุ่นก่อนหน้านี้ เป็นเรื่องปกติมากที่จะใช้วิธีการ Uri
Panagiotis Kanavos

อาจซ้ำกันของการเปลี่ยน WebUtility.HtmlDecode ใน. NET Core
ชนะ

คำตอบ:


187
  • สำหรับ ASP.NET Core 2.0+ เพียงแค่เพิ่มSystem.Netเนมสเปซ - WebUtilityคลาสจะถูกจัดส่งเป็นส่วนหนึ่งของSystem.Runtime.Extensionsแพ็กเกจ nuget ซึ่งอ้างอิงตามค่าเริ่มต้นในโครงการ ASP.NET Core

  • สำหรับเวอร์ชันก่อนหน้านี้ให้เพิ่มMicrosoft.AspNetCore.WebUtilitiesแพ็คเกจ nuget

จากนั้นWebUtilityชั้นเรียนจะพร้อมให้คุณ:

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

6
ไม่ได้ผลสำหรับฉันกับ SDK 2.0.0+ อย่างไรก็ตาม Manuel Alves ตอบ (System.Net.WebUility) ทำ
matt.chatterley

81

พร้อมใช้งานในเวอร์ชัน 2.0.0 ของ. Net Core SDKในSystem.Net.WebUtility.UrlEncode( ดูเอกสารประกอบ )


2
ควรทำเครื่องหมายว่าเป็นคำตอบที่ถูกต้อง ขอบคุณ.
Tod Birdsall

11
สำหรับ Net Core 2+ เมื่อฉันใช้System.Net.WebUtility.UrlEncode: ช่องว่างถูกเข้ารหัสด้วยไฟล์+. ฉันเคยUri.EscapeDataStringเข้ารหัสด้วย%20.
ttugates

43

สำหรับ ASP.Net Core 2.0+ และหากคุณต้องการช่องว่างเพื่อเข้ารหัสเป็น %20

ตรงข้ามกับ+;

ใช้:

 Uri.EscapeDataString(someString);

2

อย่าเสียเวลาฉันมีประสบการณ์มากมายกับสิ่งเหล่านี้ที่เรียกว่าตัวเข้ารหัส URL ทั้งหมดนี้ไม่มีประโยชน์และมีนิสัยใจคอที่แตกต่างกัน เช่น WebUtility.UrlEncode ไม่ดูแลเครื่องหมาย "+"

หากคุณต้องการเข้ารหัสพารามิเตอร์ URL ให้ใช้การเข้ารหัส BASE58 ใช้เฉพาะตัวอักษร + ตัวเลขดังนั้นคุณไม่จำเป็นต้องเข้ารหัส URL


คุณช่วยอธิบายนิสัยใจคอทั้งหมดนี้ได้ไหมฉันคุ้นเคยกับ + ที่ QueryHelpers.AddQueryString หรือ Uri.EscapeDataString ไม่ทำ
Michael

ฉันเพิ่งลองใช้WebUtility.UrlEncodeและมันแปลงเครื่องหมายบวก ("+") เป็น "% 2B" ได้อย่างยอดเยี่ยม ฉันใช้. NET Core 3.1
เดยัน

0

ฉันใช้การเปลี่ยนเส้นทางและ UrlEncode ใช้ไม่ได้สำหรับฉันเพราะมันเข้ารหัส URL ทั้งหมด ฉันแก้ไขสิ่งนี้โดยใช้ UriHelper.Encode แทนที่แสดงด้านล่าง

UriHelper เข้ารหัส

// generate url string...
return Redirect(Microsoft.AspNetCore.Http.Extensions.UriHelper.Encode(new System.Uri(url)));
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.