是否可以让帮助页面样本生成器忽略特定类型的某些属性?
例如,对于POST和PUT请求,我们对对象请求和响应消息使用相同的DTO . 当用户POST一个模型(创建一个新记录)时,他们不需要提供ID字段 .
但是一旦创建并将新记录序列化到响应主体中,就会包含ID字段并将其返回给客户端 .
所以在POST请求示例中,我不希望显示ID字段,因为对于post请求它没有意义 .
但是POST响应示例,我确实希望显示ID字段......
我知道 ApiExplorerSettings
属性可以应用于类或方法......但是属性有什么类似的吗?
像这样的东西会很棒:
public class MyDTO
{
[ApiExplorerSettings(IgnoreForRequestApi = true, IgnoreForResponseApi = false)]
public int Id { get; set; }
// Other properties omitted for brevity...
}
3 回答
不,房产没有类似的选择 . HelpPage使用在应用程序上配置的格式化程序实例来序列化样本,您可以想象格式化程序本身不具备此知识 .
关于变通方法:
一个 . 您可以通过HttpRequestMessage的SetSampleRequest扩展显式设置特定操作的requestsample的原始样本 . 您应该能够在* Areas \ HelpPage \ App_Start \ HelpPageConfig.cs *中的文件中看到一些关于此的示例 .
湾在文件Areas \ HelpPage \ SampleGeneration \ HelpPageSampleGenerator.cs中,有一个名为WriteSampleObjectUsingFormatter的方法,它使用应用程序的格式化程序实例来编写样本 . 在这里,您需要创建具有与普通应用程序类似的设置的 new 格式化程序实例(以便它们反映应用程序通常在发出实际请求时对其作出反应的确切序列化/反序列化语义),然后尝试隐藏您的属性想要 . 我们想要创建新实例,因为我们不想干扰应用程序的正常运行 .
示例:对于Json,您可以创建一个新的Json格式化程序实例并提供可以隐藏属性的ContractResolver . 检查此链接:http://james.newtonking.com/projects/json/help/html/ConditionalProperties.htm
在Xml的情况下,我不确定如何在不使用IgnoreDataMember属性的情况下隐藏属性并且也是非侵入性的 .
Currently I would prefer option 'a' as its comparatively a simple workaround than 'b'.
使用以下注释我成功地隐藏了一代的属性!
ASP.NET WEB API使用JSON.NET for JSON和
DataContarctSerailizer
进行XML格式化,因此如果您在序列化中不希望包含的属性添加[JsonIgnore]
注释应该可以正常工作 .