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.Current
但 HttpContext
是 .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.WebUtilities
nuget包。
那么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 中的动态路由