Ta có thể tạo lớp tùy chỉnh (custom class) làm kiểu kết quả (result type) bằng cách triển khai interface IHttpActionResult. IHttpActionResult chứa một phương thức duy nhất là ExecuteAsync, tạo ra HttpResponseMessage instance bất đồng bộ.
public interface IHttpActionResult
{
Task ExecuteAsync(CancellationToken cancellationToken);
}
Nếu action controller trả về IHttpActionResult, Web API gọi ExecuteAsync để tạo HttpResponseMessage. Sau đó chuyển đổi HttpResponseMessage thành HTTP response message.
Ví dụ
Để có custom result riêng, phải tạo class triển khai IHttpActionResult interface.
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 ExecuteAsync(CancellationToken cancellationToken)
{
var response = new HttpResponseMessage()
{
Content = new StringContent($"Customized Result: {_value}"),
RequestMessage = _request
};
return Task.FromResult(response);
}
}
}
Controller Action
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 students = new List
{
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);
}
}
}
Kết quả Postman của endpoint trả về custom result:
