我想在我的 API 中提供以下 JSON:
{
"id": 1
"name": "Muhammad Rehan Saeed",
"phone": "123456789",
"address": {
"address": "Main Street",
"postCode": "AB1 2CD"
}
}
我想让客户端能够过滤掉他们不感兴趣的属性。以便以下 URL 返回 JSON 的子集:
`/api/contact/1?include=name,address.postcode
{
"name": "Muhammad Rehan Saeed",
"address": {
"postCode": "AB1 2CD"
}
}
在 ASP.NET Core 中实现此功能的最佳方法是什么,以便:
我找到了使用自定义 JSON.Net this 的 ContractResolver 解决方案。合约解析器可以通过将其添加到 ASP.Net Core 使用的默认合约解析器或手动添加到单个操作(如 this 代码示例但不是 Controller )来全局应用。此外,这是一个 JSON 特定的实现。
最佳答案
您可以使用 dynamic
与 ExpandoObject
创建一个包含您需要的属性的动态对象。 ExpandoObject是什么dynamic
关键字在幕后使用,它允许在运行时动态添加和删除属性/方法。
[HttpGet("test")]
public IActionResult Test()
{
dynamic person = new System.Dynamic.ExpandoObject();
var personDictionary = (IDictionary<string, object>)person;
personDictionary.Add("Name", "Muhammad Rehan Saeed");
dynamic address = new System.Dynamic.ExpandoObject();
var addressDictionary = (IDictionary<string, object>)address;
addressDictionary.Add("PostCode", "AB1 2CD");
personDictionary.Add("Address", address);
return Json(person);
}
这导致
{"Name":"Muhammad Rehan Saeed","Address":{"PostCode":"AB1 2CD"}}
您只需要创建一个服务/转换器或类似的东西,它将使用反射来循环您的输入类型,并且只保留您指定的属性。
关于asp.net - 过滤掉 ASP.NET Core API 中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36369970/