ASP.NET Core中的URL编码和解码


113
HttpContext.Current.Server.UrlEncode

仅在.NET Framework中有效。如何在ASP.NET Core项目中编码或解码uri参数?


2
ASP.NET Core-或任何非Web项目中没有HttpContext。通过Uri类的方法可以使用相同的方法,例如Uri.EscapeDataStringUri.EscapeUriString
Panagiotis Kanavos

1
@PanagiotisKanavos错误-没有,HttpContext.Current但是HttpContext.Net Core-的一部分Microsoft.AspNetCore.Http.HttpContext。记住这一点
J. Doe

请记住阅读全文。您提到的HttpContext与先前版本的HttpContext 非常不同。这是更为常见的使用方法乌里
帕纳约蒂斯Kanavos

Answers:


186
  • 对于ASP.NET Core 2.0+,只需添加System.Net名称空间- WebUtility类作为System.Runtime.Extensionsnuget包的一部分提供,在ASP.NET Core项目中默认引用。

  • 对于以前的版本,请添加Microsoft.AspNetCore.WebUtilitiesnuget软件包。

然后该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


43

对于ASP.Net Core 2.0+,如果需要将空格编码为 %20

相对于+;

用:

 Uri.EscapeDataString(someString);

2

不要浪费您的时间,我对这些所谓的url编码器有丰富的经验,它们都是无用的,并且有不同的怪癖。例如,WebUtility.UrlEncode不处理“ +”号。

如果要编码URL参数,请使用BASE58编码。它仅使用字母+数字,因此您不需要url编码。


您能解释所有这些怪癖吗,我只熟悉QueryHelpers.AddQueryString或Uri.EscapeDataString不会做的+。
迈克尔

我刚刚尝试过WebUtility.UrlEncode,它将奇妙的加号(“ +”)转换为“%2B”。我正在使用.NET Core 3.1。
Dejan

0

我正在使用redirect,而UrlEncode对我不起作用,因为它对整个URL进行了编码。我通过使用UriHelper.Encode解决了这一问题,如下所示。

UriHelper.Encode

// generate url string...
return Redirect(Microsoft.AspNetCore.Http.Extensions.UriHelper.Encode(new System.Uri(url)));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.