如何通过 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.