si2*_*030 4 asp.net-core-mvc asp.net-identity-3
我已经浏览了Identity 3.0的答案,并且发现很少有关于获得具有int id的单个用户.
我有一个asp.net-core mvc6项目,我在其中使用字符串id转换所有用户和角色以获得整数id.
精细.这样可行.我有一个UserAdminController,其中包括更新或编辑动作,它传递"int?" 为id.
public async Task<IActionResult> Edit(int? id)
Run Code Online (Sandbox Code Playgroud)
在我的服务中,我想让用户与整数id ..."1"相关联.
我想使用UserManger.FindByIdAsync(id)来获取具有该id的用户.
问题是,这需要一个"字符串"id而不是"int"id.
使用UserManger(如果可以的话)如何返回一个整数而不是字符串id的用户?必须有一种优雅的方式来返回用户?
只需将您的用户标识符作为字符串流动...
var user = _userManager.FindByIdAsync("1");
Run Code Online (Sandbox Code Playgroud)
...并且Identity会在内部将其转换回您在ConfigureServices使用时注册时配置的密钥类型TypeConverter:
public virtual Task<TUser> FindByIdAsync(string userId, CancellationToken cancellationToken = default(CancellationToken))
{
cancellationToken.ThrowIfCancellationRequested();
ThrowIfDisposed();
var id = ConvertIdFromString(userId);
return Users.FirstOrDefaultAsync(u => u.Id.Equals(id), cancellationToken);
}
public virtual TKey ConvertIdFromString(string id)
{
if (id == null)
{
return default(TKey);
}
return (TKey)TypeDescriptor.GetConverter(typeof(TKey)).ConvertFromInvariantString(id);
}
Run Code Online (Sandbox Code Playgroud)
Aliz 走在正确的轨道上,但是他建议的方法在 Identity 3.0 中并不存在。
然而,这确实使用作为基础的 Aliz 选项编号 1..
var user = await _userManager.Users.FirstOrDefaultAsync(u => u.Id == id);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1472 次 |
| 最近记录: |