c# - 双重转义和 + 符号
问题描述
使用 .NET Core 2.1 和双重转义,只有“+”号从框架中转义两次,而不是一次。我的代码如下:
[HttpGet("article/{productCode}/movements/{movementId:int}")]
public async Task<IActionResult> MovementGet(string productCode, int movementId)
{
productCode = WebUtility.UrlDecode(productCode);
//... rest of the code ...
}
我在项目文件夹中创建了一个 web.config 以启用 IIS/IISExpress 的双重转义
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true"/>
</security>
</system.webServer>
</configuration>
使用双重转义的产品代码调用FMB+FTR97/MB06
将是
http://localhost:4198/api/v1/warehouse/article/FMB%252BFTR97%252FMB06/movements/1946127
异常(至少对我而言)是 fw 解决的产品代码,因为我收到:FMB+FTR97%2FMB06
而不是FMB%2BFTR97%2FMB06
当我调用 WebUtility.UrlDecode(productCode) 时,我得到FMB FTR97/MB06
的不是错误的。
起初我虽然是一个 IIS 问题,但我尝试了使用 ASP.NET 4.6(使用 HttpUtilities.UrlDecode)的相同代码,它按预期工作,我得到了 FMB%2BFTR97%2FMB06
我是否以错误的方式使用 web.config?
解决方案
如果有人感兴趣,我在 github 上的问题得到了答复: https ://github.com/aspnet/Home/issues/3580
更新
我解决了这个问题。要获得正确的编码和解码,请使用Uri.EscapeDataString(productCode)
and进行双重转义Uri.UnescapeDataString(productCode)
推荐阅读
- node.js - 我无法使用 plesk 启动我的 NextJS js 应用程序
- python - While循环和条件
- javascript - 使用 Simplebar 自定义 Select2 下拉菜单的滚动条?
- javascript - 在 React Hooks 中,当 render 时直接调用 setState 时,是否保证 re-render 运行在 children 的 render 之前?
- user-interface - R Shiny-如何应用用户插入的文本来运行函数(R 代码)并产生最终的 ggplot 输出
- javascript - 尝试在 Javascript 中的表行的 2 个值之间创建随机数
- html - Boostrap 表无响应
- c++ - 仅当函数支持传递的合适的可变参数时才编译
- ios - 将点击手势添加到嵌套的堆栈视图
- google-apps-script - 通过从另一个 Google 云端硬盘复制的应用程序脚本制作电子表格的副本