Inhaltsverzeichnis
Vorwort
Programmierung(AOP)" >AspektorientierteProgrammierung(AOP)
Abhängigkeitsinjektion (DI)
Spezifische Methoden
1. Benutzerklasse definieren
2. Benutzerklasse registrieren
3. In Middleware einfügen
Heim Backend-Entwicklung C#.Net-Tutorial asp.net Core verwendet DI, um ein angepasstes Benutzersystem zu implementieren

asp.net Core verwendet DI, um ein angepasstes Benutzersystem zu implementieren

May 28, 2017 am 11:41 AM
di

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     }
Nach dem Login kopieren

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         }
Nach dem Login kopieren

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     }
Nach dem Login kopieren

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


Für den Erhalt von Tokens und die Anzeige von API-Dokumenten ist keine Authentifizierung erforderlich.
 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         }
Nach dem Login kopieren

5. In Filter einfügen


Hier habe ich eine Klasse mit
 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     }
Nach dem Login kopieren
String

-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


TypeFilter wird hier verwendet, um den Filter zu laden, der die Abhängigkeitsinjektion verwendet, und kann Parameter festlegen, wie bei der Filterreihenfolge .
1 [TypeFilter(typeof(NeedAuthAttribute), Arguments = new object[]{ "bbb" }, Order = 1)]2 public class ValuesController : Controller
Nach dem Login kopieren

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


In den Konstruktor des Controllers einfügen, damit wir unsere Anpassung im Aktionsbenutzer des Controllers verwenden können wissen, welcher Benutzer diese Aktion gerade aufruft.
 1     public class ValuesController : Controller 2     { 3         private MyUser _user; 4  5         public ValuesController(MyUser user) 6         { 7             _user = user; 8         } 9         ...10     }
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So verwenden Sie char Array in C -Sprache So verwenden Sie char Array in C -Sprache Apr 03, 2025 pm 03:24 PM

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 ().

Wie man mit Sonderfiguren in der C -Sprache umgeht Wie man mit Sonderfiguren in der C -Sprache umgeht Apr 03, 2025 pm 03:18 PM

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.

Was ist die Rolle von CHAR in C -Saiten? Was ist die Rolle von CHAR in C -Saiten? Apr 03, 2025 pm 03:15 PM

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.

Wie man verschiedene Symbole in der C -Sprache verwendet Wie man verschiedene Symbole in der C -Sprache verwendet Apr 03, 2025 pm 04:48 PM

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 asynchronem C# Der Unterschied zwischen Multithreading und asynchronem C# Apr 03, 2025 pm 02:57 PM

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.

Wie man CHO in C -Sprache umwandelt Wie man CHO in C -Sprache umwandelt Apr 03, 2025 pm 03:21 PM

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.

Was ist die Funktion der C -Sprachsumme? Was ist die Funktion der C -Sprachsumme? Apr 03, 2025 pm 02:21 PM

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.

Vermeiden Sie in C -Switch -Anweisungen standardmäßige Fehler Vermeiden Sie in C -Switch -Anweisungen standardmäßige Fehler Apr 03, 2025 pm 03:45 PM

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.

See all articles