URL 在 ASP.NET 核心中编码和解码

URL Encode and Decode in ASP.NET Core

HttpContext.Current.Server.UrlEncode

这仅适用于 .NET Framework。如何在 ASP.NET Core 中编码或解码 URI 参数?

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

  • 对于之前的版本添加Microsoft.AspNetCore.WebUtilities nuget包。

那么 WebUtility class 将为您提供:

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

可在 version 2.0.0 of the .Net Core SDK, in System.Net.WebUtility.UrlEncode (see documentation)

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

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

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

相对于+

使用:

 Uri.EscapeDataString(someString);

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

UriHelper.Encode

// generate url string...
return Redirect(Microsoft.AspNetCore.Http.Extensions.UriHelper.Encode(new System.Uri(url)));

只需添加另一种方法即可:

UrlEncoder.Default.Encode(url);

https://docs.microsoft.com/en-us/dotnet/api/system.text.encodings.web.urlencoder?view=net-6.0