WebApi Передача параметров без объявления
От: Real 3L0 Россия http://prikhodko.blogspot.com
Дата: 19.05.20 22:50
Оценка:
Приветствую.
Если сервис
[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
то он вызывается.

Что я не знаю?
Вселенная бесконечна как вширь, так и вглубь.
Re: WebApi Передача параметров без объявления
От: dmitry_npi Россия  
Дата: 24.05.20 13:40
Оценка: 2 (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
Атмосферная музыка — www.aventuel.net
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.