Asp.net-Core-Mvc

Identity 3.0 當 id 為“int”時通過 id 獲取使用者

  • October 20, 2018

我已經四處尋找有關 Identity 3.0 的答案,但幾乎沒有發現有關獲取具有 int id 的單個使用者的資訊。

我有一個 asp.net-core mvc6 項目,在該項目中,我已將所有具有字元串 id 的使用者和角色轉換為具有整數 id。

美好的。這樣可行。我有一個 UserAdminController,其中包含一個更新或編輯操作,它傳遞了一個“int?” 為身份證。

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

在我的服務中,我想讓使用者與整數 id…“1”相關聯。

我想使用 UserManger.FindByIdAsync(id) 來獲取具有該 ID 的使用者。

問題是,這需要一個“字元串”id 而不是“int”id。

使用 UserManger(如果可以的話)如何返回帶有整數而不是字元串 id 的使用者?必須有一種優雅的方式來返回使用者?

Aliz 走在正確的軌道上,但他建議的方法在 Identity 3.0 中不存在。

但是,這確實可以使用 Aliz 選項編號 1..

var user = await _userManager.Users.FirstOrDefaultAsync(u => u.Id == id);

只需將您的使用者標識符作為字元串傳輸…

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

…並且 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);
}

引用自:https://stackoverflow.com/questions/36983656