C#でHttpClientを使ってASP.NET Web APIのエンドポイントを他のアプリケーションから呼び出す方法
HttpClientクラスとは
HttpClientクラスは、指定したURLに対してHTTPリクエストを送信し、HTTPレスポンスを受信するための基底クラスを提供します。HttpClientは.NETフレームワークがサポートする非同期機能であり、複数の同時リクエストを効率的に処理できます。内部的にはHttpWebRequestおよびHttpWebResponseの上位層として実装されており、すべてのメソッドが非同期で動作します。HttpClientはSystem.Net.Http名前空間で利用できます。
この記事では、まずStudentControllerとそれに対応するアクションメソッドを持つWebAPIアプリケーションを作成し、続いて別のコンソールアプリケーションからこれらのエンドポイントを呼び出して学生情報を取得する手順を解説します。
Studentモデルの作成
namespace DemoWebApplication.Models{
public class Student{
public int Id { get; set; }
public string Name { get; set; }
}
}
Studentコントローラーの作成
using DemoWebApplication.Models;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace DemoWebApplication.Controllers{
public class StudentController : ApiController{
List<Student> students = new List<Student>{
new Student{
Id = 1,
Name = "Mark"
},
new Student{
Id = 2,
Name = "John"
}
};
public IEnumerable<Student> Get(){
return students;
}
public Student Get(int id){
var studentForId = students.FirstOrDefault(x => x.Id == id);
return studentForId;
}
}
}


このコントローラーには、GETリクエストに対して全学生のリストを返すアクションと、指定されたIDに一致する学生を1件返すアクションの2つが定義されています。
次に、上記で作成したWebAPIのエンドポイントを呼び出して学生情報を取得するコンソールアプリケーションを作成します。
コンソールアプリケーションからの呼び出し例
using System;
using System.Net.Http;
namespace DemoApplication{
public class Program{
static void Main(string[] args){
using (var httpClient = new HttpClient()){
Console.WriteLine("Calling WebApi for get all students");
var students = GetResponse("student");
Console.WriteLine($"All Students: {students}");
Console.WriteLine("Calling WebApi for student id 2");
var studentForId = GetResponse("student/2");
Console.WriteLine($"Student for Id 2: {students}");
Console.ReadLine();
}
}
private static string GetResponse(string url){
using (var httpClient = new HttpClient()){
httpClient.BaseAddress = new Uri("https://localhost:58174/api/");
var responseTask = httpClient.GetAsync(url);
var result = responseTask.Result;
var readTask = result.Content.ReadAsStringAsync();
return readTask.Result;
}
}
}
}
実行結果
Calling WebApi for get all students
All Students: [{"Id":1,"Name":"Mark"},{"Id":2,"Name":"John"}]
Calling WebApi for student id 2
Student for Id 2: {"Id":2,"Name":"John"}
上記の例では、別個のコンソールアプリケーションからWebAPIのエンドポイントが正しく呼び出され、JSON形式のレスポンスを取得できていることが確認できます。
実装のポイント
- BaseAddressの設定: httpClient.BaseAddressにベースURL(例:https://localhost:58174/api/)を設定しておくことで、以降は「student」や「student/2」のような相対パスだけで各エンドポイントを指定できます。
- 非同期処理の扱い: GetAsyncやReadAsStringAsyncはTaskを返すため、サンプルでは簡略化のため.Resultを使用していますが、実際の開発ではawaitキーワードを使った非同期処理が推奨されます。
- JSONの活用: この例ではレスポンス文字列をそのまま表示していますが、Newtonsoft.Jsonなどのライブラリを併用すれば、取得したJSONをC#のオブジェクトへ簡単にデシリアライズできます。
-
C# ASP.NET WebAPIでCORSの問題を解決する方法を徹底解説
CORS(クロスオリジンリソースシェアリング)とはクロスオリジンリソースシェアリング(Cross-Origin Resource Sharing:CORS)は、追加のHTTPヘッダーを使用して、あるオリジンで動作しているWebアプリケーションに対し、別のオリジンにある選択されたリソースへのアクセスを許可するようブラウザに指示する仕組みです。Webアプリケーションは、自身とは異なるオリジン(ドメイン、プロトコル、ポート)のリソースを要求する際に、クロスオリジンHTTPリクエストを実行します。例として、フロントエンド(UI)とバックエンド(サービス)を持つアプリケーションを考えてみましょう。フロン
-
C# ASP.NET Web APIのアクションメソッドからカスタム結果タイプを返す方法
ASP.NET Web APIでは、IHttpActionResultインターフェースを実装することで、独自のカスタムクラスを結果タイプとして作成できます。IHttpActionResultインターフェースには、HttpResponseMessageインスタンスを非同期に生成する単一のメソッド ExecuteAsync が定義されています。public interface IHttpActionResult { Task<HttpResponseMessage> ExecuteAsync( CancellationToken cancellationToke