如果只用Flurl进行URL构造,那么只安装Flurl就可以了,如果需要Flurl的全部功能,那么在NuGet上引入Flurl.Http就可以了,因为Flurl.Http已经引入了Flurl了。
Flurl的Post用法,Post有以下4种用法:
url.PostAsync()
url.PostJsonAsync()
url.PostStringAsync()
url.PostUrlEncodedAsync()
PostJsonAsync 接受一个Json格式的T类型。如果API端接受的参数形式为application/json,那么使用PostJsonAsync最合适不过了。下面看一个具体例子。
InvoiceInfo.cs:
namespace CheckInvoice
{
public class InvoiceInfo
{
/// <summary>
/// 发票代码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 发票号码
/// </summary>
public string No { get; set; }
/// <summary>
/// 效验码,后6位
/// </summary>
public string VCode { get; set; }
/// <summary>
/// 金额
/// </summary>
public decimal Amount { get; set; }
/// <summary>
/// 日期 yyyyMMdd格式
/// </summary>
public string Date { get; set; }
/// <summary>
/// 授权码
/// </summary>
public string PermitCode { get; set; }
}
}
新建CheckInvoice方法
public async Task<AjaxResult> CheckInvoice(InvoiceInfo invoiceInfo)
{
try
{
invoiceInfo.PermitCode = "授权码";
var service_url = "http://xxxx.com";
var result = await service_url.PostJsonAsync(invoiceInfo).ReceiveJson<InvoiceResult>();
if (result.Success)
{
return Success(result.Data, "查询成功");
}
return Error(result.Message);
}
catch(Exception ex)
{
return Error(ex.ToString());
}
AjaxResult.cs:
public class AjaxResult
{
/// <summary>
/// 是否成功
/// </summary>
public bool success { get; set; } = true;
/// <summary>
/// 错误代码
/// </summary>
public int code { get; set; } = 0;
/// <summary>
/// 返回消息
/// </summary>
public string message { get; set; }
}
AjaxResult.T.cs
public class AjaxResult<T> : AjaxResult
{
/// <summary>
/// 返回数据
/// </summary>
public T data { get; set; }
}
Error与Success方法为基类提供的,自己构造一下就可以了。这里就不写了。
代码中,CheckInvoice 方法使用了PostJsonAsync,比较简单。
其实,在一般的使用过程中,我们只需要注意一下
url.PostStringAsync()与url.PostUrlEncodedAsync()这两个的区别,
开始比较笨,以为通过url拼接的是使用PostStringAsync,其实不然,url拼接是需要使用PostUrlEncodedAsync这个方法的,例如:
var query = "token=xxxxx&id=123$time=20220101";
var post_url = "http://xxxxx.com";
var result = await post_url.PostUrlEncodedAsync(query).ReceiveString();
result是返回的字符串,然后根据实际情况处理就可以了,在实践过程中PostStringAsync()与PostAsync()还没实际用到。后续在进行记录吧。