如何仅公开Web API所需的属性?

时间:2012-09-27 11:23:53

标签: rest web-applications asp.net-web-api poco

我是ASP.NET Web API的新手。

我看到了如何在RESTful Web应用程序中获取和返回POCO的示例。

我想知道在现实世界的应用程序中,你只能传递POCO的一些属性(出于安全性和/或消息大小的原因)。

我发现我可以使用'[ScriptIgnore]'属性,但我正在寻找一种方法来根据请求控制器自定义要传递的属性,例如。

这样做是否有一个很好的,开箱即用的方式?

由于

2 个答案:

答案 0 :(得分:2)

可能最简单的方法是用System.Runtime.Serialization.DataContractAttributeSystem.Runtime.Serialization.DataMemberAttribute包含的成员装饰您的POCO,即

[DataContract]
public class MyType
{
  [DataMember]
  public string Property1 {get; set;}
  public string Property2 {get; set;}
  public string Property3 {get; set;}
}

在这种情况下,只会序列化Property1。值得注意的是,XmlMediaTypeFormatterJsonMediaTypeFormatter都会尊重DataContract,因此您不需要任何特定于XML / JSON的attrbiutes。

现在,这将适用于更简单的解决方案,为您提供真正的,全面的方法,您可能需要使用DTO而不是将模型暴露给客户端。

您可以使用Automapper,并将模型投影到DTO - 您在这里有一篇很好的介绍性文章http://www.mono-software.com/blog/post/Mono/120/Using-AutoMapper-to-handle-DTOs/。此外,使用Automapper,您可以使用相同的基本模型创建不同类型的DTO,据我所知,这是您感兴趣的内容。

答案 1 :(得分:0)

如果您试图从不同的控制器返回同一模型的多个表现形式,那么这是一种有害的设计(据我所知)。如果您仍想这样做,可以将不需要的属性设置为“null”并返回模型。

要处理要从序列化中忽略的null对象,您必须在配置格式化程序时在某处执行此操作(在global.asax中):

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;