在.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)时,我得到了{{ 1}}是错误的。
起初我虽然是一个IIS问题,但是我使用ASP.NET 4.6(使用HttpUtilities.UrlDecode)尝试了相同的代码,并且按预期工作,我得到了FMB%2BFTR97%2FMB06
我是否以错误的方式使用了web.config?
答案 0 :(得分:0)
如果有人感兴趣,我会在github上收到我的问题的答复: https://github.com/aspnet/Home/issues/3580
更新
我解决了问题。要获得正确的编码和解码,请使用Uri.EscapeDataString(productCode)
和Uri.UnescapeDataString(productCode)