3

Web API テンプレート (資格情報を含む) から作成された OData プロジェクトがあります。

ApplicationUser:IdentityUser クラスがあります。

私は TournamentContext : IdentityDbContext クラスを持っています。

[RoutePrefix("api/Account")] 属性を持つテンプレートに付属するデフォルトの AccountController があります。

WebApiConfig.cs では、私が持っている Web API テンプレートのデフォルト ルーティングについて

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new {id = RouteParameter.Optional});

私が追加したODataサポートについて:

config.Routes.MapODataRoute("odata", "odata", GetModel(),
            new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer));

private static IEdmModel GetModel()
    {
        ODataConventionModelBuilder builder = new ODataConventionModelBuilder();            
        builder.EntitySet<Tournament>("Tournaments");
        return builder.GetEdmModel();
    }

ここで、OData API を介してアカウント/ユーザー管理を公開したいと考えています。どうすればそれを達成できますか?

ありがとう、ジャニフ・ラトソン。

4

1 に答える 1

4

スキャフォールディングを使用してユーザー ID を管理するための ODataController を作成できます。

1) Controllers フォルダを右クリックし、[追加] -> [コントローラ...]

2)「アクションを含むWeb API 2 ODataコントローラー、Entity Framework」を選択します

3) ダイアログで、アプリ ユーザー用に生成されたモデル クラス (デフォルトでは ApplicationUser (WebApplication1.Models)) と適切なデータ コンテキストを選択します。

4) 生成が完了したら、データ コンテキストに自動的に追加された DbSet プロパティ宣言を置き換える必要があります。

    public System.Data.Entity.DbSet<WebApplication1.Models.ApplicationUser> ApplicationUsers { get; set; }

メソッド宣言で

    public DbSet<ApplicationUser> GetApplicationUsers()
    {
        return (DbSet<ApplicationUser>) Users;
    }

(データ コンテキストは、IDbSet Users プロパティを持つ IdentityDbContext から継承されるため)。だからエラーが出る

タイプごとの複数のオブジェクト セットはサポートされていません。オブジェクト セット 'ApplicationUsers' と 'Users' はどちらもタイプ 'WebApplication1.Models.ApplicationUser' のインスタンスを含むことができます

交換しないと。

5) 最後に、生成されたコントローラー コード "db.ApplicationUsers" を "db.GetApplicationUsers()" に置き換える必要があります。

于 2014-09-26T08:13:30.187 に答える