Больше не может получить ответ от веб-запроса, когда вернулось 400 - PullRequest
0 голосов
/ 01 апреля 2019

У меня проблемы с выполнением вызовов веб-службы в приложении для iOS, созданном с помощью Xamarin.Этот EXACT тот же код, который создает запрос и использует HTTPWebRequest GetResponse () для получения ответа, раньше работал, но теперь происходит сбой при попытке получить ответ.Он падает на ReadToEnd, говоря, что аргумент не может быть нулевым.Этот код остался неизменным, так как он работал.Я знаю, что есть ответ 400 с 400, потому что PostMan работает, и я также вижу журнал из бэкэнда, когда я звоню из моего приложения Xamarin.Поиск в стеке показывает, что некоторые люди решили эту проблему путем обновления Xamarin и что он имеет какое-то отношение к моно-среде выполнения, которую он использует.Но последняя версия Xamarin делает для меня то же самое.

...
            } catch(WebException ex) {
                try {
                  if(ex.Response == null || ex.Status != WebExceptionStatus.ProtocolError) throw;
...
                    Stream data = ex.Response.GetResponseStream(); if(data==null) return "ERR";
                    StreamReader reader = new StreamReader(data); if(reader==null) return "ERR";
                    string responseFromServer = reader.ReadToEnd();

Ожидаемые результаты должны заключаться в том, что мой GetResponse генерирует исключение WebException в случае HTTP 400, однако тело ответа все равно должно бытьчитать.

Вот трассировка стека исключения:

    2019-04-02 09:15:17.367099-0400 ******.iOS[41201:4512789] *****> System.Net.WebException: Value cannot be null.
    Parameter name: src ---> System.ArgumentNullException: Value cannot be null.
    Parameter name: src
      at System.Buffer.BlockCopy (System.Array src, System.Int32 srcOffset, System.Array dst, System.Int32 dstOffset, System.Int32 count) [0x00003] in /Library/Frameworks/Xamarin.iOS.framework/Versions/12.2.1.16/src/Xamarin.iOS/mcs/class/corlib/ReferenceSources/Buffer.cs:39 
      at System.Net.WebResponseStream+<ProcessRead>d__49.MoveNext () [0x00082] in /Library/Frameworks/Xamarin.iOS.framework/Versions/12.2.1.16/src/Xamarin.iOS/mcs/class/System/System.Net/WebResponseStream.cs:203 
       --- End of inner exception stack trace ---
      at System.Net.HttpWebRequest+<RunWithTimeoutWorker>d__241`1[T].MoveNext () [0x000e8] in /Library/Frameworks/Xamarin.iOS.framework/Versions/12.2.1.16/src/Xamarin.iOS/mcs/class/System/System.Net/HttpWebRequest.cs:956 
    --- End of stack trace from previous location where exception was thrown ---
      at System.Net.WebConnectionStream.Read (System.Byte[] buffer, System.Int32 offset, System.Int32 count) [0x00070] in /Library/Frameworks/Xamarin.iOS.framework/Versions/12.2.1.16/src/Xamarin.iOS/mcs/class/System/System.Net/WebConnectionStream.cs:136 
      at System.IO.Stream.ReadByte () [0x00007] in /Library/Frameworks/Xamarin.iOS.framework/Versions/12.2.1.16/src/Xamarin.iOS/mcs/class/referencesource/mscorlib/system/io/stream.cs:758 
      at *****.API.callService (System.String endpt, System.String parm, System.Boolean isGet) [0x003e9] in /Users/****/Projects/*****/*****/API.cs:80
...