我正在设置一个API,该API作为响应的一部分来动态通告服务,让消费者知道他们还可以对该对象做什么。我不知道如何将父对象的对象类型和ID注入服务URI。
我正在使用属性和自定义JSON.NET IValueProviders创建URI(对于其他动态示例来说效果很好),但是在这种情况下,我需要对象外部的属性。
类看起来类似于:
public class Person
{
public Guid ID { get; set; }
public string Type { get; set; }
public string Name { get; set; }
[ObjectUri]
public string Uri { get; set; }
...
public IEnumerable<Service> Services { get; set; }
}
public class Service
{
public string ServiceName { get; set; }
[ServiceUri]
public string ServiceUri { get; set; }
}
我正在使用自定义合同解析器来添加自定义IValueProvider(ObjectUriValueProvider),该IValueProvider呈现对象URI(显然只是使用来自同一对象的信息)。
但是,由于合同解析器在抽象模型级别上运行,因此无法将与父对象有关的具体值传递给ServiceUriValueProvider。
理想的输出:
{
"id": "ae330dc8-0217-4c58-b64b-44a1c7ba4f46",
"type": "Person",
"name": "Fred",
"uri": "https://server/api/person/ae330dc8-0217-4c58-b64b-44a1c7ba4f46"
...
"services": [
{
"serviceName": "ListNotes",
"serviceUri": "https://server/api/notes/person/ae330dc8-0217-4c58-b64b-44a1c7ba4f46"
},
{
"serviceName": "ListContactDetails",
"serviceUri": "https://server/api/contacts/person/ae330dc8-0217-4c58-b64b-44a1c7ba4f46"
}
]
}
目前的实际结果不包括正确填充到的类型和ID
{
"services": [
{
"serviceName": "ListNotes",
"serviceUri": "https://server/api/notes/{type}/{id}"
},{
"serviceName": "ListContactDetails",
"serviceUri": "https://server/api/contacts/{type}/{id}"
}
]
}