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

您可以使用脚手架创建 ODataController 来管理用户身份:

1)鼠标右键单击控制器文件夹,添加 - >控制器...

2)选择“Web API 2 OData Controller with actions, 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;
    }

(因为您的数据上下文继承自 IdentityDbContext,它具有 IDbSet Users 属性)。所以有错误

不支持每种类型的多个对象集。对象集“ApplicationUsers”和“Users”都可以包含“WebApplication1.Models.ApplicationUser”类型的实例

除非你更换。

5) 最后 - 您应该将生成的控制器代码“db.ApplicationUsers”替换为“db.GetApplicationUsers()”。

于 2014-09-26T08:13:30.187 回答