最近公司的项目最新版本刚做完,紧接着还是继续进行项目的重构,目的就是为了降低耦合度,项目越来越复杂了,
后期微服务架构也要搞起来。
原始项目,是把第三方API的调用,放在.net standard 的项目中,现在独立为一个api项目,后期直接部署为一个service(微服务),整体的架构更加清晰。
Demo:
[HttpDelete("Bulk")]
public async Task<IActionResult> DeleteCampaignsAsync([FromBody] IEnumerable<long> campaignIds)
{
var result= await CampaignAPI.DeleteCampaignsAsync(campaignIds);
return Ok(result);
}
然后,我在另一个web api项目中, 需要通过HttpClient去请求这个地址.
解决方案:
ApiResponse<List<CampaignResponse>> result = new ApiResponse<List<CampaignResponse>>();
var client = factory.CreateClient();
string requestParams = JsonConvert.SerializeObject(campaignIds);
HttpContent content = new StringContent(requestParams);
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var requstUri = $"{baseAddress}campaign/Bulk";
var responseTask = await client.SendAsync(
new HttpRequestMessage(HttpMethod.Delete, requstUri)
{
Content = content
});
if (responseTask.IsSuccessStatusCode)
{
var resultStr = await responseTask.Content.ReadAsStringAsync();
var campaignResult = JsonConvert.DeserializeObject<CampaignPlacementUpdateViewModel>(resultStr).Data;
result= MapperModel.Mapper<ApiResponse<List<CampaignResponse>>, CampaignPlacementUpdate>(campaignResult);
}
这里的Client是在asp.net core中的使用方式,自行研究,这里不做讲述了。
HttpClient提供了下面的用于发送delete请求的异步方法,但是没有直接提供类似PostAsync这个重载方法
DeleteAsync,
这里还是要感谢谷歌,英文检索效率不要太高。
HttpClient提供还提供了一些SendAsync
的重载方法。
我们这里使用的是第二个,接收一个HttpRequestMessage的参数,在此参数中,可以设置请求的方法以及传输的数据。
注意:调用和被调用方,数据的结构,以及内部的属性要保持一致
当然,其他的请求方法,如果传输复杂的数据类型,也类似如此。