none
Where Abfrage nach UserId RRS feed

  • Frage

  • Hallo Leute,

    verwende CORE MVC mit AspNetCore.Identity.
    In den Views kann ich mir mit 

    @UserManager.GetUserId(User)

    Die UserId anzeigen lassen.

    Jetzt möchte ich in einen Controller Datensätze nach UserId selektieren.
    Wenn ich die entsprechende UserId in den Code schreibe funktioniert es.

    from m in x412Context where m.UserId == 1
    select m;

    Ich schaffe es aber nicht die UserId dynamisch auszulesen.

    Hat jemand eine Ahnung wie das geht?

    Danke
    Paul

    Donnerstag, 22. Juni 2017 12:53

Antworten

  • Hallo Paul,

    so solltes es gehen

    var sid = User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier);
    Die UserId sollte aber eigentlich ein string sein


    Gruß, Thomas

    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!

    Icon für UWP

    • Als Antwort markiert Paul_412 Donnerstag, 22. Juni 2017 22:13
    Donnerstag, 22. Juni 2017 14:56
  • Danke Thomas,
    habe die Lösung gefunden.

    var sid = User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier).Value;

    Gruß
    Paul

    • Als Antwort markiert Paul_412 Donnerstag, 22. Juni 2017 22:13
    Donnerstag, 22. Juni 2017 22:12

Alle Antworten

  • Hallo Paul,

    so solltes es gehen

    var sid = User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier);
    Die UserId sollte aber eigentlich ein string sein


    Gruß, Thomas

    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!

    Icon für UWP

    • Als Antwort markiert Paul_412 Donnerstag, 22. Juni 2017 22:13
    Donnerstag, 22. Juni 2017 14:56
  • Hallo Thomas,

    UserId ist bei uns aber ein int Wert.
    Kann man diesen auch auslesen oder konvertieren?

    Gruß
    Paul

    Donnerstag, 22. Juni 2017 15:21
  • Es ist immer sicherer einen string und ein Guid zu nehmen.

    Wenn Du dich nicht an den Standard halten willst muss Du eigene Methoden bereitstellen.

    Du kannst natürlich ein Model mit Entity Framework von der User DB erstellen. Anstatt dann mit der UserId könntest Du auch mit dem UserName arbeiten und damit deine Anfragen stellen. An den UserName kommt man auch ganz einfach über User.Identity.Name.

    Ganz ehrlich würde ich dir aber davon abraten und erstmal im Standard bleiben, bis Du das System genau kennst


    Gruß, Thomas

    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!

    Icon für UWP

    Donnerstag, 22. Juni 2017 18:35
  • Hallo Thomas,

    habe das jetzt geändert und die UserId ist ein string Wert.
    Wenn ich jetzt deine Variable einfüge.

    var sid = User.FindFirstSystem.Security.Claims.ClaimTypes.NameIdentifier);
    var x412Context = _context.Projektstatus;
    var sorting = from m in x412Context
                  where m.UserId = sid
                  select m;

    Wird mir bei where m.UserId = sid die Variable sid mit einer roten Wellenlinie unterlegt.

    Die Fehlermeldung dazu ist:
    Der Typ "System.Security.Claims" kann nicht implizit in "string" konvertiert werden.

    Donnerstag, 22. Juni 2017 21:52
  • Danke Thomas,
    habe die Lösung gefunden.

    var sid = User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier).Value;

    Gruß
    Paul

    • Als Antwort markiert Paul_412 Donnerstag, 22. Juni 2017 22:13
    Donnerstag, 22. Juni 2017 22:12
  • Hallo Paul,

    bedenke aber den Fall, dass evtl. FindFirst keinen Wert zurückgibt. In dem Fall wird eine Exception ausgelöst.

    Ggfs. also zuerst den User auslesen und nur wenn der gefunden wurde, weitermachen.

    var user = User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier);
    
    if( user != null ) {
        var sid = user.Value;
        ...
    }
    


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Sonntag, 25. Juni 2017 11:17
    Moderator
  • Danke
    Montag, 26. Juni 2017 15:48