Asp.Net Core 統一Api返回值

ssz0312發表於2024-07-21

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);
    }
}

在這裡我們新增了OkFail並保留了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"
    },
  ]
}

相關文章