Flurl.Http PostMultipartAsync вызвал некоторые ошибки - PullRequest
0 голосов
/ 25 марта 2019

Я отправляю некоторые данные на сервер.Этот кусок кода отлично работает несколько месяцев назад.Но теперь он выбросил «Flurl.Http.FlurlHttpException».

Flurl.Http 2.3.2

string res = "";
try
{
   var obj = new { api_key = "key", api_secret = "secret", start = 1 };
   res = await "https://api-cn.faceplusplus.com/facepp/v3/faceset/getfacesets"
         .PostMultipartAsync(mp => mp
         .AddStringParts(obj)
         ).ReceiveString();

}
catch (FlurlHttpException ex)
{
    Debug.WriteLine(ex.Message);
}

Единственное отличие - версия Win10, с 1803 до 1809. Я перешел на использование "PostUrlEncodedAsync ", сервер возвращает успех.Но этот метод не может добавить файл.

res = await apiUrl
    .PostUrlEncodedAsync(obj)
    .ReceiveString();

Вот FlurlHttpException:

enter image description here

{Flurl.Http.FlurlHttpException: Call failed with status code 400 (): POST https://api-cn.faceplusplus.com/facepp/v3/faceset/getfacesets
   at Flurl.Http.FlurlRequest.<HandleExceptionAsync>d__23.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at Flurl.Http.FlurlRequest.<SendAsync>d__19.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Flurl.Http.FlurlRequest.<SendAsync>d__19.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Flurl.Http.HttpResponseMessageExtensions.<ReceiveString>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at FacePlusPlusUWP.FaceServiceClient.<SendRequestAsync>d__26.MoveNext()}

1 Ответ

0 голосов
/ 26 марта 2019

Как указано FlurlHttpException.Message, вы получаете ответ 400 (неверный запрос) от сервера. Я не знаком с используемым вами API, но первое, что я хотел бы проверить, - отправил ли вам сервер полезное тело ответа. Вы можете сделать это в вашем catch блоке так:

catch (FlurlHttpException ex)
{
    var resp = await ex.GetResponseStringAsync();
    Debug.WriteLine(resp);
}
...