16

是否可以让帮助页面示例生成器忽略特定类型的某些属性?

例如,对于 POST 和 PUT 请求,我们对对象请求和响应消息使用相同的 DTO。当用户发布模型(创建新记录)时,他们不需要提供 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...
}
4

3 回答 3

12

使用下面的注释,我已经成功地从一代中隐藏了一个属性!

[ApiExplorerSettings(IgnoreApi = true)]
于 2015-05-01T10:00:28.787 回答
4

不,没有类似的属性选项。HelpPage 使用在应用程序上配置的格式化程序实例来序列化样本,并且您可以想象格式化程序本身必须没有这些知识。

关于解决方法:

一个。您可以通过 HttpRequestMessage 的SetSampleRequest扩展为特定操作的 requestsample 显式设置原始样本。您应该能够在 *Areas\HelpPage\App_Start\HelpPageConfig.cs* 的文件中看到一些关于此的示例。

湾。在文件Areas\HelpPage\SampleGeneration\HelpPageSampleGenerator.cs中,有一个名为WriteSampleObjectUsingFormatter的方法,它使用应用程序的格式化程序实例来编写样本。在这里,您需要创建与普通应用程序具有相似设置的格式化程序实例(以便它们反映您的应用程序在发出实际请求时通常会做出反应的确切序列化/反序列化语义),然后尝试隐藏您的属性想要。我们想要创建新实例,因为我们不想干扰应用程序的正常运行。

示例:对于 Json,您可以创建一个新的 Json 格式化程序实例并提供一个可以隐藏属性的ContractResolver 。检查此链接:http: //james.newtonking.com/projects/json/help/html/ConditionalProperties.htm

在 Xml 的情况下,我不确定我们如何在不使用 IgnoreDataMember 属性的情况下隐藏属性并且也不是侵入性的。

目前,我更喜欢选项“a”,因为它比“b”更简单。

于 2013-02-27T17:39:56.977 回答
1

ASP.NET WEB API 将 Json.NET 用于 JSON 和DataContarctSerailizerXML 格式设置,因此如果您[JsonIgnore]在不希望包含在序列化中的属性上添加注释应该可以正常工作。

于 2014-07-17T07:58:34.553 回答