2017-11-24 3 views
-2

Ich habe Problem beim Laden von Benutzerobjekt mit FindByIdAsync (FindByIdEmailAsync, FindByNameAsync funktioniert auch nicht in diesem speziellen Fall). FindByIdAsync gibt null zurück.FindByIdAsync gibt null Benutzerobjekt, Dotnet-Core 2.0

IdentityController.cs

public class IdentityController : Controller 
{ 
    private readonly UserManager<ApplicationUser> userManager; 
    private readonly IIdentityService identity; 
    private readonly RoleManager<IdentityRole> roleManager; 

    public IdentityController(UserManager<ApplicationUser> userManager, 
           IIdentityService identity, 
           RoleManager<IdentityRole> roleManager) 
    { 
     this.userManager = userManager; 
     this.identity = identity; 
     this.roleManager = roleManager; 
    } 


    public async Task<IActionResult> Roles(string id) 
    { 
     var user = await this.userManager.FindByIdAsync(id); 

     var u = this.userManager.GetUserId(User); 

     if (user == null) 
     { 
      return NotFound(); 
     }  
    .... 

Der Benutzer in der Datenbank ist: user in database und Benutzer-ID an die Controller-Aktion übergeben wird: Debuger

haben eine Art Spielplatz mit neuen Standard VS2017 ASP versucht. NET Core MVC Vorlage und fügte nur FindByIdAsync auf Über und es funktioniert.

Dank

+1

Wo ist Pascal 'User' von in dieser Zeile kommt' this.userManager.GetUserId (Benutzer) '? Sollte es stattdessen "Benutzer" sein? – CalC

+0

Benutzer Cumming von ControllerBase. Aber diese Zeile ist nicht auf das Problem bezogen, nur für die Überprüfung kann UserId diesen Weg bekommen. Das Problem war, dass die Parameter-ID aufgrund meines Fehlers in der Razor-Vorlage falsch mit {} umbrochen wurde. Danke, dass Dave Cousineau es gesehen hat. –

Antwort

1

nach Ihren Vorstellungen, Ihre id Zeichenfolge in { und } Symbolen eingewickelt, aber das ist nicht die Zeichenfolge, die in der Datenbank ist. Ich bemerke auch, dass der Wert, den du von GetUserId zurückbekommst, nicht in Klammern eingeschlossen ist. Entweder analysieren Sie die geschweiften Klammern von id, oder verwenden Sie den Wert u, oder übergeben Sie den richtigen Wert an Roles.

Ex:

public async Task<IActionResult> Roles(string id) 
{ 
    if (id.Length > 0 && id[0] == '{') 
     id = id.Substring(1, id.Length - 2); 

    var user = await this.userManager.FindByIdAsync(id); 

    var u = this.userManager.GetUserId(User); 

    if (user == null) 
    { 
     return NotFound(); 
    }  
.... 
+0

Danke !!! Was für ein dummer Fehler. Falsche Razor-Vorlage, die die Parameter-Benutzer-ID mit {} übergibt. vielen dank noch einmal. –

Verwandte Themen