GET/HEAD请求
2023年4月7日大约 1 分钟
GET/HEAD请求
Get请求简单例子
public interface IMyWebApi : IHttpApi
{
// GET <http://www.mywebapi.com/webapi/user?account=laojiu>
[HttpGet("http://www.mywebapi.com/webapi/user")]
ITask<HttpResponseMessage> GetUserByAccountAsync(string account);
}
var api = HttpApi.Create<IMyWebApi>();
var response = await api.GetUserByAccountAsync("laojiu");
使用[HttpHost]
特性
[HttpHost("http://www.mywebapi.com/")]
public interface IMyWebApi : IHttpApi
{
// GET /webapi/user?account=laojiu
[HttpGet("webapi/user")]
ITask<HttpResponseMessage> GetUserByAccountAsync(string account);
}
如果接口IMyWebApi有多个方法且都指向同一服务器,可以将请求的域名抽出来放到HttpHost特性。
响应的json/xml内容转换为强类型模型
隐式转换为强类型模型
[HttpHost("http://www.mywebapi.com/")]
public interface IMyWebApi : IHttpApi
{
// GET /webapi/user?account=laojiu
[HttpGet("webapi/user")]
ITask<UserInfo> GetUserByAccountAsync(string account);
}
当方法的返回数据是UserInfo类型的json或xml文本,且响应的Content-Type为application/json或application/xml值时,方法的原有返回类型ITask(Of HttpResponseMessage)就可以声明为ITask(Of UserInfo)。
显式转换为强类型模型
[HttpHost("http://www.mywebapi.com/")]
public interface IMyWebApi : IHttpApi
{
// GET /webapi/user?account=laojiu
[HttpGet("webapi/user")]
[JsonReturn] // 指明使用Json处理返回值为UserInfo类型
ITask<UserInfo> GetUserByAccountAsync(string account);
}
当方法的返回数据是UserInfo类型的json或xml文本,但响应的Content-Type可能不是期望的application/json或application/xml值时,就需要显式声明[JsonReturn]或[XmlReturn]特性。
请求取消令牌参数CancellationToken
[HttpHost("http://www.mywebapi.com/")]
public interface IMyWebApi : IHttpApi
{
// GET /webapi/user?account=laojiu
[HttpGet("webapi/user")]
ITask<UserInfo> GetUserByAccountAsync(string account, CancellationToken token);
}
CancellationToken.None表示永不取消;创建一个CancellationTokenSource,可以提供一个CancellationToken。