LoginSignup
0
3

More than 3 years have passed since last update.

RestSharpを使ってDigest認証を試してみた

Last updated at Posted at 2020-08-30

背景

Windowsアプリ開発の中でHTTPクライアント周りを調べていたのですが、標準ではHttpClientクラスが用意されています。
HttpClient クラス (System.Net.Http) | Microsoft Docs

が、このクラスが結構曲者らしいのです。(実際使ったことがないのでわかりませんが)
Qiitaで調べてみても結構出てきて、これは使いたくないな、、と正直思いました。

HttpClientをusingで囲わないでください - Qiita
.NET(Framework)のHttpClientの取り扱いには要注意という話 - Qiita

さらに調べたところ、RestSharpというREST APIクライアントライブラリがあることを知り、割と良さそうだと思ったので、Digest認証で試してみることにしました。

導入方法

NuGetパッケージの管理から以下のパッケージをインストールします。

  • RestSharp
  • RestSharp.Authenticators.Digest
  • RestSharp.Serializers.Utf8Json
Install-Package RestSharp
Install-Package RestSharp.Authenticators.Digest
Install-Package RestSharp.Serializers.Utf8Json

使い方

例えばAPIがGETメソッドで、レスポンスとして以下のJSONデータを返してくるものとします。

{"foo": "bar", "baz": {"foo": "bar", "baz": "qux"}}

まず、JSONデータを受け取るためのデータクラスを作成します。

Foo.cs
public class Foo
{
    public string foo { get; set; }

    public Baz baz { get; set; }
}
Baz.cs
public class Baz
{
    public string foo { get; set; }

    public string baz { get; set; }
}

そして、以下のようにリクエスト&レスポンスからJSONデータをデシリアライズします。

// クライアントの生成(BaseURLを設定しておく)
var client = new RestClient("https://hogehoge.api/1.1)
{
    // Digest認証の設定
    Authenticator = new DigestAuthenticator("username", "password");
};

// JSONシリアライザーの設定(今回はUtf8Jsonを使用)
client.UseUtf8Json();

// リクエストの生成(Resourceとレスポンスのデータフォーマットを設定)
var request = new RestRequest("foobaz", DataFormat.Json);

// 同期呼び出し
var response = client.Get(request);

// JSONデータをデシリアライズ
var result = new Utf8JsonSerializer().Deserialize<Foo>(response);

大まかにはRestClientクラスのインスタンスを生成し、認証方式やJSONシリアライザーの設定をして、RestRequestクラスのインスタンスをclient.Getメソッドの引数に渡すことでできます。
そして、変数responseに結果が入っているので、あとはJSONデータをデシリアライズします。

また、以下のように非同期呼び出しにして、デシリアライズをまとめることもできます。

// 非同期呼び出し(resultがFoo型として返ってくる)
var result = await client.GetAsync<Foo>(request);

参考URL

0
3
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
3