0

현재 주어진 사용자의 역할 목록을 얻으려고하고 있으며이를 사용중인 컨텍스트에 맞추기 위해 문제가 있습니다. 이 API 함수 이전에 사용할 수있는 모든 역할,ASP.net ID 및 웹 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 }; 
    } 

} 

하지만 사용자의 역할 목록을 얻기 위해이 일에 던질 필요가 무엇인지 알아낼 수 없습니다. 우리는 Entity Frameworks Code First with Existing Database 접근법을 사용하여 이러한 테이블을 사용하고 있습니다. 이상하게도 그것은 AspNetUserRoles 테이블이 없기 때문에 AspNetUsers와 AspNetRoles라는 두 테이블을 관련 짓고 있기 때문입니다. 어쨌든, 여기에 문제의 기능,

[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 }; 
    } 
} 

내가 점점 오전 현재 오류가 AspNetRole가) (ToListAsync에 대한 정의를 포함하지 않습니다이다. 나는 비동기적인 것들이 나를 던지고 있다고 생각한다. 그리고 마지막으로 여기 RoleViewModel는

public class RoleViewModel 
{ 
    public string Id { get; set; } 

    [Required] 
    [StringLength(256)] 
    public string Name { get; set; } 
} 

그리고 ApiResponse 클래스 참조를 위해 간단한 수정이 있어야합니다 같은 느낌

public class ApiResponse<TResult> 
{ 
    public bool Success { get; set; } 
    public string Message { get; set; } 
    public TResult Result { get; set; } 
} 

,하지만 난 그냥 아주 그것이 무엇인지 파악할 수 없습니다.

+0

"using System.Data.Entity"가 있습니까? – tmg

+0

예, 많은 사용자의 문제로 보였습니다. 나는 방금 그것을 운동하고 아래에 내 코드를 게시, 감사합니다! – tokyo0709

답변

1

내 문제에 대한 답변을 찾았습니다. 내가 놓친 주요한 일은 사용자 관리자의 활용이었습니다. 그런 다음 이미 정의한 기능에 맞게 작업해야했습니다. 여기에 코드가 있습니다.

[HttpGet] 
[Route("GetUserRoles")] 
public async Task<ApiResponse<List<RoleViewModel>>> GetUserRoles(string userName) 
{ 
    try 
    { 
     // Get the user in question 
     var aspUser = (from u in _db.AspNetUsers 
         where u.UserName == userName 
         select u).FirstOrDefaultAsync(); 

     // Check if the user was found 
     if (aspUser == null) 
     { 
      throw new Exception("User was not found"); 
     } 

     // Get the roles associated with that user 
     var userRoles = await UserManager.GetRolesAsync(aspUser.Result.Id.ToString()); 

     // Setup a RoleViewModel list of roles and iterate through userRoles adding them to the list 
     List<RoleViewModel> roleList = new List<RoleViewModel>(); 
     foreach (var u in userRoles) 
     { 
      var item = new RoleViewModel { Name = u }; 
      roleList.Add(item); 
     } 

     return new ApiResponse<List<RoleViewModel>> { Success = true, Result = roleList }; 
    } 
    catch (Exception ex) 
    { 
     return new ApiResponse<List<RoleViewModel>> { Success = false, Message = ex.Message }; 
    } 
} 
관련 문제