В .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?