ASP.Net Web API帮助页面:忽略某些属性

JTe*_*ech 15 asp.net-web-api

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

例如,对于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...
}
Run Code Online (Sandbox Code Playgroud)

jan*_*r_z 12

使用以下注释我成功地隐藏了一代的属性!

[ApiExplorerSettings(IgnoreApi = true)]
Run Code Online (Sandbox Code Playgroud)


Kir*_*lla 4

不,没有类似的属性选项。HelpPage 使用应用程序上配置的格式化程序实例来序列化示例,并且您可以想象,格式化程序本身不得具有此知识。

关于解决方法:

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

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

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

对于 Xml,我不确定如何在不使用 IgnoreDataMember 属性且不具有侵入性的情况下隐藏属性。

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