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

时间:2013-02-27 16:10:41

标签: asp.net-web-api

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

例如,对于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...
}

3 个答案:

答案 0 :(得分:11)

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

[ApiExplorerSettings(IgnoreApi = true)]

答案 1 :(得分:4)

不,房产没有类似的选择。 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属性的情况下隐藏属性,也不是非侵入性。

目前我更喜欢选项'a'作为比'b'更简单的解决方法。

答案 2 :(得分:1)

ASP.NET WEB API使用JSON.NET for JSON和DataContarctSerailizer进行XML格式化,因此如果您在序列化中不希望包含的属性添加[JsonIgnore]注释应该可以正常工作。