0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Blazor WebAssemblyでRestSharpを使ってみる(その1)

Last updated at Posted at 2022-09-13

はじめに

  • 「REST API」をC#から操作するためのライブラリです。
  • 「Blazor WebAssembly」では、HttpClient・HttpClientFactoryでそのまま開発もできますけど、今回は、「RestSharp」を使用します。
    • HttpClientFactoryについては、こちらの記事を確認いただけたらと思います。

RestSharp

注意!!
v107以降で記述方法が大分変更となっています。
現在は、V108です。

  • そのため、Postmanで表示されるコードは、使用できません。
    • たぶん、Postmanの変換機能はしばらく対応されないかなぁと?
      image.png

開発環境

プロジェクト作成

RestSharpの適用

  • .Clientを右クリックして、Nugetパッケージの管理 を選択
    • RestSharpと入力、その際、プレリリースを含めるのチェックボックスはオフにする。

image.png

  • 変更のプレビューは、とりあえずOK

image.png

  • Program.csにRestSharpを追加
    • Blazorの場合は、AddSingletonの記述が必要のようです。
Program.cs

using ApexChartsSample.Client;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using MudBlazor.Services;
+ using RestSharp;

var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.RootComponents.Add<HeadOutlet>("head::after");

builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
builder.Services.AddMudServices();
+ builder.Services.AddSingleton(new RestClient(new HttpClient()));

await builder.Build().RunAsync();
  • 一旦、デモページのデータでRestSharpを使用するにあたって、事前設定
    • @using RestSharp@inject RestClient _restClient; を追加します。
    • @inject HttpClient Http は、逆に不要となるので削除します。
    • @inject NavigationManager _navigationManagerを追加します。
FetchData.razor
@page "/fetchdata"
- @inject HttpClient Http
@using ApexChartsSample.Shared

+ @using RestSharp
+ @inject RestClient _restClient
+ @inject NavigationManager _navigationManager

<PageTitle>Weather forecast</PageTitle>
  • RestSharpは、アドレスがフルパスが必要となるので、NavigationManager を使って、BaseUriを取得します。
FetchData.razor
@code {
    private WeatherForecast[]? forecasts;

~~省略~~

    protected override async Task OnInitializedAsync()
    {
-         //forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("WeatherForecast");
+         var url = _navigationManager.BaseUri + "WeatherForecast";
+         forecasts = await _restClient.GetJsonAsync<WeatherForecast[]>(url);

~~省略~~
    }
}
  • HttpClientからRestSharpの取得へ変更した部分が無事、データ取得できるようになりました。

image.png

補足

  • 上のままでは、あまり「使ってみる」って感じでもないので、別投稿で具体的なGetとPostの例を記載するようにします。
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?