Asp.Net Core 統一Api返回值
寫在開頭
在我們在前端呼叫後端介面時,常常會遇到返回資料不一致的問題,又或者當我們請求介面的時候我們常常需要判斷結果,以呼叫不同的Toast
或者Snackbar
反饋給操作者,我們需要對介面返回資料進行統一的操作。
程式碼
首先我們需要一個返回結果類,他應當接收所有型別資料,即泛型
public record ResponseResult<T>
{
public bool status { get; set; }
public string? msg { get; set; }
public T data { get; set; }
public static ResponseResult<T> Result(bool _status, T _data, string? _msg = null)
{
return new ResponseResult<T> { status = _status, data = _data, msg = _msg };
}
}
那麼現在在api控制器裡可能是這樣子的:
return ResponseResult<string>.Result(true, "","");
很顯然,他看起來太長了,我們使用極為不便。
我們讓他簡化一點,透過繼承ControllerBase
就像下面這樣:
public class BaseController : ControllerBase
{
protected ResponseResult<T> Result<T>(bool status, T data, string? msg = null)
{
return ResponseResult<T>.Result(status, data, msg);
}
protected ResponseResult<T> ResultOk<T>(T data)
{
return ResponseResult<T>.Result(true, data);
}
protected ResponseResult<T> ResultFail<T>(string msg)
{
return ResponseResult<T>.Result(false, default, msg);
}
}
在這裡我們新增了Ok
和Fail
並保留了result
以下是相關使用場景:
return ResultOk(data);
return ResultFail(error);
return Result(error=="",data,error);
json
結果展示:
{
"status": true,
"msg": null,
"data": [
{
"date": "2024-07-22",
"temperatureC": -2,
"temperatureF": 29,
"summary": "Warm"
},
{
"date": "2024-07-23",
"temperatureC": -19,
"temperatureF": -2,
"summary": "Mild"
},
]
}