日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Dapr 客户端 搭配 WebApiClientCore 玩耍服务调用

發布時間:2023/12/4 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dapr 客户端 搭配 WebApiClientCore 玩耍服务调用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用Dapr 客戶端 處理服務調用,需要遵循的他的模式,通常代碼是這個樣子的:

var client = DaprClient.CreateInvokeHttpClient(appId: "routing"); var response = await client.GetAsJsonAsync($"/accounts/{17}", cancellationToken); var account = await response.Content.ReadFromJsonAsync<Account>(cancellationToken: cancellationToken);我更希望是這樣子調用:

public interface IBank
{
??????????? [HttpGet("/accounts/{accountId}")]
??????????? Task<Account> GetUser(string accountId, CancellationToken cancellationToken = default);

?????????? [HttpPost("/deposit")]
??????????? Task<Account> Deposit([JsonContent] Transaction transaction, CancellationToken cancellationToken = default);

?????????? [HttpPost("/withdraw")]
??????????? [RawReturn(Enable =true, EnsureSuccessStatusCode = false)]
??????????? Task<HttpResponseMessage> Withdraw([JsonContent] Transaction transaction, CancellationToken cancellationToken = default);
}

var account = await bankClient.GetUser("17", cancellationToken);我們可以用 Refit,RestEase 或者是 WebApiClientCore 來達到這樣的效果, 那么在Dapr 里面使用這些庫如何做到呢, 在Dapr的客戶端庫里面有一個Handler 的官方實現:InvocationHandler。搭配這個InvocationHandler 就可以和這幾個庫,在本文中,我們重點介紹Dapr Client 如何搭配 WebApiClientCore。

public interface IBank
{
????????? [HttpGet("/accounts/{accountId}")]
????????? Task<Account> GetUser(string accountId, CancellationToken cancellationToken = default);

????????? [HttpPost("/deposit")]
????????? Task<Account> Deposit([JsonContent] Transaction transaction, CancellationToken cancellationToken = default);

????????? [HttpPost("/withdraw")]
????????? [RawReturn(Enable =true, EnsureSuccessStatusCode = false)]
????????? Task<HttpResponseMessage> Withdraw([JsonContent] Transaction transaction, CancellationToken cancellationToken = default);
}

? public class WebapiClientExample : Example
?? {
?????? public override string DisplayName => "WebapiClient";

????? private IBank bankClient;

????? public WebapiClientExample(IBank bank)
?????? {
?????????? bankClient = bank;
?????? }

????? public override async Task RunAsync(CancellationToken cancellationToken)
?????? {
?????????? var options = new JsonSerializerOptions(JsonSerializerDefaults.Web);


?????????? // Scenario 1: Check if the account already exists.
?????????? Account? account = null;
?????????? try
?????????? {
?????????????? account = await bankClient.GetUser("17", cancellationToken);
?????????? }
?????????? catch (ApiException ex)
?????????? {
?????????????? // Account does not exist.
?????????? }

????????? Console.WriteLine($"Scenario 1: account '17' {(account is null ? "does not exist" : "already exists")}");

????????? // Scenario 2: Deposit some money
?????????? var transaction = new Transaction()
?????????? {
?????????????? Amount = 100m,
?????????????? Id = "17",
?????????? };

????????? // read updated balance
?????????? account = await bankClient.Deposit(transaction, cancellationToken);
?????????? Console.WriteLine($"Scenario 2: account '17' has '{account?.Balance}' money");

????????? // Scenario 3: Handle a validation error without exceptions
?????????? transaction = new Transaction()
?????????? {
?????????????? Amount = 1_000_000m,
?????????????? Id = "17",
?????????? };
?????????? HttpResponseMessage response = null;

????????? response = await bankClient.Withdraw(transaction, cancellationToken);
?????????? if (response.StatusCode != HttpStatusCode.BadRequest)
?????????? {
?????????????? // We don't actually expect this example to succeed - we expect a 400
?????????????? Console.WriteLine("Something went wrong :(");
?????????????? return;
?????????? }
?????????? var problem = await response.Content.ReadFromJsonAsync<ProblemDetails>(cancellationToken: cancellationToken);
?????????? Console.WriteLine($"Scenario 3: got the following errors:");
?????????? foreach (var kvp in problem!.Errors)
?????????? {
?????????????? Console.WriteLine($"{kvp.Key}: {string.Join(", ", kvp.Value)}");
?????????? }
?????? }
?? }

var services = new ServiceCollection();
???????????? services.AddTransient<Example, WebapiClientExample>();
???????????? services.AddLogging();

??????????? services
???????????????? .AddScoped<InvocationHandler>()
???????????????? .AddHttpApi<WebapiClientExample.IBank>(o => o.HttpHost = new Uri("http://bank"))
?????????????????.AddHttpMessageHandler<InvocationHandler>();
??????????? var serviceprovider = services.BuildServiceProvider();

代碼的核心部分就在于上面紅色的部分,我們把InvocationHandler 加入到AddHttpApi ,就可以和 dapr 一起玩耍了。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Dapr 客户端 搭配 WebApiClientCore 玩耍服务调用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。