C#
 Computer >> コンピューター >  >> プログラミング >> C#

C# ASP.NET Web APIのアクションメソッドからカスタム結果タイプを返す方法

ASP.NET Web APIでは、IHttpActionResultインターフェースを実装することで、独自のカスタムクラスを結果タイプとして作成できます。IHttpActionResultインターフェースには、HttpResponseMessageインスタンスを非同期に生成する単一のメソッド ExecuteAsync が定義されています。

public interface IHttpActionResult
{
    Task<HttpResponseMessage> ExecuteAsync(
        CancellationToken cancellationToken);
}

仕組みの概要

コントローラーのアクションメソッドが IHttpActionResult を返すようにすると、Web APIフレームワークは自動的に ExecuteAsync メソッドを呼び出して HttpResponseMessage を生成します。その後、生成されたレスポンスがHTTPレスポンスメッセージとしてクライアントへ送信されます。

この仕組みを利用することで、レスポンスの形式やステータスコードを柔軟に制御でき、再利用性の高いカスタム結果クラスを実装できます。

カスタム結果クラスの実装例

独自のカスタム結果を返すには、まず IHttpActionResult インターフェースを実装したクラスを作成する必要があります。

using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using System.Web.Http;
namespace DemoWebApplication.Controllers{
    public class CustomResult : IHttpActionResult{
        string _value;
        HttpRequestMessage _request;
        public CustomResult(string value, HttpRequestMessage request){
            _value = value;
            _request = request;
        }
        public Task<HttpResponseMessage> ExecuteAsync(CancellationToken
        cancellationToken){
            var response = new HttpResponseMessage(){
                Content = new StringContent($"Customized Result: {_value}"),
                RequestMessage = _request
            };
            return Task.FromResult(response);
        }
    }
}

この CustomResult クラスでは、コンストラクターで文字列値とリクエストメッセージを受け取り、ExecuteAsync 内で「Customized Result:」というプレフィックス付きの文字列を含むレスポンスを構築しています。

コントローラーアクション

次に、作成したカスタム結果クラスをアクションメソッドから返す例を見てみましょう。

using DemoWebApplication.Models;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace DemoWebApplication.Controllers{
    public class DemoController : ApiController{
        public IHttpActionResult Get(int id){
            List<Student> students = new List<Student>{
                new Student{
                    Id = 1,
                    Name = "Mark"
                },
                new Student{
                    Id = 2,
                    Name = "John"
                }
            };
            var studentForId = students.FirstOrDefault(x => x.Id == id);
            return new CustomResult(studentForId.Name, Request);
        }
    }
}

このアクションメソッドでは、学生のリストから指定されたIDに一致する学生を検索し、その名前を引数として CustomResult のインスタンスを生成して返しています。

実行結果の確認

以下は、カスタム結果を返すエンドポイントをPostmanで実行した際の出力結果です。

C# ASP.NET Web APIのアクションメソッドからカスタム結果タイプを返す方法

このように、IHttpActionResult を実装したカスタムクラスを使用することで、APIのレスポンス内容を自由にカスタマイズでき、コードの保守性や再利用性も向上します。

  1. C# ASP.NET Web APIにおけるコントローラーアクションの4つの戻り値の型とは?

    ASP.NET Web APIのアクションメソッドには、主に以下の4種類の戻り値の型を指定することができます。 void(戻り値なし) プリミティブ型/複合型 HttpResponseMessage IHttpActionResult 1. void(戻り値なし) すべてのアクションメソッドが必ずしも何かを返す必要はありません。戻り値の型としてvoidを指定することも可能です。 コード例 using DemoWebApplication.Models; using System.Web.Http; namespace DemoWebApplication.Controllers {

  2. C#のジェネリックメソッドからnullを返す方法:default(T)の使い方

    ジェネリック(Generics)を使うと、フィールド、メソッド、パラメータなどの型をプレースホルダー(型パラメータ)として持つクラスを定義できます。これらのプレースホルダーは、コンパイル時に具体的な型へと置き換えられます。ジェネリックは山括弧 <> を使って定義するのが基本です。C#のコレクションにおける主な制限の一つは、効果的な型チェックが行えないことです。C#ではすべてのクラスがobject基底クラスから派生しているため、コレクションには原理的にどんなオブジェクトでも格納できてしまいます。さらに、通常のメソッドとは異なり、ジェネリックメソッドから単純にnullを返すことはできま