【问题标题】:How to retrieve response as URL from server to client如何将响应作为 URL 从服务器检索到客户端
【发布时间】:2019-09-05 06:49:12
【问题描述】:

我有 PHP 服务器,我将从客户端发送发送请求,我的请求成功,但我想要来自服务器的响应,它应该是一个 URL,当我试图从服务器检索响应(作为响应的 URL)然后它即将成功,但我的 StringContent 对象出现异常。那是: ==================================================== =============================

 {System.UriFormatException: Invalid URI: The format of the URI could not be determined.
  at System.Uri.CreateThis (System.String uri, System.Boolean dontEscape, System.UriKind uriKind) [0x0007b] in <ca7419b40e504a6dbe088f6fe95d09aa>:0 
  at System.Uri..ctor (System.String uriString, System.UriKind uriKind) [0x00014] in <ca7419b40e504a6dbe088f6fe95d09aa>:0 
  at MPTrain.view.ProductList.SendRequest () [0x001aa] in C:\nginx\www\repos\xformsexperimental\MPTrain\MPTrain\MPTrain\view\ProductList.xaml.cs:111 }

================================================ ===============================

我已经在我的服务器代码中尝试过:

   $sql =  "CALL FetchImage()";

    $res = mysqli_query($conn,$sql); 
    if($res == TRUE)
    {
        if (mysqli_num_rows($res) > 0) 
        {
            // output data of each row
            while($row = mysqli_fetch_assoc($res)) {
                echo json_encode($row);
            }
        }
    }

这是我的客户端代码:

HttpClient client = new HttpClient();

client.BaseAddress = new Uri("http://192.168.1.011/repos/xformsexperimental/RestApiTrain/index.php");

Dictionary<object, object> keyValuePairs = new Dictionary<object, object>();
keyValuePairs.Add("eml", "Manisha");

var jsonData = JsonConvert.SerializeObject(keyValuePairs);
var content = new StringContent(jsonData, UnicodeEncoding.UTF8, "application/json");

var posttask = await client.PostAsync(client.BaseAddress.ToString(), content); //accessing response

var stringContent = await posttask.Content.ReadAsStringAsync();

// ResponseImage responseImage = JsonConvert.DeserializeObject<ResponseImage>(stringContent);

Uri uri = new Uri(stringContent,UriKind.Absolute);

我从服务器得到的响应是:

================================================ ===============================

{\"image\":\"http:\\/\\/localhost\\/example\\/images\\/pic1.png\"}

================================================ ===============================

我想要来自服务器的准确或绝对 URL。 我怎么能得到它请帮助...

我试过这个:

ResponseImage responseImage = JsonConvert.DeserializeObject<ResponseImage>(stringContent);

但我在 stringContent 上得到了这个异常

================================================ ================================== {Newtonsoft.Json.JsonReaderException:完成读取 JSON 内容后遇到的附加文本:{。路径 '',第 3 行,位置 0。 在 Newtonsoft.Json.JsonTextReader.Read () [0x000c7] 在 :0 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType, System.Boolean checkAdditionalContent) [0x000db] in :0 在 Newtonsoft.Json.JsonSerializer.DeserializeInternal (Newtonsoft.Json.JsonReader 阅读器,System.Type objectType) [0x00054] 在 :0 在 Newtonsoft.Json.JsonSerializer.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType) [0x00000] in :0 在 Newtonsoft.Json.JsonConvert.DeserializeObject(System.String 值,System.Type 类型,Newtonsoft.Json.JsonSerializerSettings 设置)[0x0002d] in :0 在 Newtonsoft.Json.JsonConvert.DeserializeObject[T](System.String 值,Newtonsoft.Json.JsonSerializerSettings 设置)[0x00000] in :0 在 Newtonsoft.Json.JsonConvert.DeserializeObject[T] (System.String 值) [0x00000] in :0

在 C:\nginx\www\repos\xformsexperimental\MPTrain\MPTrain\MPTrain\view\ProductList.xaml.cs:112 中的 MPTrain.view.ProductList.SendRequest () [0x001aa] }

【问题讨论】:

    标签: c# xamarin.forms


    【解决方案1】:

    响应似乎是 JSON。

    您似乎尝试了一个强类型模型,因此基于显示的 JSON,模型应该如下所示

    public class ResponseImage {
        public string image { get; set; }
    }
    

    为了匹配预期的数据

    解析响应并提取所需信息。

    //...
    
    ResponseImage responseImage = JsonConvert.DeserializeObject<ResponseImage>(stringContent);
    
    Uri uri = new Uri(responseImage.image, UriKind.Absolute);
    

    现在基于服务器代码

    // output data of each row
    while($row = mysqli_fetch_assoc($res)) {
        echo json_encode($row);
    }
    

    如果集合中有不止一行,这可能会返回格式错误的 JSON。

    我建议您填充适当的集合,然后将其作为 JSON 数组返回。

    //...
    
    if (mysqli_num_rows($res) > 0)  {
        $result = array();
        // collect data of each row
        while($row = mysqli_fetch_assoc($res)) {
            $result[] = $row; //push data into array
        }
        echo json_encode($result);
    }
    
    //...
    

    然后需要更新客户端代码以期望一个集合而不是单个对象。

    ResponseImage[] responseImages = JsonConvert.DeserializeObject<ResponseImage[]>(stringContent);
    
    Uri[] uris = responseImages.Select(x => new Uri(x.image, UriKind.Absolute)).ToArray();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-09
      相关资源
      最近更新 更多