【问题标题】:How to create consistent API response class in ASP.NET Core 5 Web API如何在 ASP.NET Core 5 Web API 中创建一致的 API 响应类
【发布时间】:2022-10-06 10:52:38
【问题描述】:
如何在 ASP.NET Core 5 Web API 中创建一致的通用 API 响应类。
基本上我想得到来自 API 的响应,就像
{
Status Code : 200 or 404
Result Count : 1 (null or 0 in case of error or no data found)
Response : [array of data (error message in case of error)]
}
我在示例类下面创建了,但它仅在成功响应的情况下才有用。我无法在错误情况下使用它,因为Data 属性属于IEnumerable<T> 数据类型,我无法在字符串中传递错误消息。请问有什么帮助吗?
提前致谢。
public class Result<T>
{
public int StatusCode { get; set; }
public int Count { get; set; }
public IEnumerable<T> Data { get; set; }
}
//sample code in controller
public IActionResult<IEnumerable<User>> GetAll()
{
var list = _userRepository.GetAll();
var model = new Result<User>
{
StatusCode = 200,
Count = list.Count,
Data = list
};
return Ok(model);
}
标签:
c#
asp.net-web-api
asp.net-web-api2
.net-5
【解决方案1】:
要返回错误,您必须这样做
var list = new List<string>()
{
"invalidata"
};
var model = new Result<string>
{
StatusCode = 400,
Count = 0,
Data = list
};
return BadRequest(model);
然后你会得到这样的回应。
【解决方案2】:
public class ApiResponse
{
public ApiResponse(int statusCode, string message = null)
{
StatusCode = statusCode;
Message = message ?? GetDefaultMessageStatusCode(statusCode);
}
public int StatusCode { get; set; }
public string Message { get; set; }
private string GetDefaultMessageStatusCode(int statusCode)
{
return statusCode switch {
400 => "A bad request, you have made",
401 => "Authorized, you are not",
403 => "Forbidden from doing this, you are",
404 => "Resource found, it was not",
500 => "Errors are the path to the dark side. Errors lead to anger. Anger leads to hate. Hate leads to career change",
_ => null
};
}
}