11

Identity 3.0 についてこれに関する回答を探してみましたが、int ID を持つ単一のユーザーを取得することに関してはほとんど見つかりませんでした。

文字列 ID を持つすべてのユーザーとロールを整数 ID を持つように変換した asp.net-core mvc6 プロジェクトがあります。

罰金。それは機能します。「int?」を渡す update または Edit アクションを含む UserAdminController があります。IDのために。

public async Task<IActionResult> Edit(int? id)

私のサービスでは、整数 ID に関連付けられたユーザーを取得したいと考えています...「1」。

UserManger.FindByIdAsync(id) を使用して、その ID を持つユーザーを取得したかったのです。

問題は、これには「int」IDではなく「string」IDが必要なことです。

UserManger を使用して (可能であれば)、文字列 ID ではなく整数でユーザーを返すにはどうすればよいですか? ユーザーを返すエレガントな方法が必要ですか?

4

2 に答える 2

16

ユーザー識別子を文字列として流すだけです...

var user = _userManager.FindByIdAsync("1");

...そして、Identity は内部的に、次を使用して登録するときに設定したキー タイプに変換します。ConfigureServicesTypeConverter

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);
}
于 2016-05-02T15:54:54.093 に答える
5

Aliz は正しい方向に進んでいましたが、彼が提案した方法は Identity 3.0 には存在しませんでした。

ただし、これは基本として Aliz オプション番号 1.. を使用して機能します。

var user = await _userManager.Users.FirstOrDefaultAsync(u => u.Id == id);
于 2016-05-02T15:21:45.220 に答える