双重转义和+符号

时间:2018-10-03 15:32:09

标签: c# asp.net-core escaping

在.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/MB06http://localhost:4198/api/v1/warehouse/article/FMB%252BFTR97%252FMB06/movements/1946127

异常(至少对我而言)是fw解析的产品代码,因为我收到了:FMB+FTR97%2FMB06而不是FMB%2BFTR97%2FMB06,当我调用WebUtility.UrlDecode(productCode)时,我得到了{{ 1}}是错误的。

起初我虽然是一个IIS问题,但是我使用ASP.NET 4.6(使用HttpUtilities.UrlDecode)尝试了相同的代码,并且按预期工作,我得到了FMB%2BFTR97%2FMB06

我是否以错误的方式使用了web.config?

1 个答案:

答案 0 :(得分:0)

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

更新 我解决了问题。要获得正确的编码和解码,请使用Uri.EscapeDataString(productCode)Uri.UnescapeDataString(productCode)

双重转义