


asp.net Core verwendet DI, um ein angepasstes Benutzersystem zu implementieren
Vorwort
Tatsächlich benötigen wir oft nicht das komplexe Benutzersystem, das mit dem asp.net-Kern einhergeht, der auf Rollen basiert. Verschiedene Konzepte, und Sie müssen EF Core verwenden, und in Webanwendungen werden Informationen für die Kommunikation in Cookies gespeichert (ich mag es nicht, sie in Cookies abzulegen, weil ich die Webanwendung einmal ausgeführt habe Safari-Browser auf Mac-Systemen Wenn domänenübergreifende Cookies nicht gesetzt werden können, muss ich eine ganz spezielle Methode verwenden. Denken Sie daran, dass es sich um iframe handelt, was ziemlich mühsam ist, deshalb füge ich es immer noch gerne in den Benutzerdefiniert ein Kopfähm), ich fühle mich von Microsoft entführt, nachdem ich es verwendet habe. Dies ist jedoch eine völlig persönliche Präferenz. Ich habe hier eine andere Möglichkeit angegeben, damit Sie eine weitere Wahl haben.
Ich verwende die Abhängigkeitsinjektion von asp.net Core, um eine Reihe von Benutzerauthentifizierungen und -autorisierungen für mein eigenes System zu definieren. Sie können darauf zurückgreifen, um Ihr eigenes System zu definieren.
AspektorientierteProgrammierung(AOP)
Meiner Meinung nach sind Middleware und Filter beide Aspekte im asp.net-Kern kann an diesen beiden Stellen Authentifizierung und Autorisierung platzieren. Ich persönlich bevorzuge es, die Authentifizierung in Middleware zu platzieren, die illegale Angriffe frühzeitig abfangen und zurückweisen kann.
Abhängigkeitsinjektion (DI)
Es gibt drei Arten der Abhängigkeitsinjektion Lebenszyklus
1. Von der Initiierung bis zum Ende derselben Anfrage . (services.AddScoped)
2. Bei jeder Injektion wird es neu erstellt. (services.AddTransient)
3. Singleton, vom Anfang der Anwendung bis zum Ende der Anwendung. (services.AddSingleton)
Meine benutzerdefinierte Benutzerklasse verwendet Services.AddScoped.
Spezifische Methoden
1. Benutzerklasse definieren
1 // 用户类,随便写的2 public class MyUser3 {4 public string Token { get; set; }5 public string UserName { get; set; }6 }
2. Benutzerklasse registrieren
Startup. Die Funktion „ConfigureServices in cs:
1 // This method gets called by the runtime. Use this method to add services to the container.2 public void ConfigureServices(IServiceCollection services)3 {4 ...5 // 注册自定义用户类6 services.AddScoped(typeof(MyUser));7 ...8 }
benutzerdefinierte Benutzerklasse wird über „services.AddScoped“ registriert, weil ich möchte, dass sie in derselben Anfrage enthalten ist , Middleware, Filter und Controller verweisen auf dasselbe Objekt .
3. In Middleware einfügen
1 // You may need to install the Microsoft.AspNetCore.Http.Abstractions package into your project 2 public class AuthenticationMiddleware 3 { 4 private readonly RequestDelegate _next; 5 private IOptions<HeaderConfig> _optionsAccessor; 6 7 public AuthenticationMiddleware(RequestDelegate next, IOptions<HeaderConfig> optionsAccessor) 8 { 9 _next = next;10 _optionsAccessor = optionsAccessor;11 }12 13 public async Task Invoke(HttpContext httpContext, MyUser user)14 {15 var token = httpContext.Request.Headers[_optionsAccessor.Value.AuthHeader].FirstOrDefault();16 if (!IsValidate(token))17 {18 httpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden;19 httpContext.Response.ContentType = "text/plain";20 await httpContext.Response.WriteAsync("UnAuthentication");21 }22 else23 {24 // 设置用户的token25 user.Token = token;26 await _next(httpContext);27 }28 }29 30 // 随便写的,大家可以加入些加密,解密的来判断合法性,大家自由发挥31 private bool IsValidate(string token)32 {33 return !string.IsNullOrEmpty(token);34 }35 }36 37 // Extension method used to add the middleware to the HTTP request pipeline.38 public static class AuthenticationMiddlewareExtensions39 {40 public static IApplicationBuilder UseAuthenticationMiddleware(this IApplicationBuilder builder)41 {42 return builder.UseMiddleware<AuthenticationMiddleware>();43 }44 }
Ich habe das gefunden, wenn ich die Schnittstelle/Klasse in Middleware injizieren möchte Auf bereichsbezogene Weise müssen Sie die Klasse/Schnittstelle, die injiziert werden soll, in den -Parameter der Funktion Invoke anstelle von Konstrukt der Middleware-Funktion , ich vermute, das ist auch der Grund, warum Middleware nicht die Basisklasse oder Schnittstelle erbt und Invoke in der Basisklasse oder Schnittstelle definiert Die Parameter dieser Invoke-Klasse oder -Schnittstelle müssen zwangsläufig festgelegt werden, sodass die Abhängigkeitsinjektion nicht einfach ist. 4. Konfigurieren Sie bestimmte Pfade für die Verwendung der Middleware
1 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 2 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 3 { 4 loggerFactory.AddConsole(Configuration.GetSection("Logging")); 5 loggerFactory.AddDebug(); 6 // Set up nlog 7 loggerFactory.AddNLog(); 8 app.AddNLogWeb(); 9 10 // 除了特殊路径外,都需要加上认证的Middleware11 app.MapWhen(context => !context.Request.Path.StartsWithSegments("/api/token")12 && !context.Request.Path.StartsWithSegments("/swagger"), x =>13 {14 // 使用自定义的Middleware15 x.UseAuthenticationMiddleware();16 // 使用通用的Middleware17 ConfigCommonMiddleware(x);18 });19 // 使用通用的Middleware20 ConfigCommonMiddleware(app);21 22 // Enable middleware to serve generated Swagger as a JSON endpoint.23 app.UseSwagger();24 25 // Enable middleware to serve swagger-ui (HTML, JS, CSS etc.), specifying the Swagger JSON endpoint.26 app.UseSwaggerUI(c =>27 {28 c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");29 });30 }31 32 // 配置通用的Middleware33 private void ConfigCommonMiddleware(IApplicationBuilder app)34 {35 // cors36 app.UseCors("AllowAll");37 38 app.UseExceptionMiddleware();39 // app.UseLogRequestMiddleware();40 app.UseMvc();41 }
5. In Filter einfügen
1 public class NeedAuthAttribute : ActionFilterAttribute 2 { 3 private string _name = string.Empty; 4 private MyUser _user; 5 6 public NeedAuthAttribute(MyUser user, string name = "") 7 { 8 _name = name; 9 _user = user;10 }11 12 public override void OnActionExecuting(ActionExecutingContext context)13 {14 this._user.UserName = "aaa";15 }16 }
-Parametern erstellt, da dies möglicherweise der Fall ist wiederverwendet, z. B. Beschränkung des Zugriffs auf eine bestimmte Schnittstelle nur für einen bestimmten Benutzer. In dieser Zeichenfolge kann die Identifikation eines bestimmten Benutzers gespeichert werden. Filter kann auch Datenbankzugriffsklassen einfügen, sodass wir die entsprechenden Benutzerinformationen über Token in der Datenbank abrufen können.
6. Filter verwenden
1 [TypeFilter(typeof(NeedAuthAttribute), Arguments = new object[]{ "bbb" }, Order = 1)]2 public class ValuesController : Controller
Die standardmäßige Filterreihenfolge ist „Globale Einstellungen->Controller->Aktion“, und die Reihenfolge ist standardmäßig 0. Wir können diese Reihenfolge ändern, indem wir „Reihenfolge“ festlegen.
7. In den Controller einfügen
1 public class ValuesController : Controller 2 { 3 private MyUser _user; 4 5 public ValuesController(MyUser user) 6 { 7 _user = user; 8 } 9 ...10 }
Das obige ist der detaillierte Inhalt vonasp.net Core verwendet DI, um ein angepasstes Benutzersystem zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Das Char -Array speichert Zeichensequenzen in der C -Sprache und wird als char Array_name [Größe] deklariert. Das Zugriffselement wird durch den Einweisoperator weitergeleitet, und das Element endet mit dem Null -Terminator '\ 0', der den Endpunkt der Zeichenfolge darstellt. Die C -Sprache bietet eine Vielzahl von String -Manipulationsfunktionen wie Strlen (), Strcpy (), Strcat () und strcmp ().

In der C -Sprache werden Sonderzeichen durch Escape -Sequenzen verarbeitet, wie z. B.: \ n repräsentiert Linienbrüche. \ t bedeutet tab charakter. Verwenden Sie Escape -Sequenzen oder Zeichenkonstanten, um Sonderzeichen darzustellen, wie z. B. char c = '\ n'. Beachten Sie, dass der Backslash zweimal entkommen muss. Verschiedene Plattformen und Compiler haben möglicherweise unterschiedliche Fluchtsequenzen. Bitte wenden Sie sich an die Dokumentation.

In C wird der Zeichenentyp in Saiten verwendet: 1. Speichern Sie ein einzelnes Zeichen; 2. Verwenden Sie ein Array, um eine Zeichenfolge darzustellen und mit einem Null -Terminator zu enden. 3. Durch eine Saitenbetriebsfunktion arbeiten; 4. Lesen oder geben Sie eine Zeichenfolge von der Tastatur aus.

Die Nutzungsmethoden von Symbolen in der C-Sprachabdeckung Arithmetik, Zuordnung, Bedingungen, Logik, Bitoperatoren usw. werden für grundlegende mathematische Operationen verwendet, Zuordnungsoperatoren werden zur Zuordnung und Addition verwendet, Subtraktion, Multiplikationszuordnung und Abteilungszuweisung, Zustandsbetreiber werden für Unterschiede verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Zeiger, Markierungen am Ende der Datei und nicht numerische Werte.

Der Unterschied zwischen Multithreading und Asynchron besteht darin, dass Multithreading gleichzeitig mehrere Threads ausführt, während asynchron Operationen ausführt, ohne den aktuellen Thread zu blockieren. Multithreading wird für rechenintensive Aufgaben verwendet, während asynchron für die Benutzerinteraktion verwendet wird. Der Vorteil des Multi-Threading besteht darin, die Rechenleistung zu verbessern, während der Vorteil von Asynchron nicht darin besteht, UI-Threads zu blockieren. Die Auswahl von Multithreading oder Asynchron ist von der Art der Aufgabe abhängt: Berechnungsintensive Aufgaben verwenden Multithreading, Aufgaben, die mit externen Ressourcen interagieren und die UI-Reaktionsfähigkeit asynchron verwenden müssen.

In der C -Sprache kann die char -Typ -Konvertierung direkt in einen anderen Typ konvertiert werden, wenn: Casting: Verwenden von Casting -Zeichen. Automatische Konvertierung des Typs: Wenn ein Datentyp einen anderen Werttyp berücksichtigen kann, wandelt der Compiler diese automatisch um.

Es gibt keine integrierte Summenfunktion in der C-Sprache, daher muss sie selbst geschrieben werden. Die Summe kann erreicht werden, indem das Array durchquert und Elemente akkumulieren: Schleifenversion: Die Summe wird für die Schleifen- und Arraylänge berechnet. Zeigerversion: Verwenden Sie Zeiger, um auf Array-Elemente zu verweisen, und eine effiziente Summierung wird durch Selbststillstandszeiger erzielt. Dynamisch Array -Array -Version zuweisen: Zuordnen Sie Arrays dynamisch und verwalten Sie selbst den Speicher selbst, um sicherzustellen, dass der zugewiesene Speicher befreit wird, um Speicherlecks zu verhindern.

Eine Strategie zur Vermeidung von Fehlern, die in C -Switch -Anweisungen standardmäßig verursacht wurden: Verwenden Sie die Umgebungen anstelle von Konstanten, wodurch der Wert der Fallerklärung auf ein gültiges Mitglied des Enum beschränkt wird. Verwenden Sie in der letzten Fallanweisung Falsch, um das Programm weiterhin den folgenden Code auszuführen. Fügen Sie für Switch -Anweisungen ohne Falle immer eine Standardanweisung für die Fehlerbehandlung hinzu oder geben Sie das Standardverhalten an.
