2

WebAPI 2 を使用してユーザーのリストを公開できるようにしたいと考えています。ただし、MVC5 で新しい Asp.Net 認証フレームワークを使用しているため、特定のフィールドのみを としてマークする方法が見つからないようですDataMembers

私が持っているものは次のとおりです。

[DataContract]    
public class ApplicationUser : IdentityUser {
    public Nullable<DateTime> birthday { get; set; }
    [DataMember]
    public int tolerance { get; set; }
    [DataMember]
    public string twitter { get; set; }
}

ただし、属性IdentityUserがないため、機能しないようです。[DataContract]カスタム を作成しようとしましたIdentityUserが、 のカスタム コピーを作成した後にビルドできませんでしたIdentityUser

ここでヒントや回避策はありますか?現在のベスト プラクティスでない限り、ViewModel を作成する必要はありません。

4

3 に答える 3

2

ユーザーオブジェクトをシリアル化するのではなく、必要なユーザー情報を含む別のオブジェクトを送信する必要があります。

于 2013-10-22T17:02:02.513 に答える
1

どのフォーマッターを使用しますか? デフォルトの Json フォーマッタに問題はありません。ただし、xml シリアライザーの場合、基本クラスも DataContract である必要があります。

ここではビュー モデルが常にベスト プラクティスですが、Web API のサンプルのほとんどは単純化のためにデータ エンティティを使用しています。2 つのモデルは別の問題です。ビュー モデルは API のコントラクトを表し、データ モデルはドメインの概念を表します。2 つのモデルを 1 つに結合すると、設計上の決定に影響を与える可能性があり、さらに深刻な問題として、セキュリティの問題が発生する可能性があります。データ エンティティを使用すると、予期しないデータがユーザーに公開される可能性があります。たとえば、フォーマッターが異なれば、モデルの公開を制御するルールも異なります。JsonIgnore は xml フォーマッタでは機能しません。カスタム フォーマッタを使用している場合は、さらに複雑になります。特に、パスワード ハッシュ、セキュリティ スタンプなどの多くの機密プロパティを持つ ID ユーザー エンティティの場合。公開することはお勧めしません。

ところで、ドメイン モデルからビュー モデルへのマッピングを簡素化するのに役立つ多くのマッパー ツールがあります。それらが必要になる場合があります: http://www.nuget.org/packages?q=mapper

于 2013-10-22T17:08:55.360 に答える