เราสามารถสร้างคลาสที่กำหนดเองเป็นประเภทผลลัพธ์ได้โดยใช้อินเทอร์เฟซ 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); } } }
นี่คือผลลัพธ์ของบุรุษไปรษณีย์ของปลายทางซึ่งส่งคืนผลลัพธ์ที่กำหนดเอง