Skip to content

WebApiClient QA

老九 edited this page May 16, 2018 · 12 revisions

1 需要使用using (HttpApiClient.Create<T>())吗?

一般情况下,应该使用单例模式来创建HttpApiClient,也就是说HttpApiClient的实例需要保存起来,直到不再利用(比如程序退出了),因为HttpApiClient支持并发,有些接口是有cookie衔接的,再说了创建HttpApiClient是有一点点性能损耗的。

2 HttpApiClient.Create<T>的T接口为什么要继承IHttpApi接口?

一是为了方便WebApiClient库自动生成接口的代理类;二是Create方法在缺省HttpApiConfig参数的情况下,T类型接口继承了IHttpApi,开发者才可以自主控制T接口实例的生命周期,其实接口还可以继承IHttpApiClient,因为接口的HttpApiClient代理类本身就实现了IHttpApiClient接口。

3 HttpApiClient.Create<T>的T类型可以继承其它T1、T2等接口吗?

可以,只有IHttpApiClient、IHttpApi、IDisposable是特殊接口,继承的其它接口都当作Api接口,需要注意的,对应方法的接口级特性,还是从定义方法的接口继承而来。

4 使用[ProxyAttribute(host,port)]代理特性前,怎么验证代理的有效性?

可以使用ProxyValidator对象的Validate方法来验证代理的有效性。

5 为什么不支持将接口的返回类型声明为Task对象而必须为Task<>ITask<>

这个是设计的原因,不是技术原因,不管开发者关不关注返回值,Http在正常情况下必然有响应,如果你不关注结果的解析,应该声明为Task<HttpResponseMessage>,不去解析HttpResponseMessage就行。

6 使用WebApiClient了,怎么下载文件?

你应该将接口返回类型声明为ITask<HttpResponseMessage>,然后自己保存里面的流;或者使用ITask<HttpResponseMessage>的SaveAs()扩展方法保存为文件。

7 接口返回类型除了声明为ITask<HttpResponseMessage>,还可以声明哪些抽象的返回类型?

还可以声明为ITask<string>ITask<Stream>ITask<Byte[]>,这些都是抽象的返回类型。

8 接口声明的参数可以为Object或某些类型的基类吗?

可以这样声明,数据还是子类的,但xml序列化会有问题,一般情况下,建议严格按照服务器的具体类型来声明参数。

9 WebApiClient怎么使用同步请求

WebApiClient是对HttpClient的封包,HttpClient没有提供相关的同步请求方法,所以WebApiClient也没有同步请求。

Clone this wiki locally