Двойной побег и символ + - PullRequest
       9

Двойной побег и символ +

0 голосов
/ 03 октября 2018

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

1 Ответ

0 голосов
/ 03 октября 2018

Если кому-то интересно, я получил ответ на свой вопрос на github: https://github.com/aspnet/Home/issues/3580

Обновление Я решил проблему.Чтобы получить правильное кодирование и декодирование, используйте двойное экранирование с Uri.EscapeDataString(productCode) и Uri.UnescapeDataString(productCode)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...