首页 > 解决方案 > 双重转义和 + 符号

问题描述

使用 .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?

标签: c#asp.net-coreescaping

解决方案


如果有人感兴趣,我在 github 上的问题得到了答复: https ://github.com/aspnet/Home/issues/3580

更新 我解决了这个问题。要获得正确的编码和解码,请使用Uri.EscapeDataString(productCode)and进行双重转义Uri.UnescapeDataString(productCode)


推荐阅读