Skip to content

WebAPI Data Response

To allow the client to better handle response data, we need to encapsulate the data and use a consistent data format so that the client can handle it uniformly based on the data format.

ResponseData, ResponseData Classes

We define two classes in the package NetCorePal.Extensions.AspNetCore to encapsulate response data, namely ResponseData and ResponseData<T>.

The ResponseData class is used to encapsulate responses without data, and the ResponseData<T> class is used to encapsulate responses with data.

The type definitions are as follows:

public class ResponseData
{
    public ResponseData(bool success = true, string message = "", int code = 0, IEnumerable<object>? errorData = null)
    {
        Success = success;
        Message = message;
        Code = code;
        ErrorData = errorData ?? KnownException.EmptyErrorData;
    }

    public bool Success { get; protected set; }
    public string Message { get; protected set; }
    public int Code { get; protected set; }

    public IEnumerable<object> ErrorData { get; protected set; }
}

public class ResponseData<T> : ResponseData
{
    public ResponseData(T data, bool success = true, string message = "", int code = 0, IEnumerable<object>? errorData = null) : base(success: success, message: message, code: code, errorData: errorData)
    {
        this.Data = data;
    }
    public T Data { get; protected set; }
}

AsResponseData Extension Method

We also define an extension method AsResponseData to convert data into ResponseData or ResponseData<T> objects.

using NetCorePal.Extensions.AspNetCore;

var data = new MyData();
var responseData = data.AsResponseData();

Usage Example

In the controller, we can use ResponseData and ResponseData<T> to encapsulate response data.

[HttpGet]
public async Task<ResponseData<IEnumerable<WeatherForecast>>> Get()
{
    var rng = new Random();
    var result = await Task.FromResult(Enumerable.Range(1, 5).Select(index => new WeatherForecast
    {
        Date = DateTime.Now.AddDays(index),
        TemperatureC = rng.Next(-20, 55),
        Summary = Summaries[rng.Next(Summaries.Length)]
    }));

    return result.AsResponseData();
}