Коллеги всем доброго времени суток!
Столкнулся со следующей проблемой, обработки исключений возвращаемых при запросе к внешнему API.
Делаю запрос через WebClient
public void Patch(string method, Dictionary 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 сравнить запросы, уходящие на сервер при работе как из сайта, так и отдельной программы. Видимо, там будет отличие если не в тексте, то заголовках запроса, приводящее к бесконечным редиректам.