#

 

 

Ich benötige zur Laufzeit in Asp.net im Controller einige Angeben zum aktuellen User.

Dabei habe ich die User-Tabelle von Microsoft Identity Authorization um einige eigenen Daten erweitert.

Wie kann ich die Daten zur Laufzeit abfragen?

 

C# Code-Example

//--< Get User ID >--

string Id_of_AspNetUser = Common.ExtensionMethods.getUserId(this.User);

 

var User = await _context.Users.SingleOrDefaultAsync(m => m.Id == Id_of_AspNetUser );

if (User == null)

{

    return NotFound();

}

//*check User-stuff

//*like IDUser:1

Int64 IDUser = User.IDUser; //internal referenz-Number for tracking in tables

//--</ Get User ID >--

 

Im ersten Schritt benötigt man die Asp.Net Identity Id des Users. Diese ID ist eine GUID mit der Zeichenlänge von 450 Zeichen.

Man kann diese Guid-ID Nummer ermitteln mit der Methode getUserId(this.User). der Code hierzu ist im Anhang.

string Id_of_AspNetUser = Common.ExtensionMethods.getUserId(this.User);

 

Anschliessend holt man aus dem DB-Context die User Tabelle. Diese User-Tabelle wird automatisch integriert, wenn man das Asp.Net Authorize Identity Modell zum Projekt hinzufügt.

Man kann die Daten direkt aus der User-Tabelle holen mit:

//--< Get User ID >--

 

var User = await _context.Users.SingleOrDefaultAsync(m => m.Id == Id_of_AspNetUser );

if (User == null)

{

    return NotFound();

}

//*check User-stuff

//*like IDUser:1

Int64 IDUser = User.IDUser; //internal referenz-Number for tracking in tables

//--</ Get User ID >--

 

Die hieraus ermittelte IDUser ist eine auto-inkrementelle Nummer von 1 fortlaufend.

 

Warum benötigt man für Anwendung eine sequentielle, fortlaufende Nummer für den User ?

Wenn man große Tabellen mit bezug zu Usern erstellt, dann dauert der Suchvorgang von Daten des Users um das 450ig fache der Laufzeit, da die ID als Text ermittelt werden muss.

Man ersetzt deshalb die Referenz vom User.Id 450-Zeichen zu einem IDUser Verweis als bigint oder integer.

 

 

Erweiterung mit GetUserID

Hierzu muss man eine allgemeine Klasse in die asp Anwendung einfügen, mit folgendem Code

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading.Tasks;

//< Using >

using System.Security.Claims;

//</ Using >

 

namespace YourAspProject.Common

{

    public static class ExtensionMethods

    {

        //-------------< Class: ExtensionMethods >-------------

        public static string getUserId(this ClaimsPrincipal user)

        {

            //------------< getUserId(User) >------------

            //*returns the current UserID

            if (!user.Identity.IsAuthenticated)

                return null;

            

            ClaimsPrincipal currentUser = user;

            

            //< output >

            return currentUser.FindFirst(ClaimTypes.NameIdentifier).Value;

            //</ output >

            //------------</ getUserId(User) >------------

        }

        //-------------</ Class: ExtensionMethods >-------------

    }

}

 

 

 

 

Erweiterung der Asp.Net Identity User-Tabelle

Hierzu in der Anwendung die Tabelle AspNetUsers erweitern mit einer IDUser Spalte.

 

Man kann direkt im SQL Server Express Edition eine Spalte einfügen und diese als Identity mit Inkrementell 1 einfügen.

TABLE [dbo].[AspNetUsers](

          [Id] [nvarchar](450) NOT NULL,

          [IDUser] [bigint] IDENTITY(1,1) NOT NULL,

          [AccessFailedCount] [int] NOT NULL,

          [ConcurrencyStamp] [nvarchar](max) NULL,

          [Email] [nvarchar](256) NULL,

          [EmailConfirmed] [bit] NOT NULL,

          [LockoutEnabled] [bit] NOT NULL,

          [LockoutEnd] [datetimeoffset](7) NULL,

          [NormalizedEmail] [nvarchar](256) NULL,

          [NormalizedUserName] [nvarchar](256) NULL,

          [PasswordHash] [nvarchar](max) NULL,

          [PhoneNumber] [nvarchar](max) NULL,

          [PhoneNumberConfirmed] [bit] NOT NULL,

          [SecurityStamp] [nvarchar](max) NULL,

          [TwoFactorEnabled] [bit] NOT NULL,

          [UserName] [nvarchar](256) NULL,

..

 

 

 

Mobile

.

0123movie.net