EasyHTTP - Get

根据W3,Get方法执行以下操作。

GET方法意味着检索由Request-URI标识的任何信息(以实体的形式)。 如果Request-URI引用数据生成过程,则生成的数据应作为响应中的实体而不是过程的源文本返回,除非该文本恰好是过程的输出。

有几种方法可以使用Easyhttp获取。 在下面的所有示例中,我们假设在另一侧有一个服务,它返回带有Id属性和Genus属性的Tree的对象。

url /trees?Id=1 将为我们提供一个单独的Tree对象,我们可以这样做。

1
2
3
4
5
6
var http = new HttpClient();
http.Request.Accept = HttpContentTypes.ApplicationJson;
var result = http.Get("http://localhost/trees?Id=1");
var tree = result.DynamicBody;
Console.WriteLine(tree.Id);
Console.WriteLine(tree.Genus);

或者我们可以使用这样的匿名对象。

1
2
3
4
5
6
var http = new HttpClient();
http.Request.Accept = HttpContentTypes.ApplicationJson;
var result = http.Get("http://localhost/trees", new {Id = 1} );
var tree = result.DynamicBody;
Console.WriteLine(tree.Id);
Console.WriteLine(tree.Genus);

匿名对象将在向URL添加?Id=1然后执行get时进行转换。

我们也可以选择使用这样的动态ExpandoObject(这将产生与匿名对象相同的结果)

1
2
3
4
5
6
7
8
var http = new HttpClient();
http.Request.Accept = HttpContentTypes.ApplicationJson;
dynamic parameters = new ExpandoObject();
parameters.Id = 1;
var result = http.Get("http://localhost/trees", parameters );
var tree = result.DynamicBody;
Console.WriteLine(tree.Id);
Console.WriteLine(tree.Genus);

我们的服务可能无法解释命名参数url,只能理解像/trees/1这样的段。

然后我们可以指示easyhttp request对象在仍然使用匿名对象的同时使我们的URL成为这样。 像这样。

1
2
3
4
5
6
7
var http = new HttpClient();
http.Request.Accept = HttpContentTypes.ApplicationJson;
http.Request.ParametersAsSegments = true;
var result = http.Get("http://localhost/trees", new {Id = 1});
var tree = result.DynamicBody;
Console.WriteLine(tree.Id);
Console.WriteLine(tree.Genus);

以上内容与此相同

1
2
3
4
5
6
var http = new HttpClient();
http.Request.Accept = HttpContentTypes.ApplicationJson;
var result = http.Get("http://localhost/trees/1");
var tree = result.DynamicBody;
Console.WriteLine(tree.Id);
Console.WriteLine(tree.Genus);

请注意,匿名对象中属性的顺序很重要。

例如

1
http.Get("http://localhost/trees", new {Id = 1, Name = "test"});

将生成此网址
http://localhost/trees/1/test

而以下代码

1
http.Get("http://localhost/trees", new {Name = "test", Id = 1});

会生成

http://localhost/trees/test/1

我们当然也可以使用pocos(也支持ExpandoObjects)作为参数,而不是使用匿名对象。

如果您的服务以对象列表响应,那么您可以像这样读取它们。

1
2
3
4
5
6
7
8
var http = new HttpClient();
http.Request.Accept = HttpContentTypes.ApplicationJson;
var trees = http.Get("http://localhost:55360/trees");
foreach(var t in trees.DynamicBody)
{
Console.WriteLine(t.Id);
Console.WriteLine(t.Genus);
}

你也可以使用 stream the response.

或者 get a file.