Ich versuche derzeit, die angegebene Benutzerliste von Rollen zu bekommen und habe einige Probleme bei der Anpassung in den Kontext, in dem wir es verwenden. Ich konnte eine Liste von alle verfügbaren Rollen mit dieser API früheren Funktion,Holen Sie sich Benutzerrollen mit ASP.net Identität und Web-API
[HttpGet]
[Route("GetRoles")]
public async Task<ApiResponse<List<RoleViewModel>>> GetRoles()
{
try
{
//Get Roles
var roles = await (from r in _db.AspNetRoles
select new RoleViewModel { Id = r.Id, Name = r.Name}).ToListAsync();
return new ApiResponse<List<RoleViewModel>>{ Success = true, Result = roles };
}
catch(Exception ex)
{
return new ApiResponse<List<RoleViewModel>> { Success = false, Message = ex.Message };
}
}
Aber kann nicht scheinen, um herauszufinden, was ich in diesen einen werfen müssen, um eine Liste der Rollen für den Benutzer zu erhalten. Wir gingen mit Entity Frameworks Code First aus dem Ansatz der bestehenden Datenbank und ziehen von diesen Tabellen. Seltsamerweise gibt es keine AspNetUserRoles-Tabelle, da ich denke, dass es sich nur um die beiden Tabellen AspNetUsers und AspNetRoles handelt. Wie auch immer, hier ist die Funktion in Frage,
[HttpGet]
[Route("GetUserRoles")]
public async Task<ApiResponse<List<RoleViewModel>>> GetUserRoles(string userName)
{
try
{
var userRoles = await (_db.AspNetUsers.FirstOrDefault(u => u.UserName == userName).AspNetRoles).ToListAsync();
}
catch (Exception ex)
{
return new ApiResponse<List<RoleViewModel>> { Success = false, Message = ex.Message };
}
}
Der aktuelle Fehler, den ich bekommen habe ist, dass AspNetRole enthält keine Definition für ToListAsync(). Ich denke, das asynchrone Zeug wirft mich ein wenig. Und schließlich ist hier der RoleViewModel als Referenz,
public class RoleViewModel
{
public string Id { get; set; }
[Required]
[StringLength(256)]
public string Name { get; set; }
}
und die ApiResponse Klasse,
public class ApiResponse<TResult>
{
public bool Success { get; set; }
public string Message { get; set; }
public TResult Result { get; set; }
}
Ich mag es fühlen sollte eine einfache Lösung sein, aber ich kann einfach nicht ganz begreifen, was es ist.
Haben Sie "using System.Data.Entity"? – tmg
Ja, das schien eine Menge von Benutzern Probleme, die ich bemerkt habe. Ich habe es gerade ausgearbeitet und meinen Code unten gepostet, danke! – tokyo0709