返回用户列表的ASP.NET 4.5 WebAPI
我是ASP.NET新手。刚刚完成了ASP.NETMVC、WebAPI和SPA的3本书。但这似乎不足以解决一个非常简单的问题。我的web api控制器中有以下代码,用于返回JSON/XML数据。所需的数据是返回在Identity Framework中注册的用户列表。我们已经在MVC上完成了这项工作,但无法理解web api返回用户列表的ASP.NET 4.5 WebAPI,asp.net,asp.net-mvc,asp.net-web-api,Asp.net,Asp.net Mvc,Asp.net Web Api,我是ASP.NET新手。刚刚完成了ASP.NETMVC、WebAPI和SPA的3本书。但这似乎不足以解决一个非常简单的问题。我的web api控制器中有以下代码,用于返回JSON/XML数据。所需的数据是返回在Identity Framework中注册的用户列表。我们已经在MVC上完成了这项工作,但无法理解web api [AllowAnonymous] [Route("UserInfos")] public IEnumerable<AppUser> GetUserI
[AllowAnonymous]
[Route("UserInfos")]
public IEnumerable<AppUser> GetUserInfos()
{
List<AppUser> logins = new List<AppUser>();
foreach (AppUser user in UserManager.Users)
{
logins.Add(user);
}
return logins;
}
[AllowAnonymous]
[路线(“用户信息”)]
公共IEnumerable GetUserInfos()
{
列表登录名=新列表();
foreach(UserManager.Users中的AppUser用户)
{
添加(用户);
}
返回登录;
}
但是当我调用这个web API时,我会出错。错误如下
<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
The 'ObjectContent`1' type failed to serialize the response body for content type 'application/xml; charset=utf-8'.
</ExceptionMessage>
<ExceptionType>System.InvalidOperationException</ExceptionType>
<StackTrace/>........
....
....
发生了一个错误。
'ObjectContent'1'类型未能序列化内容类型'application/xml'的响应正文;字符集=utf-8'。
System.InvalidOperationException异常
........
....
....
我在SPA中做一个用户经理/管理,soI需要web api来返回用户列表、角色等。就像MVC如何在模型/控制中返回这些数据来构建管理页面一样
请帮忙。任何到教程的链接都是非常感谢的,因为我已经用尽了所有的方法来寻找这个问题的答案。谢谢
[编辑]
下面的代码解决了这个问题。我为此创建了一个模型。但是为什么我不能直接访问和使用身份模型呢?我可以用MVC来做
[AllowAnonymous]
[Route("UserInfos")]
public IEnumerable<FlatUserModel> GetUserInfos()
{
List<FlatUserModel> logins = new List<FlatUserModel>();
foreach (AppUser user in UserManager.Users)
{
logins.Add(new FlatUserModel
{
Id=user.Id,
Name=user.UserName,
Email=user.Email
});
}
return logins;
}
[AllowAnonymous]
[路线(“用户信息”)]
公共IEnumerable GetUserInfos()
{
列表登录名=新列表();
foreach(UserManager.Users中的AppUser用户)
{
添加(新的FlatUserModel)
{
Id=user.Id,
Name=user.UserName,
Email=user.Email
});
}
返回登录;
}
[AllowAnonymous]
[路线(“用户信息”)]
公共IEnumerable GetUserInfos()
{
列表登录名=新列表();
foreach(UserManager.Users中的AppUser用户)
{
添加(新的FlatUserModel)
{
Id=user.Id,
Name=user.UserName,
Email=user.Email
});
}
返回登录;
}
UserManager。用户的类型为IQueryable
。是否确实包含AppUser
对象?将用户映射到展开视图模型。看起来您的子关系在序列化时可能会导致循环引用。如何映射到展开视图模型?这是否意味着我创建了一个与AppUser/IdentityUser具有相同属性的视图模型,并将UserManager.Users中的每个项分配给这个新的扁平化对象?请尝试将这行代码添加到Web API配置文件中,以停止递归引用。var jsonFormatter=config.Formatters.OfType().First();jsonFormatter.SerializerSettings.PreserveReferencesHandling=PreserveReferencesHandling.Objects;
[AllowAnonymous]
[Route("UserInfos")]
public IEnumerable<FlatUserModel> GetUserInfos()
{
List<FlatUserModel> logins = new List<FlatUserModel>();
foreach (AppUser user in UserManager.Users)
{
logins.Add(new FlatUserModel
{
Id=user.Id,
Name=user.UserName,
Email=user.Email
});
}
return logins;
}