我有一个从 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/