繁体   English   中英

如何从服务器到客户端检索响应作为URL

[英]How to retrieve response as URL from server to client

我有PHP Server,我将在其中发送来自客户端的发送请求,并且我的请求成功进行,但是我希望来自服务器的响应应该是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行,位置在Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(Newtonsoft.Json.Json.JType.Reader System(Newtonsoft.Json.Json.JType.Reader,在Newtonsoft.Json.JsonSerializer.DeserializeInternal(Newtonsoft.Json.Json.JsonReader reader,System.Type objectType)中的<12891e825fce44a581e5bbbb579c1d49>:0中的objectType,System.Boolean checkAdditionalContent [0x000db] [0x00054]在<12891e5dbb49>中的New0:0c00tontonJJ:0c .JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader reader,System.Type objectType)[0x00000]在Newtonsoft.Json.Json.Convert.DeserializeObject(System.String值,System.Type类型,NewtonSonic.Jizer。设置)<12891e825fce44a581e5bbbb579c1d49>:0中的[0x0002d]在Newtonsoft.Json.JsonConvert.DeserializeObject [T](System.String值,Newtonsoft.Json.JsonSerializerSettings设置)在[12891e825fc中[0x00000] <12891e825fce44a581e5bbbb579c1d49>:0中的Newtonsoft.Json.JsonConvert.DeserializeObject [T](System.String value)[0x00000]中的e44a581e5bbbb579c1d49>:0

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

响应似乎是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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM