ASP.NETWebAPIは初めてです。
RESTfulWebアプリケーションでPOCOを取得および返す方法の例を見ました。
実際のアプリケーションでは、POCOの一部のプロパティのみを渡すことができるのでしょうか(セキュリティやメッセージサイズの理由から)。
'[ScriptIgnore]'属性を使用できることがわかりましたが、たとえば、要求しているコントローラーに応じて渡すプロパティをカスタマイズする方法を探しています。
そうするための、すぐに使える素晴らしい方法はありますか?
ありがとう
ASP.NETWebAPIは初めてです。
RESTfulWebアプリケーションでPOCOを取得および返す方法の例を見ました。
実際のアプリケーションでは、POCOの一部のプロパティのみを渡すことができるのでしょうか(セキュリティやメッセージサイズの理由から)。
'[ScriptIgnore]'属性を使用できることがわかりましたが、たとえば、要求しているコントローラーに応じて渡すプロパティをカスタマイズする方法を探しています。
そうするための、すぐに使える素晴らしい方法はありますか?
ありがとう
おそらく最も簡単なのは、POCOとSystem.Runtime.Serialization.DataContractAttributeあなたが含めたいメンバーをSystem.Runtime.Serialization.DataMemberAttributeieで飾ることです
[DataContract]
public class MyType
{
[DataMember]
public string Property1 {get; set;}
public string Property2 {get; set;}
public string Property3 {get; set;}
}
Property1この場合、シリアル化されるのはこの場合のみです。注目に値するのは、両方XmlMediaTypeFormatterとJsonMediaTypeFormatterが尊重DataContractされるため、XML/JSON固有の属性は必要ないということです。
これで、これはより単純なソリューションで機能します。実際の、丸みのあるアプローチでは、モデルをクライアントに公開するのではなく、おそらくDTOに頼る必要があります。
Automapperそのために使用して、モデルをDTOにプロジェクトすることができます-ここに優れた紹介記事がありますhttp://www.mono-software.com/blog/post/Mono/120/Using-AutoMapper-to-handle-DTOs/。また、Automapperを使用すると、同じベースモデルからさまざまなタイプのDTOを作成できます。これは、私が理解していることですが、興味のあることです。
同じモデルの複数の症状を異なるコントローラーから返そうとしている場合、それは有害な設計です(私によると)。それでも実行したい場合は、不要なプロパティを「null」にしてモデルを返すことができます。
シリアル化から無視するnullオブジェクトを処理するには、フォーマッターの構成中にどこかでこれを行う必要があります(global.asax内)。
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;