Benutzer mit den meisten Antworten
Where Abfrage nach UserId

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
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!
- Als Antwort markiert Paul_412 Donnerstag, 22. Juni 2017 22:13
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!
- Als Antwort markiert Paul_412 Donnerstag, 22. Juni 2017 22:13
-
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!
-
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. -
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