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

Posted

技术标签:

【中文标题】ASP.NET Core 中的 URL 编码和解码【英文标题】:URL Encode and Decode in ASP.NET Core 【发布时间】:2017-07-05 08:30:12 【问题描述】:
HttpContext.Current.Server.UrlEncode

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

【问题讨论】:

ASP.NET Core 或任何非 Web 项目中没有 HttpContext。通过 Uri 类的方法可以使用相同的方法,例如Uri.EscapeDataString、Uri.EscapeUriString @PanagiotisKanavos 错误 - 没有 HttpContext.CurrentHttpContext 是 .Net Core 的一部分 - Microsoft.AspNetCore.Http.HttpContext。记住这一点 记得阅读整个评论。你提到的HttpContext与之前版本的HttpContextVERY不同。使用 Uri 方法更常见 WebUtility.htmlDecode replacement in .NET Core的可能重复 【参考方案1】:

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

对于以前的版本添加Microsoft.AspNetCore.WebUtilitiesnuget包。

那么WebUtility 课程将为您提供:

public static class WebUtility

    public static string UrlDecode(string encodedValue);
    public static string UrlEncode(string value);

【讨论】:

在 SDK 2.0.0+ 上对我不起作用,但 Manuel Alves 回答 (System.Net.WebUility) 可以。 用法是:var decodedUrl = WebUtility.UrlDecode(encodedUrl);【参考方案2】:

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

【讨论】:

对于 Net Core 2+,当我使用 System.Net.WebUtility.UrlEncode 时:空格用 + 编码。我使用Uri.EscapeDataString%20 进行编码。【参考方案3】:

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

相对于+;

用途:

 Uri.EscapeDataString(someString);

【讨论】:

【参考方案4】:

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

UriHelper.Encode

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

【讨论】:

【参考方案5】:

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

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

【讨论】:

你能解释一下所有这些怪癖吗,我只熟悉 QueryHelpers.AddQueryString 或 Uri.EscapeDataString 不行。 我刚刚试用了WebUtility.UrlEncode,它奇妙地将加号 ("+") 转换为 "%2B"。我正在使用 .NET Core 3.1。 @Michael Uri.EscapeDataString 使用 .NET 6 将“+”转换为 %2B

以上是关于ASP.NET Core 中的 URL 编码和解码的主要内容,如果未能解决你的问题,请参考以下文章

encodeURIcomponent编码和ASP.NET之间编码转换

ASP.NET Web API 与 ASP.NET Core 中的 URL 匹配差异

ASP.NET Core:[FromQuery] 用法和 URL 格式

当 url 的一部分已经是另一个路由时,ASP.NET Core 3.1 中的动态路由

ASP.NET Core Web API - 如何处理 URL 查询字符串中的“null”与“undefined”?

ASP.NET Core - AddJwtBearer - 授权 URL,它是如何工作的?