【发布时间】:2014-12-19 15:29:36
【问题描述】:
我有一个休息服务 (POST),它接受 Json 对象作为输入(Fiddler 中的请求正文)。现在我想使用带有动态值(从文本文件或硬编码值读取)的控制台应用程序中的服务。我将记录这些操作,例如,对于这个测试数据 XXXXX,服务会返回值。
谁能帮助我如何自动化这个过程。我想从控制台应用程序中使用这项服务。
请注意输出 JSON 字符串。
任何建议都会对我很有帮助。
【问题讨论】:
我有一个休息服务 (POST),它接受 Json 对象作为输入(Fiddler 中的请求正文)。现在我想使用带有动态值(从文本文件或硬编码值读取)的控制台应用程序中的服务。我将记录这些操作,例如,对于这个测试数据 XXXXX,服务会返回值。
谁能帮助我如何自动化这个过程。我想从控制台应用程序中使用这项服务。
请注意输出 JSON 字符串。
任何建议都会对我很有帮助。
【问题讨论】:
要发出 POST 请求,例如:
var req = WebRequest.Create(url);
var enc = new UTF8Encoding(false);
var data = enc.GetBytes(serializedJson);
req.Method = "POST";
req.ContentType = "application/json";
req.ContentLength = data.Length;
using (var sr = req.GetRequestStream())
{
sr.Write(data, 0, data.Length);
}
var res = req.GetResponse();
var res= new StreamReader(res.GetResponseStream()).ReadToEnd();
您可以从以下对象轻松创建serializedJson:
var serializedJson = Newtonsoft.Json.JsonConvert.SerializeObject(myDataObject);
【讨论】:
在您的控制台项目中从nuget 安装以下 web api 包
添加对 System.Net.Http 和 System.Runtime.Serialization 的引用
为您要发送和接收的数据创建一个合同类(与您的网络服务中相同)
[DataContract]
public class YourObject{
[DataMember]
public int Id {get; set;}
}
在您的控制台应用程序中像这样调用网络服务:
var client = new HttpClient();
var response = client.PostAsJsonAsync<YourObject>("http://yourserviceurl:port/controller", objectToPost).Result;
if(response.IsSuccessStatusCode){
Console.WriteLine(response);
}else{
Console.WriteLine(response.StatusCode);
}
【讨论】: