这两天在做WPF的Demo时,发现我们客户端的Web访问框架(也不是什么框架,就是个HttpHelper罢了),并不是十分好用,不禁让人想起Android的Retrofit框架,所以就重新封装了下我们的框架,已满足基本的需求,后续功能持续增加中,大家有什么想法也可以在下面评论。
- 最基本的使用方式
第一步,创建一个Retrofit对象(一般就创建一个,如果你的客户端访问的服务器是多个的话,那就建多个)
Retrofit retrofit = new Retrofit.Builder()
.setUrl("http://localhost:21021")
.build();
然后,在你的interface中定义你的WebApi接口,Get请求请使用[Get("xx/xx/xx")]特性,Post请求请使用[Post("xx/xx/xx")]特性,特性中的字符串表示的是你的接口的Url
public interface ILoginService
{
[POST("/api/TokenAuth/Login")]
Call Login([Query]string username, [Query] string password);
}
接下来,通过 第一步创建的Retrofit对象,创建你的接口Service
ILoginService service = retrofit.create<ILoginService>();
定义你的返回结果,根据你服务器的返回结果来定义,这里我是直接copy的服务器Controller中的返回结果,你可以在WebApi Test方式下,得到返回的json字符串,然后生成返回实体。
public class UserLoginResponseEnt
{
/// <summary>
///
/// </summary>
public string accessToken { get; set; }
/// <summary>
///
/// </summary>
public string encryptedAccessToken { get; set; }
/// <summary>
///
/// </summary>
public int expireInSeconds { get; set; }
/// <summary>
///
/// </summary>
public int userId { get; set; }
}
接下来,直接使用service对象,调用WebApi,返回结果,最基本的使用就完成了。
Call call = service.Login("admin","123456");
Respone<UserLoginResponseEnt> rep = call.Execute<UserLoginResponseEnt>();
//rep.IsSuccess 接口是否调用成功
//rep.Msg 接口返回信息
//rep.Code 状态码
//rep.Data WebApi返回结果
- 为你的请求添加Body
如果接口请求需要传递实体对象,这时候我们的传参要以body方式进行传递,也很简单。第一步,定义实体
/// <summary>
/// 用户登录时的请求实体
/// </summary>
public class UserLoginRequestEnt
{
/// <summary>
///
/// </summary>
public string userNameOrEmailAddress { get; set; }
/// <summary>
///
/// </summary>
public string password { get; set; }
/// <summary>
///
/// </summary>
public bool rememberClient { get; set; }
}
第二步,接口定义中,请使用[Body]特性,如下所示,其他流程如上所示
public interface ILoginService
{
[POST("/api/TokenAuth/Login")]
Call Login( [Body]UserLoginRequestEnt ent);
}
- 为你的请求添加Header
添加Header的方式有三种。
第一种,在创建Retrofit对象时,添加Header,这种方式添加的header,在你请求这个服务器的所有接口时,都会带上你定义的header信息。
Retrofit retrofit = new Retrofit.Builder()
.AddHeader("testHeader5:thisIsHeader5")
.setUrl("http://localhost:21021")
.build();
第二种方式,在你接口的方法定义上面,添加Header标签,这种方式添加的header,只会在你请求这个接口的时候,带上你定义的接口信息。
public interface ILoginService{
[Header("testHeader1: application/javascript")]
[POST("/api/TokenAuth/Login")]
Call Login([Query]string username, [Query] string password);
}
第三种,动态的header信息。你可以将你的header定义到接口的参数中,实现动态的header添加,此种方式添加的header,也只会在你请求这个接口的时候,带上你定义的接口信息。
public interface ILoginService{
[POST("/api/TokenAuth/Login")]
Call Login([Query]string username, [Query] string password,[DynamicHeader("testHeader4")]string header3);
}
框架dll下载: https://download.youkuaiyun.com/download/war3ismylove/11317653
框架源码及Demo下载:https://download.youkuaiyun.com/download/war3ismylove/11317623
大家有啥想法可以留言给我哦,我会在后面的版本中进行更新。