Коллеги всем доброго времени суток!
Столкнулся со следующей проблемой, обработки исключений возвращаемых при запросе к внешнему API.
Делаю запрос через WebClient
public void Patch(string method, Dictionary<string, string> parameters) { try { NameValueCollection parametersValues = new NameValueCollection(); foreach (var parameter in parameters) { if (String.IsNullOrEmpty(parameter.Value)) { parametersValues.Add(parameter.Key, null); continue; } parametersValues.Add(parameter.Key, parameter.Value); } string uri = $"{abUrl}{method}"; using (WebClient webClient = new WebClient()) { string credentials = Convert.ToBase64String( Encoding.ASCII.GetBytes(LoginDev + ":" + PassDev)); webClient.Headers[HttpRequestHeader.Authorization] = $"Basic {credentials}"; webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); byte[] result = webClient.UploadValues(uri, "PATCH", parametersValues); var response = Encoding.UTF8.GetString(result); } } catch (WebException e) { var exceptionMessage = e.Message; if (e.Status.Equals(WebExceptionStatus.ProtocolError)) { if (e.Response is HttpWebResponse) { var sr = new StreamReader(e.Response.GetResponseStream()); var response = sr.ReadToEnd(); sr.Close(); sr.Dispose(); } } } }
Когда пытаюсь обработать WebException в Bpm то мне записывает в логи - http://prntscr.com/kr7aja
При выполнении данного кода через консольное приложение обработка срабатывает корректно - http://prntscr.com/kr7baj
Подскажите в чем может быть проблема, как бороться?
Заранее благодарен.
Нравится
Попробуйте, вместо public void Patch сделать public string Patch, объявите переменную, например result и в catch, сделайте result += e.Message, ну и по итогу соответственно return result
Литвинко Павел,
я в самом методе Patch в блоке catch логирую
e.Message - http://prntscr.com/kr838h
в Bpm у меня метод Patch возвращает string. Суть в другом почему в catch обрабатывается Too many redirects, а при выполнении данного метода из консольного приложения обрабатывается корректно, то что возвращает сервер к которому запрос был.
Нигрескул Алексей,
А в консоли, на этом прерывается выполнение? Повторно не вызывается? Возможно он просто неоднократно вызывается и по итогу в лог попадает конечная ошибка
Литвинко Павел,
В консоли - при выполнении кода вылетает в catch и потом на выход метода
При выполнении метода из консоли запустил fiddler запрос ушел один раз - http://prntscr.com/kr8oum
Попробуйте в Fiddler сравнить запросы, уходящие на сервер при работе как из сайта, так и отдельной программы. Видимо, там будет отличие если не в тексте, то заголовках запроса, приводящее к бесконечным редиректам.