[英]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
响应似乎是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.