Приветствую.
Если сервис
[HttpGet("GetNextObjectsForSyncronize")]
public IEnumerable<Obj> GetNextObjectsForSyncronize(string objDataUpdated, string objIdUpdated)
вызывать вот так
var url = Constants.WebApiUrl + "Synchronize/GetNextObjectsForSyncronize?objDataUpdated=" + HttpUtility.UrlEncode(objDataUpdated) +
"&objIdUpdated=" + HttpUtility.UrlEncode(objIdUpdated);
var responseMessage = client.GetAsync(url).Result;
то всё работает.
А если изменить на
[HttpGet("GetNextObjectsForSyncronize/{objDataUpdated}/{objIdUpdated}")]
public IEnumerable<Obj> GetNextObjectsForSyncronize(string objDataUpdated, string objIdUpdated)
(параметрам можно [FromQuery] добавить — это ничего не меняет)
и вызывать вот так
var url = Constants.WebApiUrl + "Synchronize/GetNextObjectsForSyncronize/" + HttpUtility.UrlEncode(objDataUpdated) + "/" + HttpUtility.UrlEncode(objIdUpdated);
var responseMessage = client.GetAsync(url).Result;
то сервис "не найден".
Причём если вызывать сервис из браузера
http://localhost/WebApi/Synchronize/GetNextObjectsForSyncronize/1/1
то он вызывается.
Что я не знаю?
Здравствуйте, Real 3L0, Вы писали:
R3>Что я не знаю?
Такое поведение возникает когда в ваших переменных кодирование добавляет символы +, % и т.д.
Если посмотреть контент возвращаемой страницы 404, то там будет написано:
HTTP Error 404.11 — Not Found
Модуль фильтрации запросов настроен для блокировки запросов, содержащих последовательности двойного преобразования символов.
Наиболее вероятные причины:
Этот запрос содержал последовательность двойного преобразования символов, тогда как средства фильтрации запросов настроены на веб-сервере для блокировки таких последовательностей.
Что можно предпринять:
Проверьте настройку configuration/system.webServer/security/requestFiltering@allowDoubleEscaping в файлах applicationhost.config или web.config
More Information:
Это средство безопасности. Изменять его параметры можно лишь в том случае, если вы до конца понимаете последствия своих действий. Перед тем как изменить это значение, вам следует провести трассировку в сети, дабы удостовериться в том, что данный запрос не является злонамеренным. Если сервер допускает последовательности двойного преобразования символов, измените настройку configuration/system.webServer/security/requestFiltering@allowDoubleEscaping. Причиной этого может быть неверный URL-адрес, направленный на сервер злонамеренным пользователем.
Это реакция IIS, до ASP.NET запрос просто не доходит. Он блочит такие запросы по умолчанию, наверно, есть какие-то атаки по этому принципу.
Вы можете отключить это установкой флага
allowDoubleEscaping, как показано, например, здесь:
https://stackoverflow.com/questions/49664759/asp-net-mvc-core-enabling-double-escape