0%

[DotnetCore]Refit:DotnetCore專案套用

前情提要

筆者在上一篇: [DotnetCore]Refit初體驗 ,簡單介紹Refit的使用方式,因上篇中要簡單的呈現,因而透過Linqpad來完成示範,這篇則建立Dotnet Core完整專案,並將Refit套上使用。

內容

建立WebApi專案

筆者就直接透過dotnet cli完成建立WebApi專案

1
2
3
4
5
6
7
8
9
# 建立方案資料夾
mkdir Refit.Demo
cd Refit.Demo\
# 建立 WebApi專案
dotnet new webapi -o Refit.Demo.Api
# 建立方案檔
dotnet new sln -n Refit.Demo
# 方案中加入上方建立好之WebApi專案
dotnet sln Refit.Demo.sln add Refit.Demo.Api\Refit.Demo.Api.csproj

安裝相關套件

安裝相關套件,相關套件清單如下:

  • Refit
  • Refit.HttpClientFactory(透過DI註冊,需令Refit透過dotnet core內建HttpClientFactory取得HttpClient則需要安裝)
  • Refit.Newtonsoft.Json(需使用Newtonsoft.Json做序列化,反序列化則需要安裝)
  • Refit.Xml(若Request需轉成XML格式則需要安裝)
1
2
dotnet add package Refit
dotnet add package Refit.HttpClientFactory

建立Model及ApiService

筆者在上一篇: [DotnetCore]Refit初體驗 有詳細列出,這邊就不贅述了

建立Controller

建立一般WebApi使用Controller及宣告Action

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[Route("api/opendata")]
[ApiController]
public class OpenDataApiController : ControllerBase
{
private readonly IOpenDataApiService _openDataApiService;

public OpenDataApiController(IOpenDataApiService openDataApiService)
{
_openDataApiService = openDataApiService;
}

/// <summary>
/// 取得地政資料
/// </summary>
/// <param name="parameters"></param>
/// <returns></returns>
[HttpPost("landprice")]
public async Task<IActionResult> GetLandData(LandPriceParameters parameters)
{
return Ok(await _openDataApiService.GetLandPriceAsync(parameters));
}
}

註冊其APIService

要在Controller中使用,需要將IOpenDataApiService需註冊於Startup(Program)

1
2
3
4
5
builder.Services.AddRefitClient<IOpenDataApiService>()
.ConfigureHttpClient(x =>
{
x.BaseAddress = new Uri(builder.Configuration["BaseUrl:OpenData"]);
});

Configuration

上面註冊步驟使用到Configuration,內容如下:

1
2
3
"BaseUrl": {
"OpenData": "https://openapi.land.moi.gov.tw"
}

結果呈現

透過Postman可以測試一下API運作

結論

非常簡單地套用並完成呼叫HttpRequestDotnetCore寫到現在,不透過注入使用還真的有點不習慣,透過Refit.HttpClientFactory套件來完成註冊及注入,非常符合DotnetCore的撰寫風格,下一篇將詳細介紹Refit的各種用法。

參考