我正在使用.net core 2.2
制作webapi。我对.net框架还是陌生的,到目前为止,我正在使用基于JavaScript的框架,例如nodejs expressjs。
在nodejs中自定义JSON响应很容易。您可以举例说明如何使用.NET Core 2.2 WebApi自定义JSON响应吗?只要指出正确的方向即可。
让我举个例子,
C#用户模型
public class User {
int id {get;set;}
string name {get;set;}
string username {get;set;}
string password {get;set;}
}
默认API获取响应。
public ActionResult<IEnumerable<User>> GetAll()
Json:
[
{
"id":1,
"name": "John Doe",
"username": "john",
"password": "AH7B302Iapxf7EFzZVW0/kJDuf/I3pDPkQ42IxBTakA="
},
{
"id":2,
"name": "Jane Doe",
"username": "jane",
"password": "AH7B302Iapxf7EFzZVW0/kJDuf/I3pDPkQ42IxBTakA="
}
]
我需要像这样自定义输出。
{
"statuscode": 200,
"count" : 2,
"data" :
[
{
"name": "John Doe",
"username": "john",
},
{
"name": "Jane Doe",
"username": "jane",
}
]
}
答案 0 :(得分:3)
我猜您正在为您的api请求一个通用的返回对象,如果是这样,则需要按以下方式定义一个返回对象,
您的返回对象模型,考虑到您的所有实体都具有基本类型IEntity
或BaseEntity
。
public class Result<T> where T: IEntity
{
public int StatusCode { get; set; }
public int Count { get; set; }
public IEnumerable<T> Data { get; set; }
}
还有一个示例操作方法,
public IActionResult<IEnumerable<User>> GetAll()
{
var list = _userRepository.GetAll();
var model = new Result<User>
{
StatusCode = 200,
Count = list.Count,
Data = list
};
return Ok(model);
}
答案 1 :(得分:3)
您可以使用匿名对象,如果您不想为每个结果类型定义一个单独的类,这将很方便:
public ActionResult<object> GetAll()
{
var list = _userRepository.GetAll(); // <-- if this is not (yet) an Array or a List, then force single evaluation by adding .ToArray() or .ToList()
var model = new
{
statuscode = 200,
count = list.Count, // or .Length if list is an Array
data = list.Select(x => new { name = x.name, username = x.userName })
};
return Ok(model);
}