c# - 通过 Web API 2 将 ASP.NET 身份(用户管理)添加到 OData

标签 c# entity-framework odata asp.net-identity asp.net-web-api2

我有一个从 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 公开帐户/用户管理。 我该如何实现?

谢谢, 贾尼夫·拉森。

最佳答案

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

1) 鼠标右键单击 Controllers 文件夹,添加 -> Controller ...

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 属性)。所以有错误

Multiple object sets per type are not supported. The object sets 'ApplicationUsers' and 'Users' can both contain instances of type 'WebApplication1.Models.ApplicationUser'

除非您进行更换。

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

关于c# - 通过 Web API 2 将 ASP.NET 身份(用户管理)添加到 OData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21547005/

相关文章:

c# - 从基于泛型类但需要派生类的类类型的类继承

c# - 让所有 parent 共有的 child

c# - 是否有任何 .NET ORM 支持开箱即用的本地化实体?

linq - 即使使用 $top 也强制执行 OData 项的排序

c# - Visual Studio 2017 本地化发布设置

c# - "GenerateJavaStubs"任务失败

c# - System.EntryPointNotFoundException + 无法安装包 'SQLite.Interop.dll 1.0.103' 。我的项目目标'.NETFramework,Version=v4.6.1'

c# - ASP.NET Core - 自定义 AspNetCore.Identity 实现不起作用

c# - 使用另一个更轻的对象序列化具有虚拟属性的对象

c# - 将 >48k 发送到 WCF 数据服务 (OData) 413 错误