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

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


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

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

コントローラアクションがIHttpActionResultを返す場合、WebAPIはExecuteAsyncmethodを呼び出してHttpResponseMessageを作成します。次に、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);
      }
   }
}

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

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);
      }
   }
}

カスタム結果を返すエンドポイントのpostman出力は次のとおりです。

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


  1. C#ASP.NET WebAPIでのコントローラーアクションのさまざまな戻り値の種類は何ですか?

    Web APIアクションメソッドは、次のリターンタイプを持つことができます。 ボイド プリミティブ型/複合型 HttpResponseMessage IHttpActionResult 無効 − すべてのアクションメソッドが何かを返す必要はありません。ボイドリターンタイプにすることができます。 例 using DemoWebApplication.Models using System.Web.Http; namespace DemoWebApplication.Controllers{    public class DemoCont

  2. C#のジェネリックメソッドからnullを返すにはどうすればよいですか?

    Genericsを使用すると、フィールド、メソッド、パラメーターなどのタイプのプレースホルダーを使用してクラスを定義できます。Genericsを使用すると、コンパイル時にこれらのプレースホルダーを特定のタイプに置き換えます。ジェネリックは、山括弧<>を使用して定義できます。コレクションの主な制限は、効果的な型チェックがないことです。これは、C#プログラミング言語のすべてのクラスがオブジェクト基本クラスから拡張されているため、任意のオブジェクトをコレクションに含めることができることを意味します。 また、通常のメソッドのように、ジェネリックメソッドから単純にnullを返すことはできません。以下は