如何透過 C# ASP.NET WebAPI 的操作方法返回自定義結果型別?


我們可以透過實現IHttpActionResult 介面來建立我們自己的自定義類作為結果型別。IHttpActionResult 包含一個單獨的方法 ExecuteAsync,該方法非同步建立 HttpResponseMessage 例項。

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

如果控制器操作返回 IHttpActionResult,Web API 將呼叫 ExecuteAsync 方法來建立 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 輸出。

更新於: 2020 年 8 月 19 日

1K+ 瀏覽量

開啟您的 職業生涯

完成課程以獲得認證

開始學習
廣告
© . All rights reserved.