C# 通过Web API 2将ASP.NET标识(用户管理)添加到OData

C# 通过Web API 2将ASP.NET标识(用户管理)添加到OData,c#,entity-framework,odata,asp.net-identity,asp.net-web-api2,C#,Entity Framework,Odata,Asp.net Identity,Asp.net Web Api2,我有一个OData项目,它是从WebAPI模板(包括凭据)创建的 我有一个ApplicationUser:IdentityUser类 我有一个TournamentContext:IdentityDbContext类 我有带有[RoutePrefix(“api/Account”)]属性的模板附带的默认AccountController 在WebApiConfig.cs中 对于WebAPI模板默认路由,我有 config.Routes.MapHttpRoute( name:

我有一个OData项目,它是从WebAPI模板(包括凭据)创建的

我有一个ApplicationUser:IdentityUser类

我有一个TournamentContext:IdentityDbContext类

我有带有[RoutePrefix(“api/Account”)]属性的模板附带的默认AccountController

在WebApiConfig.cs中 对于WebAPI模板默认路由,我有

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静态IEdmModel GetModel()
{
ODataConventionModelBuilder=新ODataConventionModelBuilder();
建筑商实体集(“锦标赛”);
返回builder.GetEdmModel();
}
现在,, 我想通过ODataAPI公开帐户/用户管理。 我如何做到这一点

谢谢,
Janiv Ratson。

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

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

2) 选择“带操作的Web API 2 OData控制器,实体框架”

3) 在一个对话框中,选择为应用程序用户生成的模型类——默认情况下为ApplicationUser(WebApplication1.Models)——和适当的数据上下文

    public System.Data.Entity.DbSet<WebApplication1.Models.ApplicationUser> ApplicationUsers { get; set; }
4) 生成完成后,应该替换自动添加到数据上下文中的DbSet属性声明

    public System.Data.Entity.DbSet<WebApplication1.Models.ApplicationUser> ApplicationUsers { get; set; }
public System.Data.Entity.DbSet ApplicationUsers{get;set;}
带方法声明

    public DbSet<ApplicationUser> GetApplicationUsers()
    {
        return (DbSet<ApplicationUser>) Users;
    }
public DbSet GetApplicationUsers()
{
返回(DbSet)用户;
}
(因为您的数据上下文是从具有IDbSet Users属性的IdentityDbContext继承的)。所以这是个错误

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

除非你更换


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

您是否试图在保持api路径的同时执行此操作?是的,但我可以放弃。