我知道你必须说这篇文章是重复的,但我已经去了多个帖子,答案对我的代码不起作用。
这是一个 Asp net web api 服务器。看一看:
// GET: api/Vessels
[HttpGet, Route(""), Route("{assets}")]
public IQueryable<Vessel> GetVessels(string assets = "all")
{
var user = GetUser();
if (IsAdmin(user))
{
return assets == "all"
? GetChildren(db.Vessels)
: db.Vessels;
}
var claims = user.Claims
.Where(c => c.ClaimType == "vessel")
.ToList();
var vessels = db.Vessels
.Where(v => claims.Any(c => v.Id == int.Parse(c.ClaimValue)))
.toList(); // will evaluate the query and get error
return assets == "all"
? GetChildren(vessels)
: vessels;
}
这是例外:
EntityFramework.SqlServer.dll 中出现类型为“System.NotSupportedException”的异常,但未在用户代码中处理附加信息:无法创建类型为“Microsoft.AspNet.Identity.EntityFramework.IdentityUserClaim”的常量值。在此上下文中仅支持原始类型或枚举类型。
在我的测试中,我意识到错误在这个块中:
claims.Any(c => v.Id == int.Parse(c.ClaimValue))
如果我将其更改为 5 或其他任何内容,它就可以工作!
相关分类