Vollständige ASP. NET 5 Web-API-Entwicklung | Trevoir Williams | Skillshare

Playback-Geschwindigkeit


1.0x


  • 0.5x
  • 0.75x
  • 1x (normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Vollständige ASP. NET 5 Web-API-Entwicklung

teacher avatar Trevoir Williams, Jamaican Software Engineer

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

    • 1.

      Einführung

      3:49

    • 2.

      Installieren Sie Visual Studio 2019 Community Edition und . Net 5 SDK

      6:46

    • 3.

      UPDATE: Installiere Visual Studio 2022 Community Edition und . NET 6

      2:16

    • 4.

      GitHub-Konto einrichten

      2:28

    • 5.

      Installiere und erforsche PostMan

      9:39

    • 6.

      Web-API-Projekt erstellen und erkunden

      7:55

    • 7.

      UPDATE - Upgrade auf . NET 6

      3:12

    • 8.

      Protokollierung mit SeriLog konfigurieren

      14:17

    • 9.

      Swagger-Benutzeroberfläche erkunden

      10:48

    • 10.

      CORS-Konfiguration

      6:40

    • 11.

      Änderungen auf GitHub überprüfen und hinzufügen

      4:39

    • 12.

      Datenklassen und Entity Framework implementieren

      26:12

    • 13.

      Seed-Daten in Tabellen

      8:10

    • 14.

      Einrichtungsdienst-Repositorys und Abhängigkeitsinjektion

      31:30

    • 15.

      UPDATE - Stark Typ Includes für Einheit der Arbeit eingeben

      6:08

    • 16.

      AutoMapper und DTOs einrichten

      21:20

    • 17.

      Änderungen auf GitHub überprüfen und hinzufügen

      3:28

    • 18.

      Übersicht - Einrichten von GET-Endpunkten

      4:49

    • 19.

      GET-Endpunkt aufbauen

      26:42

    • 20.

      GET nach Id-Endpunkt aufbauen

      9:33

    • 21.

      GET-Endpunkte für Hotels einrichten

      4:03

    • 22.

      Letzte Berührungen und Änderungen zu GitHub hinzufügen

      0:48

    • 23.

      Deine API sichern - Abschnittsübersicht

      6:52

    • 24.

      Benutzeridentitätskern einrichten

      13:39

    • 25.

      Benutzerregistrierungsendpunkt

      30:19

    • 26.

      WICHTIG - Benutzerregistrierungsendpunktkorrektur

      0:56

    • 27.

      Benutzerrollen hinzufügen

      10:37

    • 28.

      JSON-Web-Token (JWT) erkunden

      5:10

    • 29.

      JWT-Authentifizierung implementieren

      31:39

    • 30.

      Endpunkte schützen

      8:11

    • 31.

      Änderungen auf GitHub überprüfen und hinzufügen

      0:22

    • 32.

      POST-Endpunkt konstruieren

      13:35

    • 33.

      PUT-Endpunkt konstruieren

      23:38

    • 34.

      DELETE-Endpunkt aufbauen

      7:24

    • 35.

      Änderungen auf GitHub überprüfen und hinzufügen

      0:44

    • 36.

      Mehrwertfunktionen - Abschnittsübersicht

      1:16

    • 37.

      Paging implementieren

      17:51

    • 38.

      Globale Fehlerbehandlung

      11:25

    • 39.

      API-Versionierung implementieren

      12:38

    • 40.

      Caching implementieren

      13:49

    • 41.

      Ratenbegrenzung und Drosselung

      7:15

    • 42.

      Änderungen auf GitHub überprüfen und hinzufügen

      3:24

    • 43.

      Architekturänderungen - Abschnittsübersicht

      2:17

    • 44.

      Datenmodelle einrichten Projekt

      7:24

    • 45.

      Anwendung einrichten Kernprojekt

      10:50

    • 46.

      Bereinigen und testen

      15:25

    • 47.

      Änderungen und Vorteile überprüfen

      15:00

    • 48.

      Hosting-Umgebung konfigurieren - IIS und SQL Server

      6:39

    • 49.

      Anwendung in IIS und SQL Server veröffentlichen

      24:58

    • 50.

      Microsoft Azure-Konto erstellen

      7:12

    • 51.

      Anwendung und Datenbank in Microsoft Azure bereitstellen

      17:27

  • --
  • Anfänger-Niveau
  • Fortgeschrittenes Niveau
  • Fortgeschrittenes Niveau
  • Jedes Niveau

Von der Community generiert

Das Niveau wird anhand der mehrheitlichen Meinung der Teilnehmer:innen bestimmt, die diesen Kurs bewertet haben. Bis das Feedback von mindestens 5 Teilnehmer:innen eingegangen ist, wird die Empfehlung der Kursleiter:innen angezeigt.

303

Teilnehmer:innen

--

Projekt

Über diesen Kurs

Übersicht

Erfahren Sie, wie Sie eine RESTful-API mit ASP.Net Core API, Entity Framework und Praktiken für Unternehmen für eine skalierbare und zukunftssichere Web-API-Lösung erstellen können. Wir werden verschiedene Support-Tools für die Protokollierung, Dokumentation, Sicherheit und Fehlerbehandlung implementieren.

ASP.NET Core basierend auf dem neuen . NET 5-Laufzeit ist Microsofts modernes, plattformübergreifendes Framework zum Erstellen unternehmensfähiger Webanwendungen. In diesem Kurs lernst du alles, was du zum Erstellen einer RESTful-API mit wissen musst. NET 5, vom Verständnis der Ordnerstruktur und der Dateien bis zum Erstellen und Bereitstellen einer vollständigen Web-API.

Warum ASP.NET Core lernen / . NET 5

Microsoft . NET ist die Plattform, die die Geschäftstechnologie vieler der Top-Unternehmen in den Vereinigten Staaten und vielen anderen Ländern antreibt. Es ist die vorherrschende Technologie, die verwendet wird, um Unternehmenstechnologie auf Unternehmensebene zu fördern. Unternehmen haben sich entschieden. NET weil für seine bewährte Skalierbarkeit, Zuverlässigkeit und Unterstützung.

Das . Die zum Erlernen bevorzugte NET-Sprache ist C#, da es zu den am häufigsten verwendeten Sprachen gehört. Es ist eine Allzweck-Programmiersprache, die fast jedes Problem behandeln kann, vom Desktop über mobile bis zu dynamischen Webanwendungen. Daher gibt es auf der ganzen Welt eine hohe Nachfrage nach . NET-Entwickler in einer Vielzahl von Branchen, bedeutet das, dass mehr Jobs für Kandidaten mit einer Grundlage verfügbar sind, auf der du aufbauen kannst. NET-Technologien.

Warum lernen, eine API aufzubauen

Das Akronym API bedeutet Anwendungsprogrammierschnittstelle. Die Fähigkeit, eine API zu entwerfen und zu warten, ist ein wichtiges Toolset für den modernen Webentwickler. Es ermöglicht Ihnen, die Zugänglichkeit Ihrer Software auf externe Anwendungen und andere Entwickler zu erweitern, was zu einer globaleren Softwarelösung führt.

Eine starke Grundlage aufbauen in . NET Core / . NET 5-Programmierung:

  • Baue eine vollständig datengesteuerte REST-Web-API mit modernster Technologie auf

  • Erstellen einer Datenbank mit Entity Framework Core

  • Arbeitseinheit und generisches Repository-Muster

  • Abhängigkeitsinjektion

  • Protokollierung mit SeriLog einrichten

  • API-Dokumentation mit SwaggerUI einrichten

  • Die REST-Entwurfsprinzipien verstehen

  • C# 9 und . Net Core-Websyntax

  • Benutzerauthentifizierung mit JWT (JSON-Web-Token) verstehen

  • Verstehen, wie du Datenübertragungsobjekte (DTOs) und AutoMapper verwendest

  • Pakete mit NuGet Manager verwalten

  • Verstehe. NET 5-Workflows, Tools und Anwendungsentwicklung

  • GitHub für die Quellenkontrolle einrichten

  • Anwendungen und Datenbank in Microsoft Azure bereitstellen

Inhalt und Übersicht

Um an diesem Kurs teilzunehmen, musst du einige Kenntnisse in objektorientierter Programmierung haben, wenn nicht C#. Selbst wenn du nicht viel Belichtung für die . NET-Entwicklungsstapel. Dieser Kurs ist sehr anfängerfreundlich und voller Entwicklungstipps.

Dies ist ein riesiger Kurs. Über 8 Stunden Premium-Inhalte, aber intelligent aufgeteilt, um eine Reihe verwandter Aktivitäten basierend auf jedem Modul in der Anwendung, die erstellt wird, hervorzuheben. Wir werden uns auch mit der Fehlerbehebung und Fehlerbehebung beschäftigen, bewährte Methoden implementieren, effiziente Logik schreiben und verstehen, warum Entwickler die Dinge so tun, wie sie es tun. Dein Wissen wird während des Kurses Schritt für Schritt wachsen, und du wirst herausgefordert, das Beste zu sein, das du sein kannst.

Wir machen die Dinge beim ersten Mal nicht auf die perfekte Weise; das ist nicht die Realität des Schreibens von Code. Wir machen Fehler und weisen darauf hin, und beheben sie um sie herum. Auf diese Weise entwickeln wir Kenntnisse in der Verwendung von Debugging-Tools und -Techniken. Wenn du den Kurs beendet hast, hast du dich in Visual Studio bewegt und Logik- und Syntaxfehler so sehr untersucht, dass es dir bei der Arbeit in Visual Studio zur Selbstverständlichkeit wird. NET-Umgebung. Dadurch werden deine neuen erlernten Fähigkeiten in die Praxis umgesetzt und deinen Chef und Kollegen beeindruckt.

Triff deine:n Kursleiter:in

Teacher Profile Image

Trevoir Williams

Jamaican Software Engineer

Kursleiter:in
Level: All Levels

Kursbewertung

Erwartungen erfüllt?
    Voll und ganz!
  • 0%
  • Ja
  • 0%
  • Teils teils
  • 0%
  • Eher nicht
  • 0%

Warum lohnt sich eine Mitgliedschaft bei Skillshare?

Nimm an prämierten Skillshare Original-Kursen teil

Jeder Kurs setzt sich aus kurzen Einheiten und praktischen Übungsprojekten zusammen

Mit deiner Mitgliedschaft unterstützt du die Kursleiter:innen auf Skillshare

Lerne von überall aus

Ob auf dem Weg zur Arbeit, zur Uni oder im Flieger - streame oder lade Kurse herunter mit der Skillshare-App und lerne, wo auch immer du möchtest.

Transkripte

1. EINFÜHRUNG: Hey Leute, ich wollte mir diese Zeit nehmen, um euch zu diesem neuen Kurs, ultimative ASP.Net fünf Web API Development Guide, begrüßen zu dürfen. Nun, es ist Typ ist ein mehrere Bots. Ich kann Ihnen versichern, dass der Inhalt kürzere Leben bis zum Gebäude. In diesem Kurs erfahren Sie, wie Sie eine wartbare Web-API mit ASP.Net five erstellen, die die neueste und größte und Microsoft und Entwicklung stecken Entity Framework. Und wir werden viele Entwurfsmuster auf Unternehmensebenezu Überlegungen untersuchen viele Entwurfsmuster auf Unternehmensebene , wenn es um Design und API geht. Ich bin Ihr Dozent für diesen Kurs. Mein Name ist wahr. Wer sind Williams? Ich bin Software-Ingenieur und Teilzeit-Dozenten. Lassen Sie uns untersuchen, was eine API ist, die Buchstaben AP und die IR, kurz für Application Programming Interface. So ziemlich eine API ist eine Software-Schnittstelle, die als Vermittler zwischen zwei Anwendungen fungiert. Nehmen wir an, Sie können Facebook-ähnliche Funktionalitäten von einer App aus zugreifen , die keine Facebook-App ist. Das hat also die Spitze zu Facebook und ermöglicht es Ihnen, Facebook Live-Dinge zu tun. Nun, das ist die Kommunikation mit Facebook über eine API. In diesem Kurs werden wir lernen, wie man diese Art von Schnittstelle erstellt, um Personen den Zugriff auf einen zugrunde liegenden Datenspeicher zu ermöglichen , den wir erstellen werden. Mit den Funktionen, die wir erstellen werden , verwenden Clients, die sie erstellen müssen, egal ob es sich um ein Mobiltelefon oder ein Web oder eine andere Art von Gerät handelt. APIs oder zumindest die Art der API, die wir erstellen werden , basieren auf den restlichen Prinzipien. So werden wir Handgelenk lernen und kurz für repräsentativen Staatstransfer verhaftet. Es ist ein sehr beliebter Web-API-Standard und wird auf vielen Plattformen verwendet. Obwohl wir also die API mit .net core erstellen werden, kann die API von Clients aus vielen anderen Entwicklungsstacks verbraucht werden. Darüber hinaus werden wir lernen, wie man Dominic Core fünf verwendet, wir werden uns ansehen, um die Dienste zu verstehen und oh, der gesamte Anwendungsfluss funktioniert. Und wir werden uns auch mit der Verwendung von heißeren Unternehmensebene beschäftigen. So Best Practices, die wir in den Code setzen können, so dass, wenn wir bereit sind zu expandieren, sei es durch unsere eigene Selbstfindung oder in einem Unternehmensumfeld. , müssen wir nicht zu viel von unserer Bewerbung heranziehen. Nun, wir können einfach auf Komponenten klopfen, während wir weitergehen. Kurz gesagt, Sie werden ASP.Net five und Entity Framework Vorwärtswind lernen , um zuerst Zitat zu verwenden, es ist erstaunliche Entwicklung und Erkundung. Wieder einmal werden Schlüsselcodierungsmuster die API-Authentifizierung mit JSON-Web-Token betrachten , sind JWT für Kurzstreckenflüge, wir können sie höher als unsere Endpunkte schützen und sie vor unbefugtem oder unerwünschtem Zugriff schützen. Wir werden uns das Verständnis der Dark Net Core-Service-Pipeline ansehen und alles, was wir erweitern und unsere eigene Middleware einsetzen können, haben uns API-Tests und Protokollierung nüchtern mit Postman und seriellen Out für unsere API-Tests ansehen und Protokollierungszwecke respektvoll, und wir werden auch auf ganze swagger suchen kann eine Rolle bei der Dokumentation unserer API spielen und auch bei der künstlerischen Quellenkontrolle helfen. Wir werden GitHub verwenden, damit wir sicher speichern oder codieren können und in der Lage sein, zurückzusetzen, wenn wir es brauchen. Und dann schauen wir uns an, nachdem wir auf all diese wunderbaren Dinge aufbauen, wie genau wir erlauben, auf unsere API zuzugreifen, sei es in einem Unternehmen oder von der Welt. Nun, dieser Kurs hat einen ruhigen Platz, der jemand bestreitet. Es ist etwa zehn Stunden lang und Sie werden eine Menge Dinge lernen. Also sperrig, mach dich bereit für diese Reise und ich bin sehr aufgeregt, dich dabei zu haben. 2. Visual Studio 2019 Community Edition und . Net 5 SDK: Hey Leute, heute werden wir mit der Installation von Visual Studio Community Edition und.net five beginnen . Jetzt beginnt unsere Reise hier auf der Visual Studio-Website, die Sie über eine einfache Google-Suche gelangen können. Oder Sie können versuchen, diese URL zu reproduzieren, die Visual Studio dot microsoft.com Slash VS Schrägstrich Community ist. Jetzt gibt es verschiedene Ergänzungen von Visual Studio. Und Community ist diejenige, die ist, es ist kostenlos für den individuellen Gebrauch und das ist diejenige, die wir verwenden werden. Sie können also Visual Studio herunterladen, das Ihnen den Visual Studio-Installer bietet. Und sobald das abgeschlossen ist, können wir fortfahren und diese Datei ausführen. Wir werfen die Sicherheitskontrollen ein, die Sie möglicherweise haben, aber Sie können fortfahren, damit das Installationsprogramm beginnen kann. Und all dies ist, wo Sie tatsächlich definieren, wozu Visual Studio fähig sein wird. Diese werden also Workloads genannt, und jede Arbeitslast stellt Ihnen einen anderen Featuresatz zur Verfügung. Für die Webentwicklung möchten Sie also die ASP.NET- und Webentwicklungsworkload abrufen. Für die Desktop-Entwicklung. Sie möchten die Net-Desktop-Entwicklung oder Upload erhalten. Und für jedes andere SDK oder jede Art von Projekt, die Sie entwickeln möchten, können Sie fortfahren und die damit verbundene Arbeitslast erhalten. Nein, für diese Übung wollen wir unser Ergebnisstudio mit den notwendigen Ressourcen für die Webentwicklung vorbereiten. Wieder einmal können Sie fortfahren und so viele dieser Arbeitslasten übernehmen. Jeder wird mit seiner eigenen Größe kommen und es sagt Ihnen wie viel Platz benötigt wird, basierend auf den, die Sie auswählen. Aber zumindest für die Webentwicklung möchten Sie sicherstellen, dass Sie ASP.Net und Web-Entwicklung angekreuzt haben. Sie können weitermachen und die anderen Entwicklungstools nutzen, wenn Sie möchten. Aber ich bin nicht bereit, das zu tun, weil dies all.net Framework 644.84.6 sind , sorry, 4.74.8. Aber wir werden Dokument fünf in ein paar Minuten installieren, damit Sie dies tun und Visual Studio installieren können. Dies wird eine Weile dauern, so dass Sie eine Tasse Kaffee nehmen und zurückkommen können. Sobald der Download und die Installation abgeschlossen ist, haben Sie zwei Möglichkeiten. Sie können fortfahren und sich anmelden. Und Zeichen bedeutet, dass Sie sich mit Ihren lebenden Kegel anmelden. Wenn Sie einen haben, wenn nicht, dann machen Sie voran und erstellen Sie einen. Es ist kostenlos und es macht das Leben einfacher, wenn Sie nur eine erstellen und sich tatsächlich anmelden. Aber ich werde einfach mit einer nicht null vielleicht spätere Option fortfahren. Und dann wählen Sie Ihre allgemeinen Einstellungen. So beleuchte ich das dunkle Thema und Sie können wählen, was sie wollen, welche Entwicklungseinstellungen oder allgemein. Ich lasse meinen nur auf General, obwohl wir was für eine Entwicklung tun. Aber sie optimieren im Grunde nur bestimmte Tastenkombinationen und das Layout basierend auf Ihrer Auswahl. Ich lasse meinen auf General. Ich beginne mit Visual Studio. Also, sobald das fertig ist, wirst du mit diesem Schnee aufgefordert werden. Wenn du das nicht verstehst, dann ist das in Ordnung. Aber hier ist, warum ich vorgeschlagen hätte, dass Sie sich mit ihren Lebenskegel anmelden , weil dann alles, was Sie eine 30-tägige Probezeit haben. Und wenn du nicht den oberen Teil des Kegels willst, dann werden sie dir im Grunde sagen, du sollst verlassen. So können Sie tatsächlich einfach voran und melden Sie sich an. Also werde ich mich einfach mit meinem eigenen anmelden. Und sobald Sie es unterschrieben haben und dann werden Sie sehen, dass es nicht an Sie lizenziert ist und es sieht nur einreichen mehr einladend. Jetzt, anstatt Visual Studio zu verlassen, kann ich schließen. Und das ist Visual Studio auf der sehr einfachen Ebene. Jetzt haben wir Visual Studio. Was wir auch brauchen, ist.net fünf. So können Sie wieder auf das Netz fünf Download-Seite durch eine einfache Google-Suche zu bekommen. Oder Sie versuchen, diese URL zu reproduzieren, je nachdem, welche Sie einfacher finden. Zu diesem Zeitpunkt möchten Sie das SDK und die Laufzeitumgebung herunterladen. Lassen Sie mich also beginnen, Visual Studio zu schließen, weil es Erweiterungen dafür installieren muss. Und Installer ist immer für Sie verfügbar. Wenn Sie also keine Arbeitslast hinzufügen, nur damit Sie es wissen, können Sie tatsächlich einfach auf Ändern klicken und dann wird dieser pH-Wert mit allen, die der Arbeiter sagen würde, wenn Sie später etwas Neues machen möchten, müssen Sie nur diese Arbeitslast ändern dann erhalten Sie diese Projektvorlagen entsprechend. Ich werde Visual Studio jedoch schließen, damit wir mit unseren Installationen fortfahren können. Also kriegen wir die.net fünf. Jetzt können Sie sehen, dass die SDKs basierend auf Ihrem Betriebssystem verfügbar sind, ich habe ein Windows 64-Bit-Betriebssystem, das mit Netzhaut arbeitet, also gehe ich voran und lade das herunter. Und während das heruntergeladen wird und gerade Lindsay den Back-Button betätigt und zur Laufzeit übergeht, die für das Hosting absolut notwendig ist. Sie sehen also, dass es die Laufzeitunterstützung ist. Wenn Sie also die.net fünf-Anwendung auf einem lokalen Server hosten , dann brauchen Sie definitiv die Laufzeit. So können Sie einfach dieses Hosting-Bundle erhalten, das sie dort zum Download zur Verfügung haben. So können Sie einfach beide herunterladen und wenn sie beide fertig sind. Wenn die SDKs fertig sind, können Sie diese 1 zuerst installieren. Es sollte nicht zu lange dauern. Und okay, also ist es erfolgreich. Nachdem wir das SDK installiert haben, wollen wir nur sicherstellen, dass wir dort eigene Zeit haben. Stimmen Sie auch irgendetwas zu, und fahren Sie fort und führen Sie Ihre Installation aus. Und es wird Sie wissen lassen, wenn es erfolgreich abgeschlossen ist, wissen, dass wir das SDK vollständig installiert ist. Ich wollte nur Visual Studio starten und Ihnen zeigen, was Sie mit diesen SDKs bekommen. Wenn ich also aufgrund der Arbeitslasten, die ich zur Verfügung habe, ein brandneues Projekt erstelle , sehe ich verschiedene Projektvorlagen. Also habe ich nur den Web-Workerknoten gewählt. Also habe ich die Möglichkeit, eine normale Konsole zu machen. Ich habe den ASP.Net-Kern. In der Tat denke ich, dass dieser wegen der Desktop-Arbeitslast kommt, aber an diesem Punkt versuche ich nicht herauszufinden, was funktioniert hat, wer zu welcher gehört. Nur wissen, dass, wenn Sie unser Web-Projekt zu tun, haben Sie die Möglichkeit, eine Kern-Web-Anwendung, eine Blazer-Anwendung zu wählen , und Sie können sie wählen ob Sie nicht für R.NET Framework machen, jemand, um eine.NET Core-Webanwendung zu wählen. Dies ist nicht die eigentliche Anwendung, die wir erstellen. Ich zeige Ihnen nur Ihre Optionen. Also dann gehen wir voran und setzen den Projektnamen erstellen könnte. Dann können Sie aus der Dropdown-Liste hier auswählen, ob Sie einen Core 2.13.1 oder den neuesten dominate Core 5 wünschen. Und damit können Sie die verschiedenen Vorlagen auswählen und fortfahren. Wenn wir also zurückkommen, erstellen wir tatsächlich ein Projekt und machen eine Tour von den Ordnerstrukturen. 3. UPDATE: Installiere Visual Studio 2022 Community Edition und . NET 6: Hey Leute. In dieser Lektion installieren wir Visual Studio 2022, das mit dotnet sechs ausgeliefert wird, was das bisher schnellste Dotnet ist. Um loszulegen, müssen wir nur zu Visual Studio Dot Microsoft.com Slash-Downloads übergehen . Und dann werden wir den kostenlosen Download in der Community-Edition anklicken , der uns dann ein Installationsprogramm gibt. Sobald wir dieses Installationsprogramm ausgeführt haben, können wir die gewünschten Arbeitslasten auswählen. Workloads beziehen sich wirklich auf die Bibliotheken oder auf unterstützende Bibliotheken für die Art von Up, die Sie erstellen möchten. In diesem Fall möchten wir diese Webentwicklung ASP.Net auf jeden Fall auf Webentwicklungs-Workload bringen . Wenn Sie sich für andere Technologien interessieren, können Sie diese auswählen. Sie können also sehen, dass ich mehrere Workloads mit Azure Development, NodeJS und Desktop-Entwicklung ausgewählt habe. Sie können also auch weitermachen und diese teilen. Ich denke, dass sie sich bei anderen Projekten als nützlich erweisen werden , die Sie am Ende ganz erstellen könnten. Sobald Sie das getan haben, können Sie auf Installieren klicken, was in Sobald Sie das getan haben, können Sie auf Installieren klicken, der unteren rechten Ecke geschehen würde. Je mehr Workloads Sie auswählen, desto größer ist natürlich die Download-Größe. Sobald Sie das abgeschlossen haben, können Sie fortfahren. Wenn dieser Download abgeschlossen ist, erhalten Sie möglicherweise bestimmte Optionen, die ich nicht erhalten werde, weil ich ihn bereits installiert habe. Das wird Sie also durch das führen, was erwarte ich? Möglicherweise erhalten Sie eine Option, bei der Sie Ihr Thema auswählen können. Wie Sie sehen, verwende ich das dunkle Thema, aber dann haben Sie die Möglichkeit eines hellen Themas, eines blauen Themas. Und die Sache ist, dass Visual Studio 22 viel mehr Themen hat als seine Vorgänger. Selbst wenn Sie die ersten Themen nicht beleuchten möchten, können Sie alle Themen erhalten, wenn Sie sie benötigen. Möglicherweise werden Sie außerdem aufgefordert, sich anzumelden. Wenn Sie also bereits 2019 auf Ihrem Computer installiert haben und gerade 2022 installiert sind, haben Sie sich bereits bei 2019 angemeldet, dann werden Sie wahrscheinlich nicht aufgefordert, sich erneut anzumelden. Wenn dies jedoch Ihre erste Installation von Visual Studio ist , werden Sie möglicherweise aufgefordert, sich anzumelden oder ein Live-Konto zu erstellen, an dem Sie einfach Ihr Microsoft verwenden möchten an allen Orten live ausgestellt wurde, wird mir beigebracht viel com Kegel, oder du kannst einfach weitermachen und einen erstellen. Und wenn ich, wenn mein Gedächtnis mir richtig dient, kannst du eine andere Nicht-Microsoft-E-Mail-Adresse verwenden, Speichel absondert, kalt. 4. GitHub einrichten: Hey Jungs, in diesem Video werden wir erstellen oder GitHub-Konten. Und das ist ein wirklich einfaches Zeug, wird alt, macht es sehr einfach für uns, sich anzumelden. Sie müssen nur zu GitHub.com gehen. Hat GIT HUB DOT COM, github.com, und Sie werden auf dieser Seite landen. Jetzt von hier aus, wenn Sie bereits ein Konto haben und Sie können sich anmelden und Sie können so ziemlich aufhören, das Video hier zu sehen. Wenn du es nicht tust. Aber dann ist die Mittelform genau hier. Sie können ein wenig lesen, bekommt nur eine Wertschätzung dessen, was GitHub vier ist, und es geht darum, sie haben Preise, also bieten sie Unternehmenspläne und Bildungspläne und verschiedene Pflanzen oder verschiedene Situationen . Aber für den Solarentwickler oder für sehr kleine Teams, die möglicherweise nicht auf Unternehmensebene sind, als sie es tun. Gib dir eine Menge kostenlos. Um sich anzumelden, müssen Sie nur einen Benutzernamen und eine E-Mail-Adresse und ein Passwort eingeben. Und sobald Sie all diese Dinge zur Verfügung gestellt haben und vorausgesetzt, dass Ihr Benutzername eindeutig genug ist , klicken Sie auf Anmelden für GitHub und Sie sollten dabei sein. Also habe ich bereits ein Konto, also werde ich mich wirklich nur anmelden. Du hast gesehen, wie meine Augenbrauen verrückt werden, um Informationen zu liefern. Also melde ich mich einfach mit meinem bestehenden Konto an. Also das ist mein gut, Sie können Ihren Benutzernamen oder Ihre E-Mail-Adressen verwenden, um sich anzumelden und das Passwort. Und hier bin ich, das ist meine Zielseite, also geben sie Ihnen ein Gefühl von Gemeinschaft. Es ist fast wie ein Facebook für Entwickler zu einem gewissen Grad, Sie können Menschen folgen. Und sobald sie Menschen folgen, sehen Sie ihre Aktivitäten auf der Zielseite, können Sie zu Ihrem Repository springen. Also offensichtlich, wenn du neu bist, aufsteht, dann hättest du nichts an der Seite hier aufgelistet. Was ich nicht neu bin. Ich war ziemlich damit beschäftigt, Inhalte auf YouTube zu platzieren, fast jedes kleine Haustierprojekt, das ich beginne, ich habe ein GitHub-Repository oder muss es tatsächlich durchgehen. Also und ich hatte auch Studenten, die mich in der Vergangenheit zu ihrer Ruhe hinzufügen , damit wir zusammenarbeiten konnten. Vielleicht hatten sie ein Problem und ich konnte ihren Code einfach über das Projektarchiv überprüfen. All diese Dinge sind durch dieses verbale Foto möglich. Aber sobald du deine Kegel erschaffen hast und eingeloggt bist, würdest du offensichtlich nicht sehen, was ich noch einmal sehe. Aber dann würde das die Anmeldung abschließen. 5. PostMan installieren und erkunden: Hey Jungs, in diesem Video werden wir Postbote installieren oder Porzellan ist ein ausgezeichnetes Werkzeug für die Zusammenarbeit und APA-Tests und Validierung auf all diese wunderbaren Dinge. So ist es ziemlich einfach, wirklich zu installieren. Du gehst einfach zu pausieren man.com. Postman tut Licht Luca, die Ihre Post liefert, Horstmann.com. Du weißt nicht, was oben ist. Und natürlich wählen Sie Ihr Öl. So 64-Bit Windows, und dann startet der Download. In Ordnung, sobald der Download abgeschlossen ist, können Sie die Installationsdatei öffnen und das Installationsprogramm ausführen. Alles klar, wenn es fertig ist, werden Sie entweder einen Bildschirm sehen, der Sie auffordert, sich anzumelden oder sich anzumelden, oder Sie werden diesen Bildschirm sehen, wenn Sie etwas sehen, um sich anzumelden, würde ich Sie ermutigen, dies zu tun. Eigentlich hatte es schon auf meiner Maschine. Der Fluss kann also nicht genau so sein. Aber wenn Sie diese Seite sehen, dann ist es in Ordnung. Sie können einfach auf das X klicken und Sie können es entfernen. Und ich bin sowieso nicht eingeloggt. Wenn Sie also sehen, dass der Offscreen so etwas aussieht, dann können Sie einfach voran gehen und eine lösliche Kegel erstellen. Sie können eine OK-Kegel ganz einfach Benutzername, Passwort erstellen , oder Sie melden sich einfach mit Google an. Ich möchte mich einfach mit Google anmelden. Und die Sache ist, dass der Parser einen Verlauf jedes Tests behält , zu dem Sie gegangen sind, sobald Sie auf den Zapfen haben. In Ordnung, also werde ich mich einfach bei Google anmelden. Oder es ist dran. Sobald Sie angemeldet sind, wissen Sie, dass Sie mit der Arbeit beginnen können. Also werde ich euch nur eine Probe zeigen, was Postman in der Lage ist. Erstens werde ich vorschlagen, dass es ein dunkler Modus ist, weil der Modus cool ist. Und dann werde ich ein neues Anforderungsfenster erstellen. Wenn Sie also dieses Pluszeichen verwenden, können Sie wie jeder Browser mit den Pluszeichen oben ein Pluszeichen sehen, und das gibt Ihnen eine neue Anfrage. Jetzt ging ich bereits voran und Suche nach einigen öffentlichen APIs, wie wir besprochen haben, APIs Basis muss unser Gateway in Ihre Datenbank verdienen. So haben Leute APIs, verschiedene Leute haben APIs. Und ich fand diese Website jeden dash api.com. Und nur Dreieck zurück zum allerersten Bit, damit Sie sehen können, was sie zu bieten haben. Von der Landingpage geben Peers Ihnen also eine Reihe von öffentlich zugänglichen APIs aus. Also gehen Sie, Sie können einfach voran gehen und klicken Sie auf eine und, Sie wissen, testen Sie es aus. Also ging ich rüber zum Oxford Wörterbuch, wo ich eine Liste von Sprachen bekommen würde. Also zeigen sie dir alle Endpunkte, richtig? Beim Erstellen der gesamten API verlinken sie mit dem Datenbank-shore-Dab, einer gemeinsamen URL, aber dann haben sie verschiedene Endpunkte, die verschiedene Informationsbits liefern. Und dann haben sie verschiedene Methoden, GET und posten und schieben einige andere ab. Aber Tatsache ist, dass Sie den Anforderungstyp kennen müssen. Sie müssen die URL kennen, über die Sie diese Anfrage erfüllen können. Sie müssen wissen, ob Sie Header übergeben müssen. Also hier weiß ich, dass ich Anwendungen brauche. Und ID. Und dann zeigen sie mir die Antworten. Also 200 bedeutet o, t und anfängliches Männerbeispiel in JSON, was diese Antwort sein würde. Und dann bedeutet 404 nicht gefunden. 500 bedeutet, dass es normalerweise einen internen Fehler mit dem Home-Server gibt, nicht mit Ihnen, oder? Also für Musa, suchen Sie wahrscheinlich nach etwas, das es nicht gibt. 500 bedeutet, dass der API-Provider einen Fehler aufweist. In Ordnung, also wechselte ich von jeder API und wollte kostenlos, kostenlos Forex API Dot Cottons, sorry, also habe ich einen genaueren Blick auf jede API-URL genommen, da alle diese API erforderlich ist, dass Sie heiße Luft ohne Kegel B haben würden, unsere registrierte Benutzer wahrscheinlich Benutzer von diesen Plattformen, die Sie durchschauen können, Sie sehen, Instagram ist ein YouTube, Google. Die meisten davon sind vorhergesagte API, so dass sie so Mama Auto-Sicherheit verwenden oder es im Besitz haben. Und wir werden all diese Techniken in diesem Kurs durchlaufen. Aber im Moment möchte ich nur mit einem schnellen Sieg und Zufriedenheit beginnen , zu sehen, was Postbote tun kann und die Relevanz davon, richtig? Also rief ich kostenlos Forex api.com, rechts wieder zu stoppen, das ist in kostenlos für api.com. Und dann werden wir mit der Dokumentation gehen, so dass die Zielseite tatsächlich ihre Demo ist , die die Daten über die API verbrauchen, die sie bereitstellen, oder? Sie haben also eine Datenbank eingebaute API. Und dann die, Sie machen eine Reihe von API-Aufrufen, um den Handelsindex zwischen Euro zu zeigen , USD Sie sind und GBP, etc. Also, wenn ich zur Dokumentation gehe, werden sie mir die Nutzungsbedingungen geben, mir sagen, wie ich sie benutzen soll. Daher ist die Dokumentation sehr, sehr wichtig und wichtig, wenn es um die APIs geht, ich werde Swagger Sorter UI zu unserem Swash Vocal verwenden. Wenn wir dort ankommen, werden Sie sehen, aber wir konzentrieren uns auf die Dokumentation unserer APIs zu einem großen Teil auch. Von hier aus zeigen sie Ihnen, dass Sie die haben, das ist die Domain, auf der die API gehostet wird, oder? Wenn Sie dann nach unten scrollen, sehen Sie die verschiedenen Arten von Funktionen, die sie verfügbar gemacht haben. Das ist also eine gute Beta, richtig? Und dann sagen sie mir die Anfrage, es ist eine GET-Anfrage. Und dann haben Sie die, die, die Endpunkte, sorry, die URL und den Endpunkt, das ist, was es aussehen muss. Und das ist eine Sampler-Antwort. Alles klar, und wenn du durchschaust, siehst du noch einen. Sie können verschiedene Gleichaltrigen bekommen. Also genau hier werden Sie schauen, er wird Euro-USD E1 und die Rendite, die die Ergebnisse dieser Abfrage für Sie sein. Und dann in diesem, können Sie mehr als einen bekommen, wenn Sie wollen. Sie fügen also nur beide Indizes ein, die Sie interessieren, als Parameter in diesem Endpunkt. In Ordnung, also ist dies eine Abfragezeichenfolge für die Werte, auf denen sich die Abfragen befinden. Und dann ist dies die Antwort von der API. Sobald diese Abfragen sind ein NDA Daten angerufen werden. Nein, die Pfeilakkorde erzählen eine gute Geschichte weil Sie dann in Perioden übergehen, die nicht in ihrem System existieren , als sie Ihnen sagen, dass, wenn Sie nicht passieren in einer Einstellung erforderlich ist und wenn Sie etwas übergeben das nicht da ist, dann sehen Sie einen Fehlercode 102. So haben Sie Standard-Fehlercodes und Sie haben einige Wunder. Du kannst selbst machen. Lassen Sie uns diese Probe versuchen. Also werde ich den ersten ausprobieren, wo ich Euro und USD bekomme. Also werde ich nur diesen Link kopieren, den sie sagten, das ist alles, was Sie zu den Daten auf diesem Endpunkt bekommen. Und dann werde ich Postman öffnen. Und dann, was ich tun werde, ist es in diesem Set durchbohrt sagt, geben Sie Anforderungs-URL, das ist, was wir gerade kopiert haben, oder? Bitte. Und die URL, füge ich die Anforderungs-URL ein. Und dann kann das Verb hier, LC GET tun, Post, PUT, Patch, Löschen, Sie haben eine Reihe von ihnen. Also wird get normalerweise verwendet, wenn Sie erwarten, Daten abzurufen, oder? Also erhalten und dann kostenlos für seine API. Nun, was auch immer die Anforderungs-URL war, Nein, es ist zum Speicher verpflichtet, weil es in der Dokumentation ist. Und dann klicke ich auf Senden, weiß, was Postbote tut, ist, einen Anruf zu imitieren. Nun, nicht wirklich imitieren, führt es tatsächlich den Aufruf an diesen API-Endpunkt aus und ruft dann die Daten in der Antwort ab. So sehen wir hier, es kann nicht so gut formatiert sein, wie es in der Dokumentation ist. Natürlich setzen sie ihren besten Fuß nach vorne. Was bedeutet das gleiche Bit von Informationen, wo ein Lesen und wir bekommen einen Zeitstempel und oder Aufstehen Code von 200. Wenn Sie nach rechts schauen, sehen Sie den Status 200. Ok? Also 200 ist das Universum der Antwort für alle k. Sobald Sie eine 200 Antwort bekommen, wissen Sie, dass alles in Ordnung ist. Die verschiedenen Zahlen haben also unterschiedliche Bedeutungen von Wörtern, oder? Die Zeit, die es brauchte, um mich die Kosten. Also das ist eine schnelle API nahm nur das ist was, 2.5th und die Größe der Antwort, richtig? So können Sie immer formatiert. So können Sie hübsch klicken, oder Sie können roh oder Vorschau sagen oder visualisieren. Ich bin mir nicht sicher, warum ich hübsch, Oh, das ist direkt nach dem Ändern des Formats. Es ist also ziemlich HTML. Das ist also alles gut. Und wenn ich das betrachte, kann ich etwas wie XML sagen und es ist kein XML. Ich sagte HTML. Lassen Sie mich auf JSON klicken, was es ist, und da gehen wir. Also, jetzt ist es ziemlich JSON. Jetzt sieht es ein bisschen radikaler aus, was in ihrer Dokumentation in der Vorschau angezeigt wird, oder? Postman ist also sehr praktisch, wenn Sie nur testen möchten, wie die Antwort aussehen wird. Json ist die am weitesten verbreitete Antwort, die ich sehe, dass ich gerne JSON-Antworten verwende. Was die Clausius-Alternative dazu wäre XML. Und sobald die Daten zurückgegeben werden , die der Benutzer erwartet, und Sie haben dokumentiert, was sie erwarten können, dann können Sie sicher sein, dass jeder APA bei Bedarf verwenden kann. So Postman wird sich als nützlich erweisen, wie wir Boote entwickeln unsere APN gehen, Ich möchte nur bestätigen, dass die Antworten so aussehen, wie wir sie erwarten. 6. Erstellen und Tour Web: Hey Leute, willkommen zurück. Also das erste, was wir tun müssen, mit So zweiteiligen Umgebung und alles ist, um unsere Projekte zu erstellen. Was wir also tun werden, ist Visual Studio zu starten. Und dann werden wir gehen, um ein neues Projekt zu erstellen. Jetzt von hier aus können Sie die Vorlage auswählen, die Sie möchten, wenn Sie ASP.NET Core-Webanwendung an der Spitze haben, gehen Sie vor und wählen Sie sie aus. Wenn Sie dies nicht tun, dann können Sie einfach in Web in diesem Filter eingeben und es wird Filter nicht tragen gehen, um C-Sharp zu verwenden. Stellen Sie also sicher, dass C-Sharp ausgewählt ist. Und während Sie nicht viel anders ändern müssen, sondern um die gewünschten Vorlagen auszuwählen und gehen Sie vor und klicken Sie auf Weiter. Nein, wir werden eine API für Hotellisten erstellen. Also werde ich meine Projekt-Hotelliste anrufen. Im Moment, da wir das haben, müssen wir nicht viel ändern. Wir können fortfahren und auf Erstellen klicken. Wenn Sie einen bestimmten Standort auswählen möchten, können Sie dies tun. Andernfalls fahren Sie mit erstellt fort. Nächster Schritt hat eine Auswahl der Aktie, die wir verwenden wollen. Nein, Sie hätten das.net five SDK und Visual Studio 2090 bereits installiert. Und so hättest du es bekommen sollen oder 5 As, als Option. Wenn Sie dies nicht haben, sollten Sie 3.1 haben. So oder so. Sie Candace Double-back, gehen Sie vor und installieren Sie das SDK. Überprüfen Sie dieses Video, wenn Sie sicherstellen müssen, dass alles installiert ist. Und dann können Sie voran gehen und 5 auswählen. Und wir werden eine ASP.Net Core Web API erstellen. Nun, rechts, haben wir die Möglichkeit, Authentifizierung hinzuzufügen und einige andere Dinge zu konfigurieren. Also lassen wir alles so, wie es ist. Wir werden hier keine Authentifizierung konfigurieren weil die Optionen, die uns gegeben werden, nicht wirklich das sind, was wir wollen. Das werden wir später manuell konfigurieren. Und das wäre eine gute Übung, um Ihnen zu helfen, zu verstehen wie Identitätskern in Ihre API integriert wird. Aber wir können es als keine Authentifizierung belassen, oder? NULL. Und dann können wir fortfahren und auf Erstellen klicken. Also, jetzt ist das unser Projekt erstellt wurde. Das, nur der Punkt, oh, bevor ich viel weiter gehe, bedeutet das Layout meines Visual Studio anders Ihr, weil ich dazu neige, den Projektmappen-Explorer zu verwenden. Auf meiner linken Seite. Standardmäßig sollte es auf der rechten Seite sein, wäre auf der rechten Seite. So sieht deine wahrscheinlich aus. Entweder können wir es immer ziehen und setzen Sie es, wo immer Sie wollen. Ich mag es auf der linken Seite zu haben, also werde ich meinen benutzen. Jetzt gibt uns der Projektmappen-Explorer eine Liste von Dateien und ich mache dies nur in Fällen, ist das erste Mal, eine.net-Projekt zu erstellen. Wenn es nicht ist, dann gehe ich das sowieso durch, wissen Sie, Wiederholung Newtons unter Druck und vielleicht werde ich Punkte oder etwas, das Sie vorher nicht wussten. Aber hey, also das erste, was wir uns ansehen wollen, ist unser Eigenschaftenordner. Also lassen Sie mich, lassen Sie mich von vorne anfangen. Wir haben also, was wir die Lösung nennen, die wie ein Manifest für die Liste der Projekte ist , die in dieser Lösung sind, die wir erstellen. Das Projekt ist Hotelliste. Ich merke, wenn ich darauf klicke. Es ist wirklich nur eine XML-Datei mit einer Reihe von Konfigurationen Angeboten und allen Dingen, die für das Projekt benötigt werden, um zu wissen, was seine Identität ist. Also, weil wir .net 5 gewählt haben, sehen Sie, dass das Zielframework ist. Wenn wir uns entscheiden, würde 3.1 dort unter Eigenschaften etwas anderes sehen oder sie Abhängigkeiten auslesen, wir sehen Analysatoren, Frameworks, Pakete, während wir weitergehen, Sie sehen diese Liste wächst, also bekomme zu viel in das, was dort passiert. Wir schauen uns Eigenschaften an, wir sehen Raseneinstellungen. Also hier ist es wie nur Konfigurationen, sagen Sie der Anwendung und wie es sich verhalten sollte, wenn wir im Debug-Modus sind. Was hier jedoch sehr wichtig ist, ist, dass wir es erlaubt haben, SSL oder HTTPS zu konfigurieren, wenn wir uns auf ein Projekt geeinigt haben. Infolgedessen haben wir diesen SSL-Port. Also, wenn wir tun unsere Anwendung und Tests und so weiter wird bei HTTPS Doppelpunkt Schrägstrich lokalen Host Doppelpunkt sein. Und dann, weil HTTPS den SSL-Port verwendet, sonst wäre dies der weniger sichere HTTP-Endpunkt. Also, das ist nur eine kleine Sache, die ich alle auf seine andere Weise zeige, die anderen Konfigurationen, in die wir kommen, während wir weitergehen. Mehr Controller-Ordner, die wirklich Schläuche sind gut Controller und diese tun genau das, was der Name suggeriert. Sie kontrollierten die Anwendung durch die Logik oder alles geht. Wenn wir eine Bitte um Informationen heilig interpretiert erhalten, und all diese Verhaltensweisen würden innerhalb unserer Controller definiert werden. Das sind die ersten Verteidigungslinien. Onesy heizt einen API-Endpunkt, Sie kommen tatsächlich zu einem Controller. Und dann würde es sagen, OK, welchen Endpunkt oder sitzen, was soll ich tun? Und dann wird es entsprechend zurückkehren. einmal, wenn wir weitermachen, werden Sie sehen, dass zum Leben erweckt wird. Ordnung, ich werde zu unserem beunruhigenden Punkt JSON überspringen , der nicht viel hat. Wir werden das ändern. Geht er aber mit? Aber lassen Sie mich auf die program.cs gehen, die der Ausgangspunkt für unsere Anwendungen ist. Also hier sehen Sie, es läuft diese Hauptfunktionen, wenn Sie jemals eine andere Sprache gemacht oder in einer C-Sharp-Konsolen-Anwendungen entwickelt, Sie bemerken, dass ich immer mit main beginnen, zumindest Plus-Plus C-Sharp Java sehen. Alle diese Sprachen haben zumindest eine mittlere Methode, oder? Also, sobald wir unsere API ausführen, wird den Mittelwert treffen und dann Haupt wird im Grunde wie ein Gebäude zu tun. Was es also tut, ist, dass es alle Middlewares auf Funktionalität aggregiert und in die Anwendung einfügt. Also ruft es diese Methode auf, die genau unten definiert ist. Und es macht seine Initialisierungen basierend auf dem, was in unserer Startdatei ist. Wenn ich also zum Start gehe, sehen Sie hier, wo alle Middlewares hinzugefügt werden und die Konfigurationen beim Start aufgerufen werden. Also hier sehen wir, wo es Controller verwenden will, fügen Sie die Bibliotheken hinzu, die Sie hinzufügen müssen, damit wir unsere Controller verwenden können. Setup Swagger, Solo. Traditionell wäre Swagger gewesen, Sie müssten dieses Geld früh seit dieser Version von.net API implementieren, es kommt aus dem Kasten, so dass wir nicht zu viel Arbeit machen müssen, aber wir werden erforschen, was Swagger ist später, falls Sie nicht ganz sicher sind, was es ist. Wir so ist, dass Konfigurationen oder Konfigurieren von Diensten. Entschuldigung, wir haben konfiguriert, die es uns erlaubt, einige andere Funktionen einzurichten. Also, ohne zu viel in sie zu bekommen, sind einige von ihnen selbsterklärend, einige von ihnen sind aus Sicherheitsgründen. Da alle von ihnen sind wirklich nett, die Hubs, und wir werden mehr und mehr hinzufügen, wie wir mehr Funktionen in unsere API. Also mach dir nicht zu viel Sorgen darüber. Die letzte Phase dieser Lösung wäre nur dieses Modell. Dieses Modell stellt also im Grunde nur Beta oder eine stark typisierte Dateneinheit dar. Und wir werden später viele Modelle und Datenübertragungsobjekte definieren. Aber vorerst haben wir unser Projekt erstellt. Wir sollten ein faires Verständnis davon haben, was wir in dieser Lösung betrachten. Und wenn wir zurückkommen, werden wir anfangen, unseren ersten App toten Dienst in Form von Protokollierung zu konfigurieren. 7. UPDATE – Upgrade auf Upgrade. NET 6: Hey Leute, In dieser Lektion werden wir versuchen unser Projekt von dotnet 52, dotnet sechs zu aktualisieren und all dieses Zeug ist völlig optional und eine Voraussetzung dafür ist, dass Sie tatsächlich installiert haben Visual Studio 2022 bereits. Wenn Sie sich also wohler fühlen, fahren Sie einfach mit dotnet five und Visual Studio 2019 fort, dann ist das absolut kein Problem. Wenn Sie jedoch diesen kleinen Schritt machen und zu Dotnet Seeks gehen möchten , werde ich Sie dabei führen. Letztendlich, selbst wenn Sie dies tun, aktualisieren, wird alles andere im Rest des Kurses passen, da dotnet sechs mit allem umgekehrt kompatibel ist Für dotnet five. Abgesehen von diesen wenigen Änderungen sollte alles andere funktionieren. Die erste große Änderung , die wir vornehmen werden, ist also ein Ziel-Framework. Für die CSB-Datei ist dies die Projektdatei oben hier. Sie werden darauf klicken und dann wird es editierbar. Sie möchten das also von dotnet five auf dotnet sechs ändern . Zusätzlich zu dieser Änderung in dieser Datei möchten wir zwei neue Bibliotheksreferenzen hinzufügen. Und diese werden in Form von Microsoft kommen, nicht ASP-NET-Schnurpunkt JSON Patch, dem es sich um Version 6 und Microsoft Dot Extension Dot Extension Dot Caching Abstraktionen handelt, was auch Dotnet Six ist. Wenn Sie also diese Anpassung vornehmen, sind alle Pakete, die Sie zur Hälfte verwenden , für dotnet sechs. Für die Dauer des Kurses wird das meiste davon in Dotnet Five gemacht. Sie werden sehen, dass ich auf dotnet fünf Bibliotheken verweise. Aber alles, was Sie tun müssen, ist sicherzustellen, dass Sie Dotnet Six anstelle von Dotnet Five verwenden. Lassen Sie uns jetzt die Einstellungsdatei nicht zerrissen und dies ist tatsächlich optional. Sie haben jedoch die Microsoft on Microsoft Dot entfernt , die lebenslange Protokollierungsbibliotheken hosten, und sie haben sie durch Microsoft Dot ASP NET Core-Warnung ersetzt . Sie können also weitermachen und diese Veränderung bewältigen. Nachdem Sie all das erledigt haben, möchten Sie einfach Control Shift und B ausführen , die einen Build durchführen, oder Sie können einfach zu Build gehen und auf Lösung erstellen klicken. Und dann werden Sie wahrscheinlich ein paar Bereiche über dem Zielprojekt sehen , das Zielprojekt. Lasst uns also einfach zu den Projekten springen. Gehen Sie zu New get, Manage NuGet-Pakete. Wenn Sie mit dem, was Sie bekommen, nicht sehr vertraut schauen wir uns das im Kurs weiter an. Aber im Moment besteht das Problem darin, dass sich einige unserer Bibliotheken immer noch in Dotnet Five befinden. Wie gesagt, anstatt auf dotnet 5 zu verweisen, werden wir auf die Dotnet Six-Version verweisen. Alles, was Sie tun müssen, ist zu Updates zu springen. Wählen Sie alle Bucket aus, führen Sie ein Update durch. Akzeptiere alle auftretenden Probleme. Und wenn Sie das getan haben, können Sie wahrscheinlich einen Neuaufbau durchführen. Manchmal nimmt ein Baumeister nicht alles auf. Wenn Sie also einen Neuaufbau durchführen, wird es bereinigt und dann wiederhergestellt und dann erstellt. Und dann sehen wir, dass es einem gelungen ist. Wir wissen also, dass unser Projekt erfolgreich aktualisiert wurde , um die Suche zu dominieren. So können Sie den Rest dieses Kurses beenden und Spaß mit allem haben , was Sie tun werden. 8. Logging mit SeriLog konfigurieren: Willkommen zurück Jungs. In dieser Lektion werden wir also unsere Logger-Dienstprogramme einrichten. Also wird unsere Waffe der Wahl für diese eine Serie sein. Davon abgesehen gibt es einige potenzielle Tools, die da draußen sind, sagen UP SIR log n, log, log for net, zumindest das sind drei, die ich verwendet habe und ich bin sicher, dass es andere gibt. Nein, ich benutze das serielle Protokoll, weil es als das schnellste geneigt ist. Und es ist sehr beliebt in der Entwickler-Community. Aber seien Sie sehr objektiv, wenn Sie Ihr Werkzeug auswählen. Ich werde Sie durch die Konfiguration für Syrien-Protokoll führen und die Konfiguration der anderen möglicherweise einige Variationen haben, aber letztendlich sind sie alle darauf ausgerichtet, dasselbe zu tun , was Ihre Anwendungsaktivität protokolliert. Nein, lassen Sie mich erklären, was ich mit der Protokollierung der Anwendungsaktivität meine. Es gibt Zeiten, in denen unerwartete Ereignisse auftreten und wenn es Null auftritt , und Sie hören davon fünf Minuten später oder sogar den Augenblick, nachdem es passiert. Manchmal ist es schwierig zu verfolgen, besonders in diesem Zusammenhang oder es ist eine API. Es gibt keine echte Benutzeroberfläche, kein echtes Feedback außer bei aufgetretenen Fehlern. Verwendung dieses Login-Dienstprogramms wird also in der Lage sein, Notizen darüber zu machen, welche Option wat zur Antwort ausgelöst hat, die sich als Fehlerantwort erwiesen hätte. Und selbst dann können wir die Details der gesetzten Fehlerantwort sehen. Beginnen wir also mit der Einrichtung unserer Protokollierung. Also müssen wir die Bibliothek mit der seriellen Verbindung bekommen. Also werde ich nur mit der rechten Maustaste auf das Projekt klicken, gehen Sie, um neue get Pakete zu verwalten. Und dann schauen wir uns im Bereich der Stadtteile an. Das sind also, was wir installiert haben. Ihre Versionen können sich von meinen unterscheiden. Und wenn Sie aufgefordert werden, zu aktualisieren, vorsichtig, dass Sie in der Lage sein sollten, die Microsoft auf CFD genug zu aktualisieren, aber seien Sie vorsichtig, wenn Sie tun und muss bereit sein, Roebuck für den Fall, dass etwas Griechen. Bisher, nein, wir werden durchsuchen und wir suchen Syria Log Punkt ASP.NET Core. Du wirst das hier sehen, aber das ist nicht das, was wir wollen. Wir wollen Punkte ASP.NET Core. Dieser hat eine Bibliothek, die unserem Projekttyp gewidmet ist. Also können wir weitermachen und das noch einmal installieren, wenn die Version anders ist, sollte es kein großes Problem sein. Und für all die Probleme, die Sie bekommen, gehen Sie einfach voran und antworten Sie bejahend. Und dann, wenn das erledigt ist, gehen wir einfach zu unserer program.cs und beginnen mit unserer Konfiguration. Alles, was wir tun müssen, ist, die Anwendung zu lassen , noch das, wo Sie Siri Log anstelle des Standardloggers verwenden , der mit dem Projekt geliefert wurde. Denn wenn man sich verärgert sieht, sieht man, dass es einen Anschein eines Loggers gibt. Sie geben Ihnen einige Konfigurationen, aber dann ist das nicht so robust wie das, was wir wollen, richtig? So baut Cirillo irgendwie auf, dass und es erlaubt uns, zu überschreiben. Also gehe ich runter zum Augenlöcher Builder. Und das erste, was ich tun werde, ist eine neue Linie zu machen, die auf ihrem Land 20 und die Punkte verwenden und richtig, Siri Log. In Ordnung. Sobald ich das mache, wird es mich wissen lassen, was ich brauche, um diese Bibliothek aufzunehmen. Verwenden Sie also Ihr Protokoll, nachdem Sie diese using-Anweisung einschließen. Nun, dann ist das noch nicht alles. Das ist nicht etwas, das der Anfang genäht weiß, dass wir diese Bibliothek hier haben. Wir können jetzt zurückgehen und konfigurieren. Also mache ich nur diesen Knorpel des Rades zu bekommen, weil ich im Bus zugegebenermaßen vergessen habe, das in den Bus zu stecken. Also lassen Sie uns nichts aus dem Weg bekommen und fahren Sie fort, unsere Hauptanwendung zu modifizieren, die unseren Logger initialisieren wird, wenn die Anwendung Seife startet und wo Putin einige Testprotokollszenarien genau hier im Durchschnitt als unser Testfall aufwindet. Was ich also tun möchte, ist ein Logger-Objekt zu konfigurieren. Also werde ich sagen, Log Dot Logger ist gleich einer neuen Logger-Konfiguration. Ordnung, was uns das erlauben wird, ist, einige Standardwerte und erwartete Verhaltensweisen für unseren Logger zu setzen. Also werde ich nur mit jeder Konfiguration, die ich hinzufüge, gesäumt brechen, ging zu c Punkt. Und die erste Konfiguration, die ich will, ist richtig, Werkzeug, dann Knoten wieder. Und dann sehen Sie hier, sie haben verschiedene Möglichkeiten. Also gefeuert auf Konsole genannt Alltop die Box, aber dann reden sie über Waschbecken. So kann er bestimmte Bibliotheken herunterladen, so dass Sie in eine Datenbank lieben können. Sie können zwei andere verschiedene Dateien oder Dateitypen protokollieren, basierend darauf, wie Sie es Boot benötigen, oder? Nein, ich bin nur interessiert an einer Datei später auf dieser kleinen Balkendatenbank und so weiter. Wir können Double-back auf Add Datenbank-Logging-Tool oder eine Suite von Tools. Also richtig, nein, ich sehe nur richtig, um die Akte einzureichen. Und dann braucht das einige Parameter. Also werde ich die Parameter einfach benennen , weil ich sie nicht unbedingt die spezifische Reihenfolge binden werde, die sie hier in den Konstruktoren oder in den Überladungen benötigt werden , oder? Also der erste, den ich schreiben werde, ist Pfad. Pfad bedeutet, wo soll diese Datei erstellt werden? Wenn es erstellt werden muss oder Anzeigen auf Pfad muss eine Zeichenfolge sein. Also möchte ich keinen festgelegten Pfad festlegen und ich werde nur einige Zeit verbringen und hier erklären. einmal, Kontextregeln. Erstens möchten Sie möglicherweise einen zentralen Protokollierungspfad haben, denn sobald Sie Ihre API auf einem Server bereitgestellt haben, möchten Sie nicht dafür ausgeben, zu erraten, wo das Logo vorhanden ist, wo sich das Protokoll befindet, Sie möchten es möglicherweise nicht in der tatsächliches Projekt. Richtig. Weil ich hier eine Protokolldatei hatte, die zugegebenermaßen gelöscht wurde. Aber Sie möchten es vielleicht nicht in einem Projekt, weil jemand de Broglie und Anwendung möglicherweise nicht notwendigerweise, Sie wollen nicht unbedingt, dass sie in die Projektdateien auf dem Server gehen , um auf die Anstöße zugreifen zu können. So können Sie irgendwo im Netzwerk definieren und Sie können auf einem anderen Laufwerk definieren. Sie können hier einfach einen Pfad eingeben, wo Sie wissen, dass Ihre Protokolldateien Ziel haben sollen. Also werde ich so etwas wie C-Doppelstrich Schrägstrich sehen und wann man Hotel sagt. Also weiß ich genau, mit welcher Verpflichtung ich es zu tun habe, wenn ich den Ordner, Hotellisten, Schrägstrickprotokolle sehe , richtig? Das ist mein Boss, den ich definiere. Also sage ich nicht, dass Sie den Punkt definieren müssen, wenn es das D-Laufwerk für Sie ist. Wenn du nicht in die Protokolle legen willst, liegt das an dir, richtig. Aber ich empfehle nur, dass Sie es leicht zugänglich oder zugänglich genug machen. Sie können es finden, wenn Sie müssen. In Ordnung. Also siehe Hotellisten, Protokolle, und dann werde ich nur meine Protokolldatei Log-Dash Punkt TXT geben. Also werde ich erklären, dass scheinbar zufällige Bindestrich in ein paar sind. Das ist also mein Dateipfad. Bisher viele Pfeile, aber lassen Sie uns weitermachen und sehen, was diese, also breche ich nur Linien, so dass wir alles sehen können. Ordnung. Das bricht und tut mir leid, Gedankenstrich. In Ordnung, das war's also für den Weg. Die nächste Konfiguration, die ich einfügen werde, ist die Ausgabe-Vorlage. Wie soll jede Zeile aussehen? Richtig? Also habe ich bereits alle Put-Vorlagen vorbereitet. Ich werde es einfach dort einfügen und dich durch sie führen. Also noch einmal benannter Parameter oder setzen Vorlagen Doppelpunkt und der Wert, den ich will, wäre Zeitstempel, ich mache es in einen Zeitstempel mit dieser Detailebene, Sie können hinzufügen oder subtrahieren. Du brauchst vielleicht nicht all diese Sadats Jahr, Monat, Tag, Stunde, Minute, zweite Mini-Millisekunde und was auch immer Z ist, richtig? Also habe ich das gesehen, verwendet dies sehr detailliert. Es gibt Ihnen den genauen Zeitstempel, etwas passiert. Möglicherweise benötigen Sie nicht die Detailgenauigkeit, die Ihnen überlassen wird. Und dann ist die Ebene, welche Ebene Warnung ist, es ist eine Entzündungswarnung. Das werde ich später durchmachen. Was ist die Botschaft? Und dann neue Zeile oder Ausnahme, wenn es eine Ausnahme enthalten ist und Bricklin und zeigen Sie die Ausnahme. In Ordnung, also ist das im Grunde, was das ist. Tun. Experimente sind, dass ich Rollintervalle habe. Das bedeutet also, welches Intervall sollte, dass eine neue Dateien erstellt werden. Also, das bringt mich zurück zu diesem zufälligen Strichpunkt, Punkt Hub dort. Denn was hier passieren wird, ist, wenn ich sehe Roll-Intervall Punkt d bedeutet und ohne Bindestrich und die DID mit jedem d verbunden. Also das ist gut, um Ihre geliebten schnell zu segmentieren. Also hat jemand in der letzten Woche, Donnerstag, etwas gesagt. Sie können leicht gehen und finden Sie die Protokolldatei für Donnerstag off letzte Woche und überprüfen Sie es. Ansonsten werden sie nur mit einer großen Datei enden , die weiter wächst und wächst und wächst. Und dann werden Sie Jahre von Anstößen in einer Datei haben, was für mich ineffizient ist, zumindest wenn Sie mehrere Dateien haben, können Sie die älteren verwalten. Sie können sie sicher löschen oder sicher in ein Archiv verschieben und trotzdem diese Trennung beibehalten. Deshalb setze ich dieses frühe Intervall ein. Was haben Sie verschiedene Möglichkeiten? Du könntest es am Tag, in der Stunde, oder in der Minute, im Jahr, es liegt an dir. In Ordnung. Der nächste wäre das eingeschränkte Mindestniveau. Ich möchte also auf ein Minimum an Informationen zur Protokolleereignisebene beschränken, oder? bedeutet, dass ich jedes kleine Ding ein C benötigt, es gibt bestimmte Debug-Punkte. Sie alle, wissen Sie, das fängt an, initialisieren das und zeigen, dass ich das nicht alles sehen muss. Die gesamten ausführlichen Protokolle sind also abhängig davon, wie viel Sie protokollieren, sowie was Sie als Minimum festgelegt haben. Also hier sehe ich nur log mit einem Minimum an Informationen. Ich muss diese Bibliothekskontroller-Punkte eingeben, und wir schließen diese Bibliothek ein. Und dann vermisse ich dieses Semikolon. Aber bevor ich das Semikolon anziehe und einen Blick hier nochmal werfen. Also sind wir sicher, und ich vermisse hier ein Komma. Das ist also eine gute Sache. A nahm, um das zu überprüfen. Und dann wäre das letzte, was hier, um all diese Arrays loszuwerden, nach dieser Datei geöffnet und geschlossen Klammer, sagen wir Punkt erstellen Logger. Es ist also gut, eine Logger-Konfiguration auf all diesen zu sehen. Erstellen Sie das Logger-Objekt. Nein. Okay, jetzt, da wir es erstellt haben, können wir es tatsächlich benutzen. Also, was ich hier tun werde, ist, dass wir den Prozess starten oder unser gemein, die Hauptlinie in der Hauptfunktion innerhalb unseres Track-Cash. Und wenn Sie mit diesem Track nicht so vertraut sind, bedeutet Gadget wird versuchen, etwas zu tun, und wenn es eine Ausnahme gibt, wird es es fangen und es entsprechend behandeln. Das nennen wir also Ausnahmebehandlung. Okay, also was wir tun werden, ist zu versuchen, diese Leitung zu laufen. Aber vorher werde ich mich in die Informationen einloggen. Unsere Login-Bits von Informationen zu sagen, hey, Anwendung beginnt, so dass wir genau sehen können, welche Zeit und alle Details benötigt, um zu wissen, dass die Anwendung an diesem Punkt gestartet. In Ordnung, wenn wir eine Ausnahme fangen, und hier qualifiziere ich nur eine Ausnahme mit den Objekten, die tatsächlich die Ausnahme enthalten, dann werde ich fatal sehen. So können Sie Fehler protokollieren, ich kann Informationen anmelden, Sie können Warnung protokollieren. Hier ist es Feeds von, wenn die Anwendung nicht mehr funktioniert. Also sehe ich in der Liebe nicht tödlich. Und ich bin sehen, und das ist die Ausnahme, die dazu führt, dass das fetale Sehnsucht geschrieben wird. Und das ist eine MRD und eine C-Anwendung auf Feldern, Felder zu starten. Also sehe ich, dass, wenn jemand das Protokoll überprüft hat, dies das Ergebnis davon ist oder das ist, was passiert ist. Als Ergebnis dieser Ausnahme. Der Logger pharma Tito Nissl formatiert und spuckt es in die Datei entsprechend dieser. Ordnung? Und nach all dem werde ich es endlich sagen. Schließlich bedeutet, nachdem Sie gehandhabt haben oder sie hatten versucht, Operation und es fing es und alles ist erledigt. Was möchte ich hier machen? Ich sehe, ich möchte nur mein Log-Objekt leeren und schließen. Das wird also passieren, wenn wir unsere Bewerbung starten. Also richtig, nein, ich werde voran gehen und drücken Sie diese Play-Taste oben hier oben, die Ihre Anwendung starten wird. Oder wir können in die Protokolldatei gehen und sehen, was passiert. Alles klar, jetzt, wo die Anwendung geladen ist und nur damit Sie sehen können, wird der Browser mit Swagger kommen, wird durch Swagger gehen und später, mach dir keine Sorgen zu viel. Humboldt ist das, es sieht schön aus, aber unser Fokus liegt hier auf unseren Protokollen. Also sehen wir hier unser Protokoll. Anwendung startet jetzt sehen wir die Log-Ebene und es ist Art von formatiert. Holy, dachte, es wäre nicht richtig. Also andere Dinge schreiben tatsächlich in das Protokoll, sehen ihre Verpflichtungen begonnen. So wurden Protokolldaten gestartet. Das ist also ein Anfang, dieser hat angefangen. So können Sie die genauen Zeitstempel für das sehen, was das wert ist, oder? Wir kennen die Umgebung, also sehen Sie, dass Protokolle bestimmte Details für uns bereitstellen , die wir nicht sehen können, wenn wir nur schauen, dass die Bezirke so sind. Man würde nie wissen, dass das alles in dem Dollar passiert ist, nur wenn man sich das ansieht. Das ist es für uns, den Logger einzurichten, zumindest für jetzt, später haben wir unsere Datenbank eingerichtet und so weiter. Wir können zurückkommen und die Funktion hinzufügen, die es in der Datenbank protokollieren kann. Auch. 9. Swagger UI: Willkommen zurück Jungs. Also heute wollen wir nur einen schnellen Durchlauf von Swagger haben, wie es in unsere API-Entwicklung einbindet und was sein Zweck ist. Swagger ist also wirklich da, um die API-Entwicklung für Benutzer, Teams und Unternehmen zu vereinfachen . Es ist ein Open-Source-Tool-Sets und es hilft uns im Grunde, ein Dokument unsere Bedürfnisse fettleibig mit viel weniger Aufwand zu entwerfen , als es wirklich brauchen würde, um diese Detailgenauigkeit zu haben. Es ist also ein wirklich gutes Werkzeug. Es hilft uns, immer noch eine Menge Dinge zu automatisieren. Und das Beste daran ist, dass es bereits in früheren Versionen mit unserer API enthalten ist , wer müsste es installieren, es war kein sehr schwieriger Prozess. Bullets beachten, dass Microsoft scheint, dass es eine Art Standard ist , dass jeder mit einem EPA Jian Fußball setzen will, weil es so cool ist, so effizient bei allem, was es tut. Was sie dann getan haben, ist, dass sie gerade angefangen haben, es in unserer API für uns zu verpacken. Also die Hauptbibliotheken, die Swagger integriert werden können, gut eins, es kommt aus diesem neuen GET Taschen. Wenn ich gehe, um neue get Paket zu verwalten, werden wir sehen, dass wir das Paket bereits installiert haben. Swash mehrere Punkt ist p und.NET Core. In Ordnung, er war weniger Störungswerkzeuge als in unserem Startup. Denken Sie also daran, dass program.cs den Start verursacht. Also Startup ist null, wo wir alle Middlewares definieren und die , die wir in den Diensten für Sagar haben, ist Dienstleistungen, Gedanken, seltsame Swagger, Jen, wir setzen in, ob wir oder nicht so, wenn wir es manuell tun, müssten wir das tun. Aber weil es wieder erzeugt wurde , haben wir diesen Schritt nicht. So wird es den Swagger und das Dokument generieren. Es unterstützt die Versionierung. Also, wenn Sie Version eins, Version zwei, et cetera, von Ihrer API haben , sind Sie in der Lage, LKW von den Versionen zu halten sind schön. Lassen Sie, wer die Dokumentation Norwich Version von der API liest, die sie betrachten, können Sie bestimmte offene API-Entzündung definieren. Das ist der Titel, die Version. Wenn ich hier auf Komma klicke, werden Sie sehen, dass Sie erneut Kontaktinformationen hinzufügen. Sie können eine Beschreibung, Lizenz, alle möglichen Dinge hinzufügen . Ihre Dokumente oder jemand, der sich Ihre API-Dokumentation ansieht, wissen also genau, wer, wenn Sie diese Detailgenauigkeit bereitstellen und beobachten möchten, dass diese API von Schrauben ist. Später. Weiter nicht oder andere. Im Abschnitt Konfigurieren haben wir die Verwendung swagger und up swagger UI verwenden. Die Swagger-Benutzeroberfläche bedeutet also, dass sie einen eigenen Endpunkt erstellt , um eine eigene Art von Konfigurationsdatei zu haben, und es wird seine Hotelliste v1 nennen. Nein, stimmt's? Und nein, das ist am Ende ist die Entwicklung. Also n ist nur eine Variable, die uns erlaubt zu verfolgen, welche Umgebung wo in unserer frühen Entwicklung, wenn Brot, Milch, Schon, richtig? Nein, alles, was hier reingeht. Es ist im Grunde gesehen. Wir sind in der Entwicklung. Also, wenn wir das veröffentlicht haben, um als Ihr IIS oder im Internet zu sagen, was immer es ist, wo immer es ist, wir setzen es, tun Sie nichts von diesem Zeug. Das ist, was diese if-Anweisung im Grunde sagt. Nein, ich denke, Fußball ist nützlich. Während sie es vielleicht in den Entwicklungsteil eingefügt haben, was ich verstehe, denke ich, dass es einfacher ist, es jederzeit in die API aufzunehmen. Also, wenn ich meine API ADL veröffentlicht habe und es schwierig ist, jemandem anderen so viel technischen Support zu bieten , um ihnen beizubringen, wie man die API verwendet, weil dafür Swagger-Dokumentation ist. Also werde ich nur diese beiden Zeilen alle hart nehmen, dass wenn Aussage und legen Sie sie in den allgemeinen Bereich, wo alles wird, unabhängig von der Umgebung zu erledigen. Das ist also meine Modifikation. Wieder einmal, Kontext ist alles, was ich verstehen kann, dass aus Sicherheitsgründen oder einfach nur allgemeinen Lakoff Notwendigkeit für den Informationsaustausch. Sie sagten wahrscheinlich, nun, Sie betrachten es nur in einer Entwicklungsumgebung, weil die Entwickler intern sein können. Aber dann, wenn es für Drittanbieter-Entwickler ist, dann werde ich es extern und öffentlich zugänglich machen. Werfen wir einen Blick auf einen unserer Controller. Und nun, der Controller, den wir haben, und Sie sehen hier gibt uns die Wettervorhersage und Verteidigung, die ich bekomme Methode. Okay, jetzt, wenn ich die Anwendung ausführe und die Webseite auftaucht, sehen wir unsere Swagger-Dokumente. Okay, also die Hotelliste Version eins, all das waren Dinge, die im Startup definiert wurden. Also, wenn Sie den Namen ändern oder ihn ansprechender, benutzerfreundlich, menschlich lesbar machen müssen. Sie können es immer innerhalb der Konfigurationsbereiche hier und hier ändern, genau da ist es, Titel. Also, wenn Sie Beschreibung, Beschreibung hinzufügen möchten , wird es auf der Seite kommen. Jetzt hier zeigt es uns, was in der API ist und was in der API ist, wäre unser Endpunkt, um richtig zum Controller zurückzukehren, um Wetterprognose zu erhalten. Ordnung? Es generiert also kontextuell dieses Dokument basierend auf dem, was es im Projekt sieht. Und wenn Sie darauf klicken, wird es Ihnen Beispiele zeigen, was zurückkommen wird , wenn Sie versuchen, etwas abzurufen. Was genau richtig ist, weil dies eine Liste der Wettervorhersage und Wettervorhersage zurückgibt . Terrorismus ist eine Klasse, die einige Datenfelder für jedes definiert hat einen Datentyp. Also datetime, int, int und string. So sehen Sie, ob Swagger tatsächlich nimmt alle von ihnen, sehen Sie die es zeigt, dass Sie gehen, um MCA Feld namens Beat Temperatur, Meerestemperatur f. und Zusammenfassung wird Ihnen alle von ihnen zeigen. Und es gibt, sogar gibt Ihnen eine Vorstellung vom Datentyp, Datetime. Int, int und eine Zeichenfolge. Also zeige ich Ihnen nur, wie mächtig Sagar ist ohne Anstrengung unsererseits, bereits API-Dokumentation zu haben, was wiederum sehr wichtig ist, wenn Sie auf Client-Anwendung aufbauen und jede API konsumieren. Oder wenn Sie derjenige sind, der die API erstellt, machen Sie es einfach für jemanden, der sie konsumieren muss. die gleiche Weise würden Sie als Verbraucher der API von jemandem behandelt werden, um alle Informationen zu haben, die Sie benötigen, um zu wissen, wie Sie es selbst erstellen können. Sie möchten sicherstellen, dass Sie diese Informationen Personen zur Verfügung stellen, die mit Ihnen interagieren. So macht Swagger es aus der Box sehr einfach. Und nur um den Umschlag ein wenig zu schieben, wenn wir versuchen, es ist alt, wir können tatsächlich auf Ausführen klicken und swagger ermöglicht es uns, unsere API genau hier zu testen. Also diese Daten, die mit dem Statuscode 200 zurückkommen, wir später in all das ein. Aber Sie sehen den Antwortkörper. Das liegt daran, dass es tatsächlich den Code ausgeführt hat, der hier ist. Und nur um zu beweisen, dass, wenn wir über und diese p klicken und wir bekommen diese roten Punkte, die ein Bruchpunkt ist. Also werde ich einfach noch einmal auf Ausführen klicken. Und dann sehen Sie Visual Studio Pausen und es trifft diese Haltepunkte ac, wissen Sie, hat diesen gelben Pfeil darin. Und das ermöglicht es uns, FL f 11 zu drücken und Zeile für Zeile zu gehen. Also versuche ich nicht, Ihnen zu zeigen, wie man NANDA debuggt, zeigt Ihnen, dass dies kein Flaum ist, es wird uns helfen, zu testen. Also keine F2-Test-Dienstprogramme, Swagger und Postbote. Okay, also und ich drücke F5 oder ich kann einfach auf Weiter oben klicken, je nachdem, was auch immer, dann wird es einfach mit der Ausführung fortfahren und es wird es zurückbringen. In Ordnung, das ist also ein ganzer Swagger hilft uns bei unserer Suche nach Tests. Jetzt werde ich nur tun, um auf spezielle fallen und lassen Sie uns einschließen oder logger hier. Also oben, ich habe bereits, na ja, standardmäßig ist es injiziert. Da wir also Semilog als Standardlogger verwenden, wenn wir hier mit unserem Objekt protokollieren, wird es den seriellen Logger verwenden. Also werde ich dir nur kleine Schnipsel von Lochprotokollen zeigen Hoffnungen, dass ich Lagerpunkte sagen kann. Und dann würde ich Informationen erlauben, um zu sagen zugegriffen Wettervorhersagen. Ordnung. Das ist also nur eine Entzündung, um die Prognose zugänglich zu sehen. Und dann kann ich später sehen, dass Wettervorhersagen so etwas zurückgegeben haben. Weißt du, vielleicht nicht. Dies, das ist eine elementare Kugel, ist nur noch einmal, zum Beispiel, Sikh. Also sehen Sie einfach den Logger. Blogger. Oh, nun, es tut mir leid, ich habe das gesagt, um oh zu finden, hier ist eine Rückkehr Aussagen, also werde ich es einfach als Information für nicht später auf wir bekommen, um Wirbelwind Web zu experimentieren oder unquote zu bestätigen. Also werde ich diese Anwendung nur einmal ausführen. Und dann werde ich es ausprobieren. Klicken Sie auf Ausführen. Ich kann den Haltepunkt entfernen, indem ich einfach klicke. Solange also dieser rote Punkt da ist, er aufhören, wenn er zu dieser Linie kommt, entfernen Sie einfach die roten Punkte und drücken Sie F5, damit es weitergeht. Na gut, so hingerichtet. Lassen Sie mich sehen, ob mein Protokoll mir etwas Nützliches und Reife und Fan zeigen wird. Und da gehen wir hin. Das sind jetzt die Protokolldateien, die wir alle Zeiten geöffnet haben, und es hat etwas getan, das Sie hier sehen, es ist direkt in der Lunge. Also hier ist unsere erste Blog-Anwendung startet und dann ist es protokolliert Daten. Das hat das getan. Und dann ist hier die, die wir gerade geschrieben haben, Wettervorhersage zugegriffen hat, oder? Und dann erzählt es Ihnen alle Details, was es tut und einen Abstieg bekommen. Richtig. Also das ist alles eine Protokollierung funktioniert, das ist alles, was Sagar funktioniert. 10. CORS: Willkommen zurück Jungs. In dieser Lektion werden wir unsere Chorus-Richtlinie konfigurieren. Nein, natürlich, ist ein Akronym für Cross-Origin-Ressourcen-Sharing. Und das ist nur ein Mechanismus, mit dem Sie unsere Einschränkungen zulassen können. Die gemeinsame Nutzung von Ressourcen über obwohl bedeutet. Lassen Sie mich das auf ein bisschen mehr Englisch sagen. Wenn jemand, der sich nicht in Ihrem Netzwerk befindet, versucht, auf Ihre API zuzugreifen , hat Ihre API standardmäßig diese Zugriffsanforderungen abgelehnt. Okay, wenn ich also eine interne API entwickle , die in meinem Unternehmen und jemand von außerhalb meines Unternehmens mit einer völlig anderen IP-Adresse verwendet wird und alles versucht, die API zu konsumieren oder mit der API zu sprechen, dann geht es um automatisch zu wissen, dass , hey, na ja, ich kann Ihnen keine Informationen senden, weil ich Sie nicht kenne. Also wollen wir diese Richtlinie konfigurieren, um einige Konversation mit Quellen zu erleichtern sind Anforderer. Das ist, dass ich nicht unbedingt in unserem Netzwerk bin. In Ordnung, also bin ich tatsächlich darauf gestoßen, wo ich eine API für mein Unternehmen entwickelt habe, für die Verwendung von Drittanbietern. Und ich verbrachte einige Zeit damit, zu debuggen, warum dieses Unternehmen nicht auf die API zugreifen konnte , die eindeutig auf meinem Computer und jedem anderen Computer, unserem eigenen B funktionierte Und dann nach dem Graben, erkannte ich, dass es das entspricht c. manchmal hinterlässt man ein E-Learning, das durch Erfahrung gelernt wurde. Nun, ich bin hier, um Ihnen nur mitzuteilen, welche Konfigurationen Sie von Anfang an einrichten können , um bestimmte Geschäftsarbeit zu vermeiden. Also, um diese Richtlinie hinzuzufügen, was wir tun werden, ist in unserer Startup-Dot-CS-Datei und ich werde es nur hier hinzufügen. Ordnung spielt bis zu einem gewissen Grad eine Rolle, aber im Moment konzentrieren wir uns nicht wirklich auf das Auto würde nur wollen, um unsere Konfigurationen in. Jemand sagt nur Dienste, Punkt, fügt Kerne hinzu und legt dann einfach das Semikolon dort. Also, wenn wir sagen, natürlich, müssen wir eine Politik hinzufügen, wie Korps Know-how braucht, um sich zu verhalten, oder? So wie, wenn wir den anderen Swagger Jin aufstellen, tut mir leid, würde See sagen, und dann dieses Lambda R0. Und dann können wir mehrere Zeilen mit mehreren Konfigurationen haben. Sie würden sehen, dass es mit Endpunkten ist und so weiter. werden wir hier tun. Also werde ich sehen, alles, was Sie verwenden können, kann wirklich nicht gleich b, c, o gleich den Wortoptionen. Wie ich schon sagte, Sie sehen sie hier mit Endpoints Stein. Also werde ich einfach alles sagen. Und dann das Lambda R0. Und dann werde ich geschweifte Klammern öffnen und schließen. Das bedeutet also, dass ich einen ganzen Konfigurationsblock für einige dieser Unterbrechung in der Zeile haben werde, damit wir genau sehen können, was gesucht wurde. Und dann werde ich sagen, alle Dot Add Policy. In Ordnung, also füge ich die Richtlinie hinzu, nachdem ich ihr einen Namen gegeben habe. Also erster Parameter ist eine Ma'am, ich nenne es einfach CORS-Richtlinientool, schick oder verwirrend. Also CORS-Richtlinie, dann Komma und dann nach einem anderen Lambda definieren. Also werde ich diese einfach nennen, ihre Ursache normal zu bauen, um die Richtlinien zu erstellen. Also Builder Lambda R0 und ich werden nur Linie brechen. Also wollte ich einen Baumeister sagen. Punkte erlauben jede. Also hier sind alle Optionen, bevor ich anfing, sie zu sitzen. Dies sind alle Optionen, die Sie zulassen können. Nea kann nicht zulassen, können Sie einstellen. Also, wenn es weiß oder mit bestimmten Kopfzeilen aufgeführt ist, können Sie Halle definieren. Ihre API bestimmt, wer auf mich oder meine Ressourcen zugreifen darf und wer nicht. Farnell für pädagogische Zwecke. Später können wir uns vielleicht die Sicherung und heilige Mischung und Übereinstimmung ansehen. Nun, wieder einmal, Kontext ist alles. Wenn Sie eine API für das Internet und die Verwendung von Drittanbietern entwickeln, können Sie nicht zu Street mit der API sein, wenn Infrarot jemand in der Lage sein sollte, weiterzumachen. Andernfalls werden Sie einen Verwaltungsaufwand haben , um herauszufinden, wer die ganze Zeit wer ist. Also werde ich nur sagen, ein niedriges jegliches Ursprungs. Und ich werde nur eine niedrige Methode entlang verketten, was bedeutet, dass sie auf jede Methode zugreifen können, auf den Endpunkt zugreifen können, der hier definiert ist. Und dann ging ich zu sagen hallo, jeder Kopf DAR, sorry, eine niedrige, jede Kopfzeile. Ordnung, und schließen Sie dann die Klammer für die Richtlinie und verwenden Sie dann Semikolon. Das ist also meine Kursrichtlinie, die definiert sind. Also siloiere ich jeden einzelnen. Sobald Sie auf meine API zugreifen, können Sie die Ressourcen nutzen. Wieder einmal, Kontext ist alles, was bestimmen wird, wie streng Sie mit Ihrem Kurs Politik sind. Nun, nachdem ich all das getan habe, werde ich nicht nach unten gehen, um zu konfigurieren. Und ich werde zulassen, dass die Null, die getan hat, die Kursrichtlinien verwenden sollte. Also, genau hier, werde ich nur sagen, Kerne zu verwenden. Da gehen wir. Und dann wird es sagen, okay, es macht einige Überlastungen. Ich werde ihm den Richtliniennamen C sagen und so, indem ich die Anführungszeichen setze, ist es ein altes Sprichwort, okay, was ist ein Richtliniennamen? Also ist der Name der Richtlinie, wie ich gerade oben skizziert habe, grobe Politik. Vielleicht könntest du es ein bisschen informativer machen. Du könntest einen Tiefstand sehen. Alles klar, denn das ist alles, was es wirklich tut. Diese Richtlinie erlaubt uns, Ich werde sagen, verwenden Sie die Richtlinie, die hallo sagt. In Ordnung, also ist das, wofür natürlich Politik wirklich ist. Also das, in dieser Situation, sind wir nicht gegangen, um die Vorteile davon vollständig zu sehen. Aber wenn Sie ein anderes Projekt gemacht haben, in dem Sie die API haben und dann ein ganz anderes Projekt haben, nämlich die Client-Projekte, was bedeutet, dass es an einer anderen IP-Adresse als unser Port ausgestrahlt wird, als das aktuelle API-Projekt. Sobald sie versuchten zu sprechen, wird das erst funktionieren, wenn Sie diese Richtlinie eingerichtet haben. 11. Änderungen in GitHub überprüfen und hinzufügen: Willkommen zurück Jungs. In diesem Kurs werden wir Quellcodeverwaltung hinzufügen oder zitieren und alle Quellcodeverwaltung ist ein wunderbares Tool, mit dem wir alle Änderungen verfolgen können , die wir in einer Anwendung vornehmen. Es hilft uns auch, gut in Teams zu arbeiten, denn anstatt 34 verschiedene Versionen aus einem Projekt zu haben, fungiert das Quellcodeverwaltungs-Repository als zentraler Speicherbereich für alle. Es ist ein abonnieren Ian Änderungen vergleichen mit anderen überprüfen, Konflikte lösen, und viele andere Vorteile. Wir werden also unsere Quellcodeverwaltung für unser Projekt einrichten. Und nachdem wir jedes Modul abgeschlossen haben, wird einfach voran gehen und überprüfen Sie es in und stellen Sie sicher, dass wir konsistente Baum aller wichtigen Änderungen treffen in unseren Projekten, wie wir weitergehen. Also unser Tool der Wahl ist GitHub, das null ist, Microsoft besitzt. Das macht es also zu einem wunderbaren Werkzeug. Einfache Integration auf alles ist wunderbar an YouTube. Es ermöglicht uns auch, Projekte öffentlich zu hosten damit andere mitkommen und Ihre Arbeit sehen und uns helfen können, es hilft uns, ein Portfolio von Projekten zu bauen, die auch für unseren eigenen Lebenslauf verwendet werden können. Wenn Sie also noch kein Github-Konto haben, können Sie fortfahren und auf Anmelden klicken. Es ist ziemlich einfach, eine zu erstellen, die Sie nur einen Benutzernamen, E-Mail-Adresse und Passwort benötigen , und einige Verifizierung und dann sind Sie in. Also habe ich bereits medizinische und so werde ich einfach voran und melden Sie sich an. Und ich gebe dir nur eine Vorschau auf meine Webseite. Sie sehen, dass sich das Repository auf der linken Seite befindet als Personen, die gefolgt sind. Es gibt einen netten Newsfeed darüber, was die Leute auf dem Weg tun. Wer folgt dir IQ und folgte ihnen. Und es ist nur ein wunderbares Werkzeug, um eine Beziehung mit anderen Entwicklern und der allgemeinen Open-Source-Community aufzubauen . Jetzt gehen wir zurück zu unseren Projekten, was wir tun werden, ist einfach diese Quellcodeverwaltung hinzuzufügen. Der einfachste Weg, dies zu tun, besteht darin, in die untere rechte Ecke zu schauen und Sie sehen, dass Sie die Quellcodeverwaltung hinzufügen. Wenn wir also darauf klicken, sehen Sie bekommt und was passiert ist, dass Sie eine Version von Git auf Ihrem Computer haben, aber dann können wir es auch mit GitHub synchronisieren. Also, wenn Sie das tun, wird es sagen, okay, während der lokale Pfad bitte anmelden, Sie sagten, ist das primäre Ziel. Wie ich schon sagte, es gehört Microsoft. Die Integration ist sehr einfach. So können Sie gehen voran und melden Sie sich in Silos, fügen Sie meine GuitarBot Kegel, und ich habe schon dort zweite ist autorisiert. Und sobald das erfolgreich war, waren sie gerade zu Visual Studio zurückgekehrt. Und du siehst einfach das Gefühl, alles zu laden. Der Repository-Name, können Sie eine Beschreibung jemand hinzufügen, um zu sehen, dass dies eine Bildungs-Web-API erstellt ist.NET Core 5. Irgendjemand stolpert darüber. Sie werden zu einem kleinen, einfachen Zeug kommen. Oh, das sind einige Bolzen. Nein, sie erlauben private Repositories. - Richtig. Wenn Sie also an einem Schulprojekt arbeiten oder wirklich etwas, das vertraulich ist, möchte ich nicht, dass die Welt darauf zugreifen kann. Du gehst weiter und verlässt den Spott Zustand. Ansonsten sind Sie auf Ticket. Also wollte ich das mit euch teilen. Lassen Sie es angekreuzt und dann wird es Ihnen zeigen, dass dies der direkte Link zum Repository sein wird. Also gehe ich einfach voran und klicke auf Erstellen und schieben. Und sobald das erledigt ist, gehe ich zurück zu GitHub und Trend View es. Nein, Sie können es hier leicht finden. Ich habe einige Repositories auf meiner linken Seite. Also, was ich tun werde, klicken Sie auf mein Displaybild, gehen Sie zu Ihren Repositories, und dann werde ich alle von ihnen in der Reihenfolge aufgelistet sehen , in der sie zuletzt aktualisiert wurden, richtig. Also hier ist meine Hotelliste und wir alle sind hier, OTA listet die Controller auf, alles, woran ich gearbeitet habe. Das werden also die ersten Hühner sein. Also, wie ich schon sagte, es hält alle Commits abgeschlagen. Jedes Mal, wenn wir eine Änderung vornehmen, können wir uns ansehen, was genau getan wurde. Und dies war das erste Commit, also mussten wir keine Nachricht hinzufügen, aber später werden Sie sehen, dass wir Nachrichten hinzufügen können, damit wir jedes Mal kommentieren können , wenn wir Code nehmen und sagen, das ist, was in dieser Version passiert ist. Damit haben wir also diese erste Phase abgeschlossen, um unsere Anwendung auf die Quellcodeverwaltung zu bringen. Sie können voran gehen und ein Read Me hinzufügen, so dass die Leute einige Menge an Anweisungen erhalten, es sei denn, das ganze Um Ihr Projekt zu verwenden. Wenn es etwas ist, das für jeden n jeder da ist, um zu verwenden. 12. Data und Entity Framework implementieren: Willkommen zurück. In dieser Lektion beginnen wir mit der Einrichtung unserer Datenklassen. Und durch Erweiterung oder Datenbank, die wir Entity Framework verwenden, das Microsoft.NET-Kerne Flaggschiff Object Relational Mapper oder ORM kurz ist. Und sie ermöglichen es uns, tatsächlich zu modellieren oder Datenbankklassen sind unsere Datenbanktabellen eher als C-Sharp-Klassen, und dann entwickeln unsere Datenbank basierend auf unseren Klassendefinitionen. Was wir also tun werden, um die Dinge zu beginnen ist die Erstellung eines neuen Ordners in unserem Projekt. Also klicken Sie einfach mit der rechten Maustaste, gehen Sie zum Hinzufügen und klicken Sie auf Neuer Ordner und wir rufen einfach diese Beta. Jetzt innerhalb von Daten, werden wir anfangen, in unsere Klassen zu setzen. Also unsere Hotelliste oder gut, APA wird wirklich, nur für pädagogische Zwecke, nur zwei Klassen oder zwei Tabellen, eine für das Land und eine für die ganze Kasse. Also im Grunde, wenn wir nach unserem Land suchen, sollten wir in der Lage sein, alle Hotels zu sehen, die mit diesem Land verbunden sind. Das ist im Grunde die Idee, nach der wir gehen, oder? Ich gehe also einfach mit der rechten Maustaste auf Daten, klicken Sie auf Hinzufügen. Und unsere erste Klasse wird Land sein. Also beachte, dass ich es auf eine einzigartige Art und Weise nennen werde, Land. Das nächste wäre das Hotel. Jede Klasse repräsentiert also eine Einheit, Land und ein Hotel. Bevor wir anfangen, die Felder für beide zu definieren, wollte ich nur alle Dateien an Ort und Stelle bringen und dann können wir einfach unseren Weg zurück arbeiten und sehen, wie alles zusammenhängt. Nachdem wir also unsere Klassen definiert haben, zumindest diese beiden, wollte ich einfach voran gehen und erstellen, was wir unsere DB-Kontext-Klasse nennen, richtig? Also werde ich es Datenbankkontext nennen. Und mach weiter und füge das hinzu. Und dann wird diese Klasse wirklich unsere Brücke zwischen unseren definierten Klassen oder unseren Entitätsklassen und der tatsächlichen Datenbank darstellen . Also Land, das ist eine Einheit, die Ford zu einem Tisch konstruiert wird, richtig? Was auch immer wir als Felder definieren, wird sich bald verdoppeln und das tun. Aber was auch immer uns anfühlt, werden Felder in einer Tabelle sein, die heißt, was auch immer wir gefangen werden. Also werden wir die Tabelle Länder nennen, weil die Tabelle ist effektiv eine Sammlung von Datensätzen vom Typ Land. Das gleiche gilt für Hotel, und das gleiche gilt für so viele andere Entitäten Schrägtabellen, wie Sie möglicherweise definieren müssen. Also das ist alles, was wir Code First Engineering nennen , wo wir tatsächlich den ganzen Code für einen Flur schreiben, denken, unsere Tabellen sollten aussehen. Und dann entwickeln wir unsere Anpassungen an der Tabelle entsprechend weiter. Nachdem wir diesen Datenbankkontext erstellt haben, müssen wir irgendwie mit Dingen ausgestattet sein , die es wissen muss, dass es die Brücke zur Datenbank ist. Das erste, was es wissen muss, ist, dass es vom DB-Kontext erbt. Nein, das wird einen Fehler geben, weil ich einige Werkzeuge holen muss. Aber dann, wenn ich Punkte kontrolliere. Sie sehen Visual Studio schlägt vor, dass Sie das fehlende Paket installieren, das Microsoft dot Entity Framework Core ist. Wenn Sie diese Aufforderung nicht sehen, KEIN Problem. Sie können immer einfach mit der rechten Maustaste auf das Projekt gehen erhalten, verwaltet Neue bekommt, und dann können Sie nach dem gleichen Paket suchen, gehen Sie einfach zu durchsuchen und geben Sie den Paketnamen ein und Sie würden es dort aufgeführt sehen. Also habe ich zwar funktioniert, aber während ich hier bin, werde ich nur alle Bibliotheken von hier bekommen. Das ist ich weiß, dass ich brauchen werde, also werde ich definitiv diese Bibliothek brauchen, also lade sie nicht. Und wieder einmal weiß ich, dass ich definitiv den Treiber für SQL Server brauchen werde, weil wir SQL Server-Datenbanken verwenden werden. Davon abgesehen gibt es andere für andere Datenbank-Engine, so dass Sie eine Fortsetzung Licht verwenden können. Du hast, ich habe Postgres gesehen, die hier nicht aufgeführt sind, nicht sofort, aber sie sind alle hier. Also werden wir SQL Server verwenden. Also geh ich voran und hole das. Und die letzte, die wir bekommen, zumindest für diesen Zeitraum, ist die Reihe von Tools, weil wir die Werkzeuge benötigen , um in der Zukunft einige Befehle ausführen zu können. Also werde ich einfach weitermachen und das auch installieren. Ordnung, also jetzt, wo wir fertig sind in New bekommt, wenn diese Salon zu überprüfen und installiert, wenn Sie den Filter löschen, werden Sie alles sehen, was Sie installiert haben. Das ist in Ordnung. Also werde ich zu meinem DB-Kontext zurückkehren und dann ging ich wieder zur Steuerung und Punkte und dann die Aufforderung, NO Gen enthält immer noch die using-Anweisung weil wir die Bibliothek an dieser Stelle bereits haben. Jetzt in einem fernen Repository, na ja, sorry, oder Datenbankkontext, was wir tun müssen, ist ein Konstruktor zu definieren. Also werde ich den öffentlichen Datenbankkontext sehen, oder ich hätte einfach tun können, Tar Wanne, Wanne zu sehen. Da gehen wir. Und dann werde ich den Parameter DB-Kontextoptionen nehmen. Dies wird also vom Startup-Plug weitergegeben. Wir haben das alles noch definiert, also passen wir es einfach an. NULL schreiben. Und dann muss Wasser, das ich tun muss, auch den Basiscontroller initialisieren, sorry, ein Konstruktor für den DB-Kontext, um die gleichen Optionen zu ergreifen. Nein, wir müssen nichts anderes in den Konstruktor legen , damit wir das einfach leer lassen und weitermachen können. Also habe ich gesagt, dass dies die Brücke zwischen unserer Anwendung in unserer Datenbank darstellt. So ist es hier, dass wir tatsächlich auflisten , was die Datenbank wissen sollte, wenn sie generiert wird. In kürzeren Worten sind also praktischere Begriffe. Ich wollte sagen, dass ein öffentlicher DB-Set die Daten dieser DB gibt, Datentyp, der in diesem Fall Land sein könnte. Und dann werde ich den Namen der Immobilie geben, was Länder sein würde. Der Name, den Sie hier geben würden, ist also der Name, den die Datenbank verwenden wird. So ist der Datentyp, soweit C-Sharp Gunter, betroffen ist Land. Aber dann wird die Datenbank. Definieren Sie eine Tabelle namens Länder und wann immer wir darauf zugreifen, wird es als Länder zugreifen. Das ist also eine geringfügige Sache. Ich meine, jeder hat seine eigenen Namenskonventionen darüber Leute einen gemeinsamen Buchstaben für ihre Tabellennamen verwenden. Das mache ich nicht gern. Ich mag es, meine Tabellennamen Plural und den Datentyp Singular zu halten weil dies ein Land ist und was bedeutet eine Sammlung von Ländern nach August, dass dB? Es ist eine Reihe von Ländern, egal wie Sie es rechtfertigen wollen, das ist meine Rechtfertigung. einmal regiert der Kontext alles. Also mache ich dasselbe für Hotel und Hotels. Nachdem wir all dies getan haben, müssen wir unseren störenden Dingen keine Verbindungszeichenfolge lassen. Die Verbindungszeichenfolge ist also im Grunde genauso, wie der Name schon sagt, als Zeichenfolge, dass alle Zeilen lochen, um zu der Datenbank zu gelangen, mit der die Anwendung eine Verbindung herstellen muss. Also, was ich hier tun werde, ist einen neuen Abschnitt zu erstellen und zu sehen, dass es ihm automatisch eine Verbindungszeichenfolge gibt, oder? Und da drin werde ich das nur nennen, nennen wir es SQL-Verbindung. Und die Verbindung wird Server gleich haben und wir haben lokale DB, die irgendwie in Visual Studio integriert ist. An dieser Stelle haben Sie möglicherweise eine eigene Datenbank, die Sie verwenden möchten. Wenn, wenn nicht, Sie ein Anfänger sind und Sie nur entlang ihnen folgen, können Sie diese verwenden, die standardmäßig deaktiviert ist, um viel mehr Installation tatsächlich zu tun, es ist bereits in Ihrer Visual Studio-Installation enthalten. An diesem Punkt, wenn Sie jedoch einen SQL-Server localhost haben, der mit einer IP-Adresse beginnt, würden Sie das als Serverwert anstelle von dem, was ich hier habe, einfügen. In Ordnung, aber weiter, wir definieren auch eine Datenbank Namen. Also die Datenbank, die wir suchen sollten Schrägstrich erstellen, ich werde es nennen, es ist Hotellisten. Fotoliste auf der Partitur dd. In Ordnung, also ist das der Name der Datenbank, mit der ich auf diesem Server unterbrechen möchte . Und dann nur noch eine sehr wichtige sind relativ wichtige Option, die integrierte Sicherheit ist. Und ich sage einfach gleich wahr. Das ist also alles für unsere Verbindungszeichenfolge. Das sieht so aus. So wird alles nach einer Weile zusammenkommen. Wir machen es nur Stück für Stück und bauen auf, wenn alles integriert ist. Unser nächster Schritt ist also, zu einem Startup zu gehen. Also habe ich gesagt, dass, wenn wir einen Kontext definieren, seine Optionen vom Start erhalten. Der Start muss also wissen, dass beim Start der Anwendung seine Datenbankkonfiguration von hier aus geladen und diese Datei als Verstoß verwendet werden sollte . Also, was wir tun werden, ist, einen neuen Abschnitt hinzuzufügen. Eigentlich können sie nur drei. Sind sie die Seele unterwerfen? Ich mag es, Controller als letzte oder nahe dem letzten hinzuzufügen, was ich in Konfigurationsdiensten mache. Also würde ich gerne alles andere machen. Ich füge Controller hinzu, damit Sie einfach voran gehen und diese Linie verschieben können. So Dienste Punkt DB-Kontext. Okay, also nenne ich es einen Datenbankkontext. Der Code, die Funktionen sind , sucht nach DB-Kontext. Und dann, was Spikes genommen hat, ist etwas vom Typ db Kontext. Dies ist also vom Typ db Kontexte. Dies ist mein DB-Kontext. Das ist, dass ich jemanden erstelle, wir übergeben das, da dieser Datentyp natürlich sucht, einschließlich fehlender Referenzen. Da gehen wir. Und dann sind hier die Teileoptionen. Also dieser Lambda-Initialisierer, der mittlerweile verwendet wurde oder uns von null nicht fremd ist. Also für Optionen werde ich sagen, verwenden Sie SQL Server. Alles klar, und denken Sie daran, dass, wenn Sie diesen Schnee bekommen intuitiv hinzufügen, dass SQL Server-Bibliotheken, wenn ich nur Punkte kontrolliere, Sie sehen, dass es die using-Anweisung enthält, Ordnung, also verwenden Sie SQL Server. Und dann wird es K. wissen wollen woher bekomme ich die Konfiguration? Also werde ich sagen Konfiguration. Rufen Sie Ihre Verbindungszeichenfolge ab. Da gehen wir. Und dann will das auch gehen. Sie werden sich App-Einstellungen ansehen. Es heißt also geben Sie Verbindungszeichenfolge, weil es bereits weiß, dass es einen Abschnitt für Verbindungszeichenfolgen geben könnte. Und ich sage, bekomme die Verbindungszeichenfolge mit diesem Namen. So können Sie tatsächlich mehrere Verbindungszeichenfolgen definieren, Sie benötigen nur ein Komma, trennen sie, und jeder muss seinen eindeutigen Namen haben. Und zu diesem Zeitpunkt könnten Sie tatsächlich anders konfigurieren. Es sind offensichtliche Kontexte für unterschiedliche Bedürfnisse. Unsere Basen in der CME-Anwendung, die nützlich sein könnte, wenn Sie API die Spanne mehrere Datenbanken benötigt. Es gibt also eine Reihe von Vorteilen, eine API zu haben, weil sie nicht darauf beschränkt ist, dass Taten auf einer Reihe von Interaktionen basieren, richtig? So erhalten Sie Verbindungszeichenfolge. Ich werde voran gehen und den Namen schließen alle Klammern, die geschlossen werden müssen. Und Farnell, ich glaube , wir haben später alles, was wir zurückkommen und das ändern werden. Wir brauchen einige andere Funktionen hinzugefügt, aber für keine zusätzlichen Semikolons. Und da gehen wir so weit, nein, wir haben alles, was wir brauchen. Bevor ich jetzt weiter gehe, werde ich mich einfach verdoppeln und wir werden unsere Klassendefinitionen vervollständigen. Also haben wir Hotel und wir haben Land. So Land. Und ich werde nur sagen, Wanne, Wanne wird einen Ausweis haben. Entity-Frameworks ist also, wenn Sie ein Feld namens ID erstellen, nehmen Sie automatisch an, dass dies der Primärschlüssel ist. In Ordnung, also haben Sie zwei Möglichkeiten. Sie können ID sehen oder Sie können den Entitätsnamen, ID sagen. Es wird automatisch sagen, OK, nun, ich werde dies nur als Primärschlüssel verwenden. In Ordnung, also ID genau da. Das ist der Schlüssel und sagen wir, Land hat auch Namen. Also Ländername und eine weitere Folie. Verwenden Sie einfach Steuerelement D, um diese Zeile zu duplizieren. Und wir sehen vielleicht Bereich oder Schärfen. Das ist nur in Kürze. Also in meinem Fall, die erste Skulptur, die ich in seine Jamaika setzen würde, und der kurze Name wäre j m. Und dann basierend auf dem Land, natürlich ist der kurze Name anders, oder? Das sind also die Felder, die ich erwarte, dass die Country-Tabelle beim Generieren der Datenbank haben wird. Also werde ich das retten und ich bin bereit, das Hotel Nr. Also, um zu beginnen, können wir nehmen und benennen, weil, ich meine, wir müssen den Primärschlüssel haben. Jedes Loch zu hat einen Namen, aber dann habe ich einige andere Felder hier, einschließlich Adresse, die Zeichenfolge ist, die Bewertung, die eine doppelte ist, und dann Fremdschlüsselreferenz zu unserem Land. Lassen Sie mich das erklären. Wenn Sie also über Datenbanken wissen, wissen Sie, dass der Primärschlüssel eine eindeutige Kennung für jede bestimmte Tabelle ist. Der Fremdschlüssel stellt eine eindeutige Referenz dar oder ist möglicherweise nicht eindeutig, aber es ist ein starkes Referenzwerkzeug. Ein weiterer Datensatz in einer anderen Tabelle. Mit anderen Worten, jedes Hotel muss in einem Land sein. Also haben wir das Hotel, wir geben ihm den Namen, seine Adresse, Geschichte, Essen, aber dann lassen wir es wissen. Wir geben hier eine ID, die einer Länderkennung entspricht. Okay, also müssen wir zwei Felder definieren. Wir haben auf Datenannotation hier. Also quadratisch, wo ist Fremdschlüssel und Sie geben ihm den Namen, den Sie wollen. Also könnten Sie dieses Fremdschlüsselfeld tatsächlich unter einem anderen Namen geben, wenn Sie möchten. Es ist gleich, dass Sie Ihren Namen manuell eingeben oder in diesem Fall gebe ich ihm nur den gleichen Namen wie die Klasse, auf die es verweist. Also benennen Sie, was auch immer Klasse ist, richtig? Dann haben wir zwei Eigenschaften. Wir haben Land als Objekt, und dann haben wir Land ID als Ganzzahl. Also Country Id ist die schwierigere Referenz, die die ID auf dem Tool bewertet ist , macht drei et cetera. Welches Land die tatsächlichen Objekte repräsentiert. So können wir hier alle Details einbeziehen. Wenn wir uns ein Hotel ansehen, wenn wir den Namen des Landes kennen wollten, ist alles, was wir nativ im Hotel haben, die Container-ID. Aber dann können wir dieses Objekt mit allen Details füllen. So können wir sagen, Hotel dot country, dot, was auch immer Eigenschaft es ist, dass wir in unsere Beta aufnehmen möchten. Dies ist also eine nette und einfache Möglichkeit, Juan einen Fremdschlüsselverweis auf eine andere Tabelle erstellt. Und um sicherzustellen, dass, wenn wir eine Abfrage für eine Tabelle ziehen , die überall Fremdschlüssel hat, wir alle Details hier aufnehmen können, ohne zu viele unordentliche innere Joins zu schreiben und durch Reifen springen zu müssen, um eingeschlossen zu werden. Es. Nun, da wir alle diese Details definiert haben, lassen Sie mich einfach einen kurzen Durchlauf machen, nur um sicherzustellen, dass wir alle auf der gleichen Seite sind. Wir haben unseren Ordner Daten genannt, in dem wir alle leisten Domain oder Datenbank bezogene Objekte speichern werden und zog alle , die innerhalb dieses Ordners namens beta gespeichert werden. Später können wir uns vielleicht ein eigenes Projekt ansehen. Aber für null, es sind nur drei Dateien sind ein paar Anzahl von Boden, wir müssen nicht all das tun. Daten haben also eine Datei namens Land, die die Tabelle unseres Landes definiert. Und eines namens Hotel, das den Hoteltisch definiert. Wir haben auch den Datenbankkontext , der von BB-Kontexten mit freundlicher Genehmigung von Entity Framework Core erbt , der wieder einmal als Brücke zwischen bereits in Klassen und der eigentlichen Datenbank fungiert . Ordnung? Wie kommt es zur Datenbank? Nun, eins, wir haben die Verbindungszeichenfolge, die definiert, wo wir suchen, wonach wir suchen und ja, suchen Sie nach seiner Sicherheit, richtig? Das ist also unsere Verbindungszeichenfolge. Andernfalls möchten wir beim Start den DB-Kontext hinzufügen oder diese Brücke zur Datenbank mit freundlicher Genehmigung aus dieser Datei hinzufügen. Und diese Datei sollte diese Verbindungszeichenfolge verwenden. Okay, tut mir leid, ich hatte gerade eine zusätzliche Klammer, die gerade entfernt wurde. Okay, also lassen Sie uns einen schnellen Build machen, bevor wir mit der Entwicklung unserer Datenbank fortfahren. Und um einen Build zu machen. Und Sie können Control Shift halten und B drücken, oder Sie können gehen, um hier zu bauen und eine Lösung zu erstellen. Aber wir haben einen erfolgreichen Gesetzentwurf. Gehen wir also zur Package Manager-Konsole. Wenn Sie dort nicht sehen, können Sie immer zu Tools gehen und neue Paketmanager und Package Manager-Konsole erhalten. Ordnung, hier ist also, wo InOrdnung, hier ist also, wo die Entity Framework Core Dot Tools Library nützlich weil es uns erlaubt, bestimmte Befehle hier auszuführen, um das Gerüst zu erleichtern. Und das ist es, was es heißt in die Datenbank eingebettet, lesen Sie die Generierung der Datenbank. Wir müssen bestimmte Befehle ausführen. Also, was wir tun müssen, ist zuerst hinzufügen, was wir eine Migration nennen, sagt es, fügen Sie Dash-Migration hinzu. Wenn Sie mit der Eingabe einer Drucktabelle beginnen, wird es eine Art automatische Vervollständigung. Und dann werde ich sagen Schaffung, sagen wir Datenbank erstellt. In Ordnung, also fügen wir Migration hinzu, B2B wird erstellt. Dies wird also im Grunde wie Manifest oder eine vorläufige Datei erzeugen , um zu sehen, dass es generiert und CM einen Fehler erhält. Das ist also gut. Es ist gut, wenn wir diese Pfeile sehen und wir durch sie gearbeitet weil manchmal, wenn wir durch perfekt gehen, wir nicht wissen, was mein Topping. Ordnung, also hat dieser Pfeil mit dem Landgut in der Hotelklasse zu tun. Und ich glaube, das sagt uns die Bestellung. Also, was ich getan habe, ist, es neu zu ordnen. Also hatte ich die Idee unter dem Grundstück. So sieht es anfangs aus. Also werde ich nur neu anordnen, indem ich die Eigenschaft, die Integer-Eigenschaft, nehme und sie direkt unter die Annotation für einen Fremdschlüssel lege und verschiebe, die nicht. Und so wie Sie sehen können, können unsere Tomaten mit einigen Dingen empfindlich sein. Mal sehen, ob das funktioniert. Ich werde nur diesen Befehl und die Migration erneut ausführen. Und wir bekommen eine völlig andere Stimmung, wo es sieht Mühle begann erfolgreich. Und das ist genug Schnee, den du das Wochenende rückgängig machen wolltest, was bedeutet, dass es richtig gemacht wurde? Also hier haben wir unsere Migrationsdatei und dann sehen wir, dass wir einen neuen Ordner namens Migrations haben. Und was es tut, ist Snapshots von jeder Instanz der Datenbank zu machen. An dieser Stelle definieren wir unsere Tabellenländer mit diesen Spaltenattributen und diesen Eigenschaften. Und wenn du es dir genau ansiehst, will ich nicht, dass wir es zu sehr analysieren, weil es überwältigend sein kann. Aber wenn man es als jemanden betrachtet, der mit der C-scharfen Sprache vertraut ist, merkt man, dass es nichts Außergewöhnliches sieht. Sehen wir haben eine Tabelle oder wo die Erstellung einer Tabelle, schreiben Sie den Namen davon ist Länder basierend auf dem, was wir im DB-Kontext definieren, oder? Länder, dass die Spalten in der Tabelle id sein sollten, die Spalte vom Typ int ist. Und wir definieren es als Identität, die um eins erhöht wird. Alles klar, das ist alles, was es wirklich tut. Name ist eine Zeichenfolge, die als invar char definiert werden sollte, da in SQL Server eine Zeichenfolge wirklich invar char und short_name invar char ist, richtig? Da. Wir sind, es könnte Kontrollen geben, die wir unsere eigene Maye-Day-Größe setzen könnten und wenn es NULL-fähig ist, oder? Aber das sind Dinge, die wir später betrachten können. Letztendlich sehen wir aber, dass wir unsere Migration haben. Und es sieht gut aus. Der nächste Schritt wäre also, die Datenbank tatsächlich zu erstellen. Alles klar, was wir tun werden, ist, zurück zu unserer Package Manager-Konsole zu gehen und rho und aktualisiert die Datenbank und geben Ihnen ein paar. Und dann, wenn es fertig ist, wird es JETZT mit einem einfachen getan. Also, wie überprüfen wir? Vergewissern Sie sich. So können Sie zum SQL Server-Objekt-Explorer gehen. Ich habe es hier offen. Wenn du es nicht haben willst. Dort gehen Sie zu Ansicht und wählen Sie SQL Server-Objekt-Explorer. Also gehen wir im Server Object Explorer zu dem Server, von dem ich gesagt habe, dass er in Visual Studio integriert wurde , der lokale DB Schrägstrich MS SQL, lokale DB ist. In Ordnung, so können Sie das erweitern, gehen Sie zu Datenbanken und dann sehen Sie die Datenbank dort aufgelistet, Hotelliste DB. Und wenn wir auf Andrew-Darlehen bohren, werden Sie unsere Länder sehen. Sie werden auch sehen, dass sie alle Migrationen verfolgen. Also jedes Mal, wenn wir eine Änderung an der Klasse machen, die sagen, jemand kam und sagte alles, wir müssen Land erweitern, müssen wir auf Vorwahl setzen, rechts, oder Bereich des Codes, was auch immer es ist, dann fügen Sie ein neues Feld, erstellen Sie eine neue Migration, aktualisieren Sie Datenbank, Sie werden eine weitere 5A erstellen. Dies zu sagen, dies ist die Änderung vorgenommen werden sollte und dann werden Updates offensichtlich voran gehen und diese Änderungen in Ihrem Namen vornehmen. Das ist gut in einer Entwicklungsumgebung, in einer Produktionsumgebung, nicht so sehr. Es gäbe weit mehr Kontrollen sind auf Eis. Aktualisierungen an der Datenbank werden behandelt. Gekauft Farnell, wenn wir von Grund auf neu bauen, ist es gut, Ganze zu verstehen, um das effizient zu machen. Also, das ist es für nein, was wir heute getan haben, war, dass wir unsere Datenklassen sind Domänenklassen definiert. Wir richten unseren DB-Kontext ein. Wir haben das alles von Grund auf neu gemacht. In Ordnung, und das ist gut. Es ist gut zu verstehen, wie alles Kliniken. Also haben wir den Datenbankkontext, die Klassen oder die DB-Sets und respektierte Meme, ich erinnere mich, was Sie die Eigenschaften hier nennen, das wird die Tabelle aufgerufen. Wenn Sie die Migration rückgängig machen müssen, wird sie etwas schwierig. Denn wenn Sie nur eine Remove-Migration durchführen, erhalten Sie einen Pfeil, auf dem Sie feststellen, dass die Migration bereits angewendet wurde. Sie müssten also diese Änderung auf die Datenbank insgesamt zurücksetzen, was da sie in den Jom-Stadien ist, Sie könnten genauso gut einfach voran gehen und die Datenbank löschen, Änderungen erhalten, eine neue Migration, und führen Sie eine Update-Datenbank, richtig? Wenn Sie also die Datenbank nicht benötigen, wird Entity Framework Ihnen nicht nur sagen, dass etwas angewendet wurde, also muss ich nicht dort bewertet werden, es würde eine Inter Move-Migration ermöglichen. Sie können Änderungen an allen Klassen erhalten, als Sie alles erneut tun , Migration hinzufügen, aktualisieren und dann würde es die Datenbank mit IA Änderungen durchbrechen. Andernfalls, wenn es nicht so ernst ist wie bei der Migration, wollten Sie nur etwas hinzufügen oder entfernen. Sie gehen voran und nehmen Ihre Änderungen an Ihren Domain-Klassen entsprechend vor. Dann fügen Sie Migration, aktualisierte Datenbank hinzu, und es wird wieder einen Snapshot an jedem Punkt. Also, wenn wir zurückkommen, werden wir das ganze Wochenende c, d, eta in die Tische schauen . Das heißt, wenn die, wenn die Migration stattfindet, wir nur Daten einfügen, bevor wir überhaupt in die API gelangen, weil es schön ist, Testdaten dort zu haben bevor wir beginnen, Daten durch unsere tatsächlichen Tests der API einzugeben. 13. Seed in Tabellen: Hey Leute, willkommen zurück. In dieser Lektion werden wir also einen Prozess durchlaufen, der Seeding genannt wird. Seeding ist also, wo wir einige Anfangsdaten für die Datenbank zur Verfügung stellen. Und was wir tatsächlich tun werden, ist nur harte Code einige Datensätze, dass, wenn wir eine Migration danach durchführen, wird die Migration Anweisungen haben, die diese Datensätze erstellen. Hat die Datenbank mit diesen Datensätzen. Und es wird sich nicht unbedingt auf Benutzereingaben verlassen. Zumindest wird das eine nette Grundlage für unsere Tests bieten , wenn wir mit der Entwicklung der API-Endpunkte beginnen. Was wir also tun wollen, ist zu unseren Datenbankkontexten zu gehen und wir werden eine geschützte Methode überschreiben, die wirklich innerhalb der DB-Kontexte ist. So geschützt über bei Lücke beim Erstellen von Modellen. Und wir übergeben den Parameter ModelBuilder und ich nenne ihn nur Builder. Und dann, was wir sehen werden, sind einige der Labor-Builder Punkte in Dy. Und dann muss ich angeben, mit welcher Entität ich es zu tun habe. Wir haben gegensätzliche Web-Hotelländer selbst zu existieren, für Hotels zu existieren. Und das liegt wirklich daran, wie wir unsere roten Karten definiert haben, oder? Also sagte er im Gegenteil und im Hotel hat einen Fremdschlüssel, also müssen wir den Vertrag haben, bevor wir in diesen Fremdschlüssel setzen können. Also sagen wir einfach Entity, Land Punkt hat Daten. Oh, es tut mir leid, ich vermisse da einen Schläger-Peer. Richtig. So Entität im Gegensatz. Und dann öffnen und schließen Klammer hat die ITER-Daten, sorry, öffnen und schließen Klammer. Und dann werden wir im Inneren eines Bewusstseins definieren. So können wir so viele definieren, weil es ein Array benötigt, also hat es die, es braucht wirklich ein Array vom Typ Land. So können wir hier ein paar Datensätze definieren. Also werde ich nur drei definieren. In Ordnung, also neues Gegenteil, das mit ID erforderlich ist, ist gleich eins. Und wieder einmal setzen wir die Daten ein, so dass wir alle diese Werte manuell bereitstellen müssen. Und das ist der erste Clincher, der ich boote und der kurze Name ist J m. Und ich werde das einfach kopieren und einfügen. Reduzieren Sie die Eingabe. Das wird also zwei sein und das wären drei. Und der nächste, mal sehen, Bahamas. Und der kurze Name für Bahamas, wenn ich mich nicht irre, ist B, s. Und dann wäre der nächste Cayman Island. Einige haben die Wahl eines Reiseziels, einige beliebte Touristenziele, wo Sie wahrscheinlich wissen wollen, welche Hotels es gibt, oder? Der Kurzname für Cayman Islands wäre also CI. Ordnung. Wenn ich nicht so genau bin, dann können wir später ein Kinderbuch für null erwerben. einmal, das sind freigestellte Aufzeichnungen, richtig? Also habe ich das für das Land gemacht. Ich würde nur wiederholen, dass Feeds für die Hotels, richtig? Also bin ich nur, Ich habe gerade MPI kopiert, ist das der größte Teil des Codes. Und beachten Sie, wenn ich dies in Hotel ändere, wird es die erwarteten Parameter ändern um Hotel zu tippen oder ob es sich um ein Objekt handelt, weil es hier keine Hotels gibt. Also, das ist in Ordnung. Wir ändern einfach das alte Foto. In Ordnung, ID-Name. Was hatten wir sonst noch für das Hotel an der Adresse? Also lass mich das holen. Das sind also einige dieser Resorts vor Ort. Also bin ich mit einigen von ihnen nicht vertraut. Kleid lässt uns kurz halten und C und den Grill. Wir kennen das Land bereits. Das Land ist Jamaika Subkultur ID wäre eins. In Ordnung. Und dann ist das Raid-Team das letzte Mal. Ich hörte, es würde 4,5 sagen, aber ich weiß, es ist ein Fünf-Sterne-Resort. Also werde ich nur diese Details kopieren, nicht. Ordnung. Also haben wir ein Hotel für Jamaika. Ich meine, legen Sie einfach ein Hotel pro Land ein, nur um sicherzustellen, dass wir direkt über uns verteilt sind. Und ich werde nur etwas für Sunda, weit Bahamas, ausgleichen. Also Bahamas, sagen wir, sie haben Grand Palladium. Also weiß ich, dass Grand Palladium ein Hotel in Jamaika ist. Aber zum Beispiel, krank, wir stellen es dort hin oder setzen es auf ihre eigene Polizei, es tut mir leid. Das sollte also länderspezifisch sein, lassen Sie uns das tun. Und das ist ein vier Sterne. einmal, das ist nicht verdammt, um offene Daten zu machen, oder? Also für Höhlenmenschen, sie haben Komfortsitze. Und Juristen, sagen wir George Tone, die Clincher-ID ist 34 Höhlenmenschen und sie essen 4,3. Ordnung. Das ist also eine Abgabe einiger Daten in die Datenbank, damit dies korrodiert werden kann. Du würdest es einfach so zusammenbrechen. Es nimmt also nicht zu viel Platz ein. Oder was ich dazu neige, ist es tatsächlich unter die DB-Set-Definitionen zu verschieben. Also, wenn ich komme, um Änderungen an den DB-Sets vorzunehmen, kann ich sie immer einfach oben stapeln. Ich muss nicht den ganzen Weg darüber hinwegscrollen. Es gibt Möglichkeiten, dies möglicherweise nicht Angelegenheiten zu extrahieren und die Konfigurationen auch aufzurufen. Aber dann ist dies nur ein schneller Gewinn, ein schneller Weg, um die Daten in der Datenbank zu sehen. Nun, da wir ein paar Tests zu Datensätzen definiert haben, ist das nächste, was wir tun möchten, eine Migrationen hinzuzufügen. Also bin ich bereit, zu migrieren. Und das hier nennen wir diese Abtretungsdaten, richtig? Also beachte, dass jeder Tod der ADA-Migration und ich versuchte, beschreibend genug mit dem Namen zu sein, so dass man sagen kann, oh, das ist, was an diesem Punkt passiert ist. Es ist also fast wie die Quellensteuerung für die Daten, richtig? Und wenn Sie sich diese Migrationsdatei ansehen, werden Sie hier tatsächlich sehen, wo es heißt, Daten in diese Tabelle einfügen. Und das sind die Spalten, und das sind die Datenwerte, richtig? Also wird es weitergehen und all das tun, richtig? Ich weiß nicht, warum ich meine Vier-Punkt-drei auf 4.299 drehen und es ist nicht sicher warum, aber so wird es neu formatiert, so dass er die Einfügungen machen kann. Das nächste, was wir tun möchten, ist die Datenbank zu aktualisieren, so dass eine effektiv die Befehle in der Migration ausführen kann. Also sagte es getan. Was ich tun wollte, ist zu meinem Objekt-Explorer zurückzukehren und dann werde ich mit der rechten Maustaste klicken. Und V wäre auf dem Tisch des Landes. Und da gehen wir. Wir haben Daten in unserer Datenbank, so dass wir erfolgreich erstellt haben oder drei Länder. Und wir können uns die passenden Hotels ansehen. In Ordnung, so können Sie Anfangsdaten in Ihre.net-Kernanwendungen mit Entity Framework Core und dem DB-Kontext einfügen. 14. Repositories und Repositories: Willkommen zurück. Also nirgends auf dem Punkt, unsere Repositories zu erstellen und was wir implementieren werden, ist das Entwicklungsmuster wirklich. Also lassen Sie mich einfach etwas geben, aber wachsen und uns, warum wir das durchmachen müssen. Wenn wir unsere Arbeit mit unserer API machen, ist es einfach genug, die Abfragen einfach mit Entity Framework, Core und Link zu schreiben. Und wir schreiben es einfach besonders wie Ballon. Sie haben zwei Tische im Streit, mit denen unser Land und ganze Ito. Was passiert, wenn wir 891020 Tische haben? Es wird irgendwie mühsam jedes Mal, wenn wir eine Tabelle haben, Abfragen zu schreiben, und dann wird das zu Wiederholungen führen. Und dann, wenn wir die gleiche Abfrage mehrere Orte haben, dann ist das ein Wartungsalptraum, R3. Deshalb werden wir ein Muster implementieren. Und wir werden das generische Repository-Muster zusammen mit dem UN selbst wertvollen Muster-Tool verwenden , der einen Container erstellt um grundlegende Funktionen zu definieren, die über alle unsere Tabellen und alle unsere Datenbankoperationen in unserem -Projekt. Um loszulegen, werde ich zwei neue Ordner erstellen. Einer würde i genannt werden, i Repository und der andere wird Repository genannt, richtig? Also haben wir ich Repository. Und das wird ein Kapital I. Und dann werden wir noch eine haben, die ich nur Repository nennen werde. Es gibt also ein Konzept namens Trennung von Bedenken, bei dem Sie sicherstellen möchten, dass Sie jemals Datei wissen, dass es eine Sache tut. Deshalb haben wir darauf geachtet, zwei verschiedene Klassen zu definieren. Dafür werden wir einige Anzahl einzelner Klassen auf dem Weg dessen definieren was sie sicherstellen wollten, dass bestimmte Dinge generische Art sind , die bestimmte Dinge nicht wiederholen, oder? Also in unserem Augen-Repository werden wir eine Schnittstelle erstellen. Jemand erstellt eine Klasse, weil das einfach schnell ist. Aber ich werde es nennen ich generisches Repository. Und gehen Sie weiter und klicken Sie auf Hinzufügen. Und ich werde nur so auf Schnittstelle ändern. Und wenn Sie die Schnittstelle gewählt haben, wird es uns gut gehen. Das Einzige ist, dass du daran denken musst, öffentlich zu machen, oder? Das ist also der andere Grund, warum sie utils Klasse vergessen wurde, in der Vergangenheit öffentlich zu setzen und das konnte nicht verstehen, warum ich den Pfeil bekommen bekam. Das ist also mein kleiner Ausfallsicher, basierend auf meinen Erfahrungen. Was wir also tun werden, ist, dass dieses generische Repository einen generischen Parameter und in Form von t nimmt, wo t eine Klasse sein wird. In Ordnung? Also werde ich über Generika reden. Das sagt nur, nun, ich bin bereit, jede Art von Klasse zu nehmen, die Sie mir schicken. Und das hilft uns, diese Bienenoperationen für verschiedene Situationen mit verschiedenen Klassentypen zu schaffen . In Ordnung? Also der erste, den wir eine Funktion namens get Sowell erstellen werden, bekommt. Ordnung, also werde ich sagen, Aufgabe I, Liste vom Typ T wird, Ordnung, und dann werde ich bestimmte Dinge definieren. Lassen Sie mich also genau erklären, was in diesem Funktionsheader vor sich geht. Also Aufgabe, während wir es mit einer synchronen Programmierung zu tun haben, müssen wir Stoßzähne verwenden, wenn Sie einen Pfeil bekommen, weil Sie nicht wollen, dass diese Bibliothek, die dort hervorgehoben ist, haben. Welche Punkte, wissen Sie, Sie tun einfach kontrollierten Punkt und wir gehen voran und verwenden Anweisungen. So Aufgabe I, eine Liste vom Typ t, wieder generisch und der vollständige SHA-1-Name wird alles. Also bekommt alles einen Parameter, für den ich die fehlende Referenz einschließen werde, die vom Typ, Ausdruck, Funktion und Ausdruck ist , und wir machen es zu einem optionalen Parameter. Es wird auch nehmen und ich abfragbar, ich abfragbar vom Typ T, ich habe abfragbar bestellt. Okay, also kannst du einfach die Hawaii-Gewohnheiten neu schreiben und BY bestellen, das ist auch optional. Und dann haben wir die Fähigkeit, einzubeziehen, wenn wir müssen. Alles klar, dann werde ich eine Follow-up-Funktion für Get haben. So wird Aufgabe T, also wird dieser eine Liste bekommen. Das hier bekommt nur eins, richtig. Deshalb ist es Aufgabe t und unehrliche Aufgabe, die ich auflisten. Also dieser wird nur einen Datensatz bekommen und es nimmt den gleichen Shun-Parameter. Und es wird die Include so auf, wo Fischerboote, die, die eigentliche Funktion dann werden Sie verstehen, was der Parameter wirklich betäubt ist. Wir werden ähnliche formale Sean's für unsere rohen Operationen haben. Also werde ich Aufgabe T und T D einfügen also wird das derjenige sein, der erstellt werden soll. Wir werden den Bereich einfügen. Also halte ich das gerne in der Nähe. Es geht manchmal beide Operationen aus. Und anstatt dies mehrmals aufzurufen, könnten Sie einfach eine definieren, die mindestens und es nur diejenigen das Handgelenk nimmt. Wie auch immer, wir haben Löschen und führen drei Zoll. Ordnung. Und aktualisieren. Ich mag es aber nicht. Die Baumverletzung im Buch, wir haben das Update. Beachten Sie also, dass die Aufgabe, die zu löschen ist Aufgabe, all dies sind Gedanken, aber diese beiden sind nichtige Operationen. Okay, das war's also für unser generisches Repository. Also wieder, dies wird als b Skizze definiert, egal welchen Datentyp, wenn wir fünf weitere Tabellen und eine begleitende Domain-Klassen einführen, müssen wir hier nicht wirklich viel ändern, weil diese Funktionen in Ordnung wären behandeln jede andere Tabelle unserer Domain. Kosten, die durchkommen. Und wenn ich weiß, dass wir die Schnittstelle haben, werde ich voran gehen und den Beton erstellen. Also, was ist das Ziel? Was ist eine Repository-Klasse? Ich bin nur Timings für die tatsächliche Klasse und ich nenne es generisches Repository sub i generisches Repository. Und nein, ich habe nur generisches Repository und generische Repositories, die zu demselben generischen T gehen. Was wird auch vom generischen IEEE-Repository erben, wo t ein GAS ist. Ich werde nur voran gehen und die fehlende Referenz direkt dort einfügen. Und dann geht es zur Firma nein, denn sobald wir erben, Wir müssen sicherstellen, dass wir implementieren. Also werde ich nur voran gehen und die Schnittstelle implementieren. Und dann generiert es alle diese Methoden Stubs für mich auch freundlich. Also lasst uns frisch. Oh, das ist genau das, was wir hier brauchen. Also müssen wir das tun und werden keine Abhängigkeitsinjektion haben. Also habe ich erwähnt, dass, wenn ich es vorher habe, ich es nicht viel erwähnt habe. Dependency Injection ist im Grunde das Konzept, mit was wir in den Start geladen haben, ist jetzt verfügbar Anwendung weiß. Wir müssen also nicht jedes Mal instanziieren, was wir brauchten. Alles, was wir tun, ist, einen Verweis auf das bereits vorhandene Objekt zu machen , weil es in unserem Start definiert wurde, oder? So sind mehr Kontexte zu früh oder Verbindung unsere Brücke zur Datenbank. Wir können wissen, nur eine Kopie davon in unserer Datei zu verwenden , anstatt zu versuchen, eine ganz neue Brücke zu erstellen, halten eine Instanz dieser Brücke. Kendalls Hebel, derjenige, der als Folge davon existiert , dass es in die Startprozedur aufgenommen wird. Okay, das ist, das ist auf den Punkt gebracht. Welche Abhängigkeitsinjektion lesen hilft uns zu tun. Was wir also tun werden, ist, einen privaten Lesezugriff zu definieren. Es ist privat, es ist nur gelesen, weil sie keine Änderungen daran vornehmen müssen. Und es wird eine Instanz der Datenbank sein. Kontexte. Zu den Rechten gehören fehlende Referenzen. Da gehen wir, privat schreibgeschützt, und ich werde es nur unterstrichen Kontext nennen. In Ordnung? Und dann werde ich auch diese Neun duplizieren, weil ich EDL Andy eingeben wollte. Ich will DB setzen. Denken Sie daran, dv set kommt aus dem gleichen Datenbankkontext. Und es wird für ein Generikum definiert werden. Also werde ich einfach voran gehen und die fehlende Referenz dort auch den b Satz vom Typ T einfügen, und ich werde diesen einen dB nennen. Nein, diese sind für diese Klasse definiert. Abhängigkeitsinjektion NOW erfordert jedoch, dass ich einen Konstruktor erstellen muss. Und es wird einen Parameter vom Typ Datenbankkontext nehmen. Und ich werde in der Insula ändern, die private so ehrlich erzielte diese nicht. Und dann, nachdem Sie diesen Parameter genommen haben, ist es nein, es ist nicht auf die eine Kopie von den Seiten oder Prozedur zugreifen. Für meine lokale Verwendung werde ich meine aktuellen Kontexte initialisieren, in denen ich nur meinen privaten Lesezugriff habe, um den gleichen Wert zu haben wie der, der injiziert wird. Das ist also ziemlich viel Abhängigkeitsinjektion für den Fall, dass das ein Rätsel für Ihren Punkt war. Weißt du, so funktioniert es im Grunde. Es gibt andere Nuancen. Aber für null muss es nicht viel komplizierter werden als das. Also der nächste ist auf der Partitur DBE wird gleich dem Kontext sein, obwohl ich Kontexte initialisiert habe. Ich kann Kontext sagen, geben Sie mir eine Reihe von allem, was t ist. Und denken Sie daran, dass an dieser Stelle T braucht im Grunde noch etwas entsprechen, das in unserem dB skizziert wurde. Setz dich, in unserer DAW ist Kontext. Ordnung? Deshalb kann ich zuversichtlich sagen, gehen Sie in die Kontexte und geben Sie mir eine Reihe von was auch immer das ist. Weil ein Kontext nicht darüber wissen sollte, bis wir dieses Repository erstellen. Also wissen Sie, dass wir diesen Teil erledigt haben, lassen Sie uns auf unsere Implementierung gehen. Also lassen Sie uns das Löschen, das ist ziemlich einfach allein gewinnt. Dies ist var Entität ist gleich. Und dann warte ich, ich warte. Also, weil sie asynchrone Programmierung nach einem Weizen machen. Also habe ich Pflege geworfen. Was ich vermisse, ist das asynchrone Schlüsselwort, bevor es in Ordnung ist, wann immer Sie eine Aufgabe haben, die Sie verwenden werden, o es nafta async, in Ordnung, beachten Sie, wenn eine Clique eine, die andere hervorgehoben wird, gehen sie Hand in Hand. Ordnung? Also sagen Sie, oh, es unterstreicht DB dot find, und ich werde es nur finden, async finden. Also indoktrinieren Kern, sorry, in Entity Framework oder für fast jede Operation haben Sie eine entsprechende asynchrone Operation. Also an diesem Punkt ist es da, benutze es. Und wenn Sie async verwenden, müssen Sie es mit erwarten vorangehen. Und durch die Erweiterung muss die Methode, bei der dieses Schlüsselwort „await“ verwendet wird , eine Senke auf den Stopps der Methode haben. Es ist also nicht in der Schnittstelle, es ist nicht in der Schnittstelle, sondern in der Definition. Und das musst du haben. Wenn Sie mehr und mehr schreiben, werden Sie den Dreh davon bekommen. Also werden wir feststellen, ist sinken und wir werden die ID für den Datensatz übergeben, den wir finden möchten. Und dann sagen wir db dot entfernen. Und wir verschieben die Entität, die nicht mit dieser ID gefunden wurde. Und das ist es für unsere Löschung. Bereich löschen ist ziemlich eine Zeile. Es wird nur db dot entfernen Bereich sein. Also haben wir eine Liste von Entitäten. Also werde ich sagen db dot, remove, range und remover und sagt, na ja, gib mir die Liste der Entitäten. Nun, es gibt die einzigen Dinge, die Entitäten sie einfach entfernen. In Ordnung. Das ist es für den Entnahmesortiment. Also werde ich voran gehen und irgendwie durch die leichteren gehen. So ist das Einfügen einfach, Einsatz Wut ist einfach und Update ist einfach. Und dann gehen wir zurück zum Get und sie bekommen alles, weil die komplizierter werden können. Also werde ich jeder Aufgabe im Methodenkopf mit dem Schlüsselwort async vorangestellen. Das hier ist Leere. Ich brauche dort keine asynchrone. Stellen Sie einfach sicher, dass ich später keine Schwierigkeiten habe. In Ordnung, also für den Einsatz, dass man ziemlich einfach ist. Alles, was wir sehen werden, ist ein Gewicht db Punkt hinzufügen async, und wir fügen die Entität hinzu, was auch immer als Daten darauf kam. Das ist alles, was wir tun müssen, oder? Und dann Ähnlichkeit für den Einfügebereich tun wird, ist db Punktbereich async. Also dieser hat eine asynchrone, Notiz oder Verschiebungsanordnung hatte keinen Asynchron. Richtig. Also bei arrangieren Sie eine Senke und die Liste der Entitäten, die Sie hinzufügen müssen. Und dann für unser Update haben wir eine zweiteilige Operation. Erstens, ich werde die Entität an die Datenbank anhängen. Mit anderen Worten, wenn die Daten überkommen, werden sie möglicherweise nicht angehängt oder es kann ein Objekt sein, das im Speicher vorhanden ist , ohne direkte Verbindung zur Datenbank zu diesem Zeitpunkt. Also, ich berühre bedeutet, achten Sie darauf und überprüfen Sie, ob Sie es bereits überprüft haben, ob es einen Unterschied zwischen ihm und was Sie in der Datenbank haben , weil das Wearable, um ein Update zu tun, richtig? Dann fängt es an, zu sehen, dass bestimmte Felder gibt, die unterschiedlich sind. Das sind also zwei verschiedene, sagen wir rote Karten, oder? Und dann würde die nächste Zeile Kontexte Punkt-Eintrag sagen. Und dann referenzieren wir Entity Punktzustand ist gleich, um es zu ändern. Wenn wir es also einmal sagen, dass es in Ordnung ist, wurde es nicht geändert, dann wird es das wissen. Okay, ich muss ein Update dafür machen. Also lasst uns zu unserem Git gehen. Git ist eigentlich einfacher zu tun, als zu allen zu kommen. Aber wenn Sie bekommen, dann bekommen alle Omega ein bisschen mehr Sinn. Also das erste, was ich tun werde, ist ein Auge abfragbar zu bekommen. Ich wollte es Abfrage nennen, was sich im DB-Server befindet. Aber DBs haben bereits definiert, was auch immer es ist Datentyp, mit dem wir es zu tun haben, oder? Es erhält also alle Datensätze, die sich in dieser Tabelle befinden. So ziemlich genau das wird das tun. Und dann werde ich überprüfen, ob es ein Includes gab. In Ordnung. es und enthält Anforderung, was bedeutet, Gabes und enthält Anforderung, was bedeutet,dass der Benutzer den aufrufenden Code gemacht hat, wer diese GetMethod aufgerufen hat, möchte er zusätzliche Details enthalten? Also habe ich früher gesagt, dass, wenn er in ein Hotel und Land kommt, anstatt nach dem Hotel zu suchen und dann die Contra-ID zu bekommen und dann die Datenbank erneut aufzurufen, um den Vertrag mit dieser ID zu erhalten. Und dann ist das zwei Datenbank, weil Sie einen Datenbank-Anruf machen könnten und wir bekommen das Hotel und einschließlich des Landes, so dass es automatisch füllt diese Eigenschaft mit allen entsprechenden Ländern Details, richtig, also das ist, was das beinhaltet, ist weit. Dieses Code-Snippet sagt im Grunde, dass, wenn Includes nicht gleich null ist, also standardmäßig nicht, es ist optional. Sie müssen sie nicht schätzen. Wenn Sie sich jedoch entscheiden, ihren Wert zu setzen. Wenn es nicht gleich null ist, dann möchte ich für jede Eigenschaft in Includes in die Abfrage aufnehmen, nach welcher Eigenschaft gefragt wurde. Also sagten sie Land, dann wird diese foreach-Schleife einmal laufen. Wenn Sie fünf Fremdschlüssel haben und Sie alle fünf davon darin einschließen, dann wird dies fünfmal laufen, einschließlich jeder. So ziemlich das wird immer tun. Ordnung? Es ist also völlig optional, aber es kann Zeiten geben, in denen Sie Tansania nicht für Geschwindigkeitszwecke benötigen, Sie möchten nicht die ganze Zeit für eine Abfrage einschließen, für ein Bit Informationen, wenn Du hättest es nicht tun müssen. Dies hilft uns also, die Anwendung schneller zu halten , als es normalerweise wäre, wenn sie alles die ganze Zeit enthalten würde. Dann ist das nächste, was wir tun möchten, unsere Gewichte Abfragepunkt zurückzugeben. Und dann werde ich sagen, als kein Trucking. Das ist also, wo dieses Trucking-Ding ins Spiel kommt, weil jeder Datensatz, der hier abgerufen wird, nicht verfolgt wird. Kopien, die aufgenommen und in den Speicher zentral an den Client, die Datenbank und in verschiedene Wörter gesendet werden, sind wirklich schrecklich daran. Deshalb bin ich nicht hier, wir sehen eine Berührung, damit wir die Platte bekommen, die nicht fallen gelassen wurde. Zwei werden betrachtet, und ich sage immer, fangen Sie an, es anzuschauen und beachten Sie nur, dass es geändert wurde, bis es hier erreicht, es wurde geändert. So bekommen wir so kleine LKWs. Aber danach möchte ich wirklich den ersten Standarddatensatz bekommen und es gibt einen Standardasynchronen der ersten Ordnung. Da gehen wir. Und dann kann ich Ausdruck sehen. Lassen Sie mich erklären, was der Ausdruck ist. Also Ausdruck ist definiert als Express auf Funktion t Boolean, und das ist der Name des Parameters. Also diese Daten, die uns im Grunde erlauben, heute Abend einen Lambda-Ausdruck zu setzen , weil dann ein Lambda-Ausdruck auf uns erlauben würde, einige dieser IQ zu sehen. Und dann würde das Lambda R0 und dann sagen, Abfragepunkt etwas ist gleich etwas anderes. Deshalb habe ich Bool gesagt, richtig? Was auch immer Bedingung ist. Wenn wir also die Wanderer-Karte abrufen wollen, was ist die Bedingung, die wir verwenden wollen, um die eine Ricard abzurufen? Ist es nach ID, ist es beim Namen? Dies ermöglicht es also, sehr generisch und flexibel zu sein, weil wir dann basierend auf dem Kontext schreiben oder verschiedene Ausdrücke schreiben können, aber eine Methode jederzeit aufrufen. Okay, das war's also für die nächste, für die, Tut mir leid. Also der nächste, den wir tun müssen, ist alles zu bekommen. Alles klar, und alles wird all diesen Code mit einigen Optimierungen auf dem Weg haben. Also erstens werden wir uns nicht zuerst unsere Standardwerte ansehen. Also lassen Sie mich einfach diese Ära Linie ändern. Wir erhalten die Abfrage osmo Trucking und die Nummer wird es VO2-Liste zu machen sinken. Okay, das ist also das, oh, es ist 1-0. eine asynchrone Funktion aufrufen, müssen Sie ihr Unkraut vorangehen. Ordnung? Also drehen wir unsere Liste um. Also analysieren wir es, um aufzulisten, im Gegensatz zu diesem, wo wir gerade die ersten Sterne-Standardwerte bekommen haben? Nein, wir haben den gleichen Parameter für die Includes, aber wir haben einen anderen für Eidor Bay. Also werde ich noch ein paar kleine Schnipsel lesen nach. Nun, eigentlich werde ich Tool-Snippets einfügen. Also zuerst, wir haben die Abfrage. Dann werde ich überprüfen, ob es einen Ausdruck gab, jemand, der die Abfrage zuerst filtert, bevor ich es überhaupt betrachte. Ordnung, also werde ich sagen, ob der Ausdruck nicht gleich null ist, weil wir nach einer Liste von roten Karten suchen könnten. Aber wir wollen sagen, wir sind, das Land ist eins auf der Sonne. Geben Sie mir die Liste der Fotos aus Jamaika, damit wir in den Ausdruck einfügen können , um zu sehen, wo die Bedingung benötigt wird, um aus Jamaika zu spezifizieren. Und wenn es nicht der Fall ist, selbst wenn es nicht gleich null ist, was bedeutet, dass Bedingung da ist, dann filtern Sie bitte die Abfrage für mich. Also Abfrage ist gleich der ursprünglichen Abfrage, die alle Datensätze d2 war, wir sind, dieser Ausdruck wahr ist. Dann nachdem du das getan hast, denn wir hätten 500 haben können und wissen, dass der Filter es auf 20 gebracht hat. Dann gehen Sie voran und ziehen Sie die Includes an. Ordnung. Und dann, nachdem Sie die Includes und alles angezogen haben, möchte ich, dass Sie bei Bedarf bestellen. Also, wenn die Person Boston auf Kunst oder durch Öl will es in absteigenden oder aufsteigenden R, diese R, die Sie nur sehen, ob es, wenn der Befehl kam in, die Anfrage ist gleich R2 durch Abfrage. Alles klar, das ist wirklich alles, was da ist, ähm, steigen Sie aus. Also haben wir den Großteil der Arbeit aus dem Weg gebracht. Wir haben noch zwei Schritte vor uns und dann sind wir mit dieser Aufgabe fertig. Das nächste, was wir tun wollen, ist , das zu erschaffen , was ich diese Arbeitseinheit nennen werde, richtig? Also haben wir den generischen Repository-Kenner, wann man ihm die Einheit des Arbeitsrahmens auf oberstem Boden im Ire-Repository gibt, ich werde nur voran gehen und hinzufügen, was eine andere Schnittstelle sein wird. Also füge ich es nur hinzu, ich nenne es i Einheiten aus Arbeit ändere dies in Schnittstelle. Und dieser wird vom Einweg erben. Ordnung? Und dann, was wir in unseren Einheiten definieren werden, sind vier, wäre es, unser Register für jede Variation des generischen Repositorys zu sammeln oder relativ zur Klasse T, richtig? Also im Moment haben wir nur zwei Tische zur Verfügung zu stellen. Also werde ich nur ein generisches Repository für Land sehen. Tut mir leid, für das Land. Und schließen Sie alle vermissten oder Freunde ein. Und ich werde es nur nennen Land ist so verschiedene Leute haben hier unterschiedliche Namenskonventionen. Ich würde das Gegenteil nennen. Manche Leute würden sagen, widersprüchliches Repository oder was auch immer ich Claudia-Länder bin. Denn wenn ich die Arbeitseinheiten aufrufe, kann ich sehen, dass diese Punktländer jede Operation zeigen, die ich durchführen möchte. Ordnung. Also werden wir das auch für Hotels tun. Sind Hotel und ich rufe die Unterkunft Hotels. Und dann werden wir noch eine Operation haben, die Aufgabe C ist. Alles klar, wenn wir also alle diese Operationen ausführen, das IAB zu aktualisieren, wir Änderungen an den Kontexten vor. An diesem Punkt. Es ist nur inszeniert, oder? Wenn wir also Änderungen speichern oder speichern sehen, dann wird es betroffen sein. Das ist also, wofür dies ist, aber das ist außerhalb des Projektarchivs, denn wenn zu diesem Zeitpunkt mehrere Änderungen vorgenommen werden müssen, können alle in einem Vorgang gefangen werden anstatt mehrere Kosten zu machen oder die Datenbank. Also haben wir die Einheiten sind für. Die nächste Sache wäre, die konkrete Klasse zu erstellen. Also in einem Repository fügen wir Klasse hinzu, nennen es Einheit aus Arbeit. Und dann addieren Sie es für die Arbeit wird von i Einheiten O4 erben. Und noch einmal, fügen Sie alle fehlenden Referenzen ein und implementieren Sie dann die Schnittstelle. Okay, also was das wirklich nur wissen wird, ist zu sagen, in Ordnung, ihr normale Länder, was soll ich zurückkehren, wenn ihr Länder von mir anruft? Was soll ich hier anrufen? Was bedeutet entsorgt dual, was bedeutet gespeichert? Das sind die Dinge, die wir definieren müssen. Also zuerst werde ich einen Verweis auf den Datenbankkontext einfügen. In Ordnung, ähnlich dem, was wir vorher hatten. Und dann werde ich meinen Konstruktor definieren. C0-Tür Versuchen Sie das noch mal. Da gehen wir. Und ich werde in den Datumszusammenhängen setzen, diejenigen gestohlen, um wieder in die Tote zu schreiben. Also werde ich nur ihre Teile dort kopieren und einfügen. Da gehen wir. Also initialisiere ich den Datenkontext innerhalb der Einheitenzelle für eine Heilung und muss das wissen. Okay, ich habe auch eine Kopie der Daten des Kontextes. Dann fragen sie sich wahrscheinlich, warum brauche ich die Kontexte hier? Und das liegt wirklich daran, dass wir eine Instanz des Depositoriums zurückgeben müssen , aber dann müssen wir ein wenig zurückverfolgen. Also muss ich die Ereignisse so beten, wie wir sie auf dieser Seite als Privatpersonen definiert hätten . Mal sehen, ob ich das schnell machen kann. Also werde ich das nur nehmen und ich werde zwei private Eigenschaften des jeweiligen Holt und derLänder definieren zwei private Eigenschaften des jeweiligen Holt und der , aber ich möchte sie nicht umbenennen, wenn ich den Accessor abheben soll. Das wird also Länder sein. Auf diesem wird man Hotels sein. Ordnung? Also keine Daten, wie diese privaten Immobilien, Ich werde sagen, obwohl hier, dass, wenn das Privateigentum leer ist, dann eine neue Instanz der generischen oder Einleger zurückgeben. Ich werde nur das Diagramm machen, weil C scharfe neun ziemlich cool ist. Zweitens wird es so etwas wie Länder und dann Fragezeichen sagen. Fragezeichen ist gleich. Also ist es ein Musik-Typ, der sagt, wenn das null ist, was soll ich dann tun, da es aus einer ganzen if-Anweisung ist? Richtig? Jetzt sehen Sie einfach, ob es null ist, geben Sie dann ein Objekt des generischen Repositorys vom Typ country zurück. Und natürlich brauchen Sie basierend auf unserer Definition einen Datenbankkontext, weshalb wir ihn hier injiziert haben. So gehen wir im Kontext vorbei. Okay, und dann mache ich im Grunde dasselbe für ein Foto. Das ist also wie unser Register. Nein, das ist wie eine Rolle der Ekstase, dass all dies potenzielle generische Repositories über Syrien und die Arbeitseinheit sind , zu der ich Zugang habe. Im Gegenteil, das Hotel ist auf ewig Tisch, den Sie definieren. Sie müssen sicherstellen, dass Sie stellen Sind Sie Repräsentation dafür in der I Arbeitseinheit sowie in der Arbeitseinheit. Aber all das, was wir gerade mit dem generischen Repository und dem generischen Repository gemacht haben, wollen wir nichts davon mit einer anderen Datentabelle wiederholen müssen, die wir in Zukunft hinzufügen können, oder? Es ist also nur eine Schraube, die diese Liste und diese Funktionen pflegt , um sicherzustellen, dass wir Zugriff auf das haben, was wir brauchen. Genau hier in unseren Einheiten, ein Gabelregister. Okay, also das nächste, was wir tun müssen, oder nun, zwei weitere Dinge. Also möchte ich diese Pose definieren und dann müssen wir ein Speichern einrichten und dann sind wir fertig damit. Also diese Pose werde ich erzeugen entsorgen wahr. Das ist also genau die Art, wie ich es mache. Es kann Abweichungen der Arbeitseinheit an anderer Stelle sehen. Aber so bin ich gekommen, um es aus verschiedenen Gründen zu tun. einmal ist der Kontext König. Was ich hier sehe, ist, dass ich eine andere Methode nennen werde. Also werde ich hier eine Methode definieren, nur dass Visual Studio eine Methode generiert oder die Neith es für diesen Zweck unterstützt. Und dann werde ich nur sagen, naja, eigentlich, jetzt tue ich es. Ich werde nur sagen, genau hier in diesem Stockwerk-Kontext. Diese Pose ist also wirklich wie ein Garbage Collector. Er sieht nur, wenn ich fertig bin, wenn die Operationen abgeschlossen sind, bitte geben Sie den Speicher ein. Das ist der Zweck. DC hier ist also tatsächlich nach Garbage Collector sortiert , wenn Sie sich die Beschreibung Garbage Collector ansehen. Das heißt also, wenn dispose aufgerufen wird, dann entsorgen Sie bitte den Kontext und die Bedeutung hat jeden Speicher getötet , den die Verbindung zur Datenbank verwendet hat, beenden Sie die Verbindung, töten Sie alle Ressourcen, die es verwendet hat, und gehen Sie voran und tun Sie, was es standardmäßig tun würde. Also, das ist es für die Entsorgung. Der nächste wäre unsere Änderungen speichern. Und dieses ist eigentlich ziemlich einfach, weil es wirklich nur eine Zeile ist, zumindest jetzt, wo wir ein Gewicht sehen, Kontext Punkt speichern ändert eine Senke. Hier ist der Pfeil. Ich sehe mich. Oh, es, aber was ich nicht habe, habe ich nicht die asynchrone. Sobald ich das dort hingelegt habe, ist alles in der Welt in Ordnung. Also lassen Sie mich einfach zeichnen gebaut, um zu sehen, ob ich etwas gebrochen habe oder ob es etwas fehl am Platz gibt und einen erfolgreichen Build haben. Das bedeutet, dass ich den Code für meine Einheiten erfolgreich eingefügt habe, sind Fork, zumindest code-weise sind syntaktisch. Später werden wir herausfinden, ob es funktioniert oder nicht. Aber richtig wissen, das ist ein gutes Feature zu haben und diese Aufgabe ist erledigt. 15. UPDATE – Starke Schrift beinhaltet die Angaben für die Einheit der Arbeit: Hey Leute, willkommen zurück. Also beenden wir einfach die Einrichtung unserer Arbeitseinheit, die ziemlich viel Arbeit und ziemlich viel Erklärung und Bucking und her zwischen ein paar Dateien war . Also habe ich es einfach gehalten. Und der Partner, auf den ich mich beziehe, ist der Teil mit den Includes. Also haben wir es einfach genug gehalten, indem wir nur eine Liste vom Typ String verwenden. Und dann haben wir im generischen Repository diese foreach-Schleife implementiert, um für jede Eigenschaft zu sagen, die in der Zeichenfolge ist , dann gehen Sie weiter und schließen Sie ein, jetzt wollen wir das umgestalten, weil die Gefahr von es in dieser Art und Weise zu haben, ist das. Dies wird als magische Zeichenfolge bezeichnet, daher ist es anfällig für einen typografischen Fehler und der Compiler wird nie wissen, dass es ein typografischer Fehler ist, den Sie versehentlich in SEO und TR Y anstelle von COUNTA RY eingegeben haben , und dann ist es würde kompilieren, aber es würde einen Pfeil geben, sobald Sie diesen Endpunkt getroffen haben , weil Entity Framework Core nicht wissen würde, was mit falsch geschriebener Eigenschaft zu tun ist. Ein weiteres Problem könnte sein, dass ich diese Navigationseigenschaft innerhalb des Klassenhotels selbst ändern könnte , oder? Was ist, wenn ich es von nur Land in etwas anderes umbenannte? Und wenn ich das tue, würde das auch zu Bruch führen, wenn wir versuchten, den Endpunkt zu treffen, nicht während des Kompilierens, so weiter, um sicherzustellen, dass, wenn sich etwas im Code ändert, etwas anderes bricht, damit wir es null im Gegensatz zu später, wenn ein Benutzer klagt über Spannung, nicht wahr? Also werden wir die Parameter innerhalb des Projektarchivs ändern. Also werde ich zuerst zum Auge generischen Repository gehen und wir werden dieses Parametertyp-Tool ändern. Und ich füge eine BigQuery-Tabelle ein. Also werde ich nur diese Liste von Strings entfernen. Und ich werde diesen neuen Datentyp einfügen der dem ich abfragbar bestellt sehr ähnlich aussieht, aber es ist ich abfragbar vom Typ T und dann habe ich das abfragbare aufgenommen und wir werden voran gehen und alle fehlenden Referenzen. Das ist also eher wie eine Funktion, oder? Also werde ich das für das Ghetto, die gute PJ-Liste sowie die Git tun. Also alles ist null, wird diese stärker typisierten Daten sein. Jetzt wie immer, alles, was wir in der Schnittstelle ändern, müssen wir in der Implementierung ändern. Also ging ich gerade voran und aktualisierte diese Parameter im generischen oder Poster mit dem gleichen Datentyp. Und natürlich sehen wir, dass wir an dieser Stelle ein paar Pfeile bekommen. Also der erste Pfeil ist, weil wir es nennen, ich nenne diese gehören, ich nannte es vor einschließt. Semantik. Sie können diese Änderung vornehmen, wenn Sie wollen oder nicht, aber das ist in Ordnung. Wir werden immer noch überprüfen, ob es null ist oder nicht. Also werde ich diese Änderungen einfach Großhandel machen, richtig? Und dann anstelle einer für jede Schleife, was ich tun werde, ist einfach Abfrage zu sagen. Wenn es nicht null ist, dann Abfragen gleich einschließen, was nein ist, tatsächlich ein Telefon Sean die Anfrage. Mit anderen Worten, es wird sehen, ob ich Inhalt habe, dann werde ich meine Einschlüsse auf die Abfrage anwenden, und das ist der neue Wert der Abfrage. Das nimmt also diese foreach-Schleife weg und lässt den Code meiner Meinung nach viel sauberer aussehen. Und das ist es wirklich, um unser generisches Repository und ich generisches Repository zu ändern , jetzt innerhalb unserer Controller, wo wir tatsächlich damit unterbrechen. Hier muss der große Wandel geschehen. Also war diese Methode einschließlich Land. Also werde ich das entfernen. Und wordurch das ersetzt wird. Und ich werde nur den Parameter nennen. Wir wissen also, dass wir es mit dem include-Parameter zu tun haben. Was das ersetzt wird, ist ein Lambda-Ausdruck. Und so werde ich q dot sagen. Und dann würde ich sehen, umfassen , was eine Methode ist. Und dann innerhalb dieser Methode befindet sich ein anderer Lambda-Ausdruck. Aber bevor wir weitermachen, müssen wir Entity Framework Core einschließen damit wir diese fehlende Bibliotheksreferenz hinzufügen können, und dann können wir unsere Eingabe mit anderen Lambda-Ausdrücken fortsetzen. Sieh es dir genau an. Wir haben Q oder ich beginne einen Lambda-Ausdruck muss nicht q sein, e könnte sein, ich, könnte Tinte sein. Es spielt keine Rolle. Wir wissen, dass ich weiß, aber ich beginne gerade den Lambda-Ausdruck und dann rufe ich die Methode include auf. Wenn Sie es sich ansehen, werden Sie sehen, dass Sie einen Knochen Jia Trulia von fast jeder Methode zur Verfügung, um Sie haben , aber wir konzentrieren uns nur auf die ich einschließen auf die Include. So Q Punkt enthalten. Und dann haben wir einen anderen Lambda-Ausdruck innerhalb der Include-Methode , wo ich x dot sehe und dann die Navigationseigenschaft relativ zu der Klasse sehen kann, die wir abfragen werden. Die Bedeutung hier ist also wieder einmal, dass, wenn sich etwas in die Domänenklasse ändert, dies nur Code ist. Also, wenn ich den Namen hier ändere, dann gibt es dieses Land nicht mehr. Das ist unsere rote Linie. Es wird nicht kompiliert. Wir müssen es reparieren, bevor wir es in die Produktion bringen können. Und das ist der Vorteil, dass diese Art von Änderung stark Ihre Includes eingegeben wird. In Ordnung, also werde ich einfach weitermachen und den Contract-Controller holen. So haben wir hier drüben eine ähnliche Situation mit unseren Hotels und es wird das gleiche Prinzip sein. Also werde ich nur diesen Parameter einschließen, die fehlenden Referenzen einschließen. Und diesmal sind es Hotels. Also ist es x dot und ich kann Hotels so sehen. Keine Tippfehler. Wenn ich einen Tippfehler habe, dann ist das ein Fehler. Wenn ich etwas reinstelle, das nicht existiert, ist das ein Fehler, richtig? Es ist also besser, diese stark typisierten Parameter zu verwenden. Es sieht etwas komplizierter aus, ja, aber auf lange Sicht wird es die Wartung viel einfacher erfüllen. Ich kompiliere nur, um sicherzustellen, dass nichts anderes mit diesen Daten gebrochen wurde und wir einen erfolgreichen Build haben. So kannst du fortfahren und dich in der nächsten Lektion sehen. 16. AutoMapper und DTOs einrichten: Hey Leute, willkommen zurück. In dieser Lektion werden wir also unsere Datenübertragungsobjekte einrichten und wir werden die ultimative Kraft nutzen, um den Prozess der Verknüpfung unserer Details mit unseren Domain-Objekten zu automatisieren. Lassen Sie mich also einen kleinen Hintergrund geben, was ich D DO Datenübertragungsobjekt ist null. Es ist wirklich ein Teil eines Musters, in dem wir versuchen, unser Domain-Objekt zu entkoppeln, was bedeutet, dass dies eine Datenbanktabelle darstellt. Wir versuchen, dies von der Benutzerunterbrechung zu entkoppeln. Es wird also wollen, dass Benutzer direkt mit dieser Klasse interagieren , wenn sie Informationen über unsere API senden und empfangen. So haben wir Details wie eine mittlere Schicht, die bestimmte endgültige Abweichungen am vorderen Ende erzwingt. Und wir können einiges tun und es erweitert die Flexibilität. So können wir das verwenden, um die Daten irgendwie zu bereinigen, bevor sie tatsächlich unsere Datenklasse und durch Erweiterung unsere Datenbank gelangen. Nein, Herbst oben ist eine Bibliothek, die tatsächlich erleichtern oder kreativ oder wir werden es Mappings nennen, um zu sagen, dass dieses Detail, ähnlich wie diese Datenklasse, Lassen Sie uns zuerst versucht, unsere Datenübertragungsobjekte einzurichten. Also in unserem Projekt werde ich einen neuen Ordner erstellen. Und diesen Ordner nenne ich es nur Modelle. Die Details sind wie Modell. Also, wenn Sie es gewohnt sind, MVC oder sogar Ariza-Seiten oder einen anderen nicht-dominanten Körper zu verwenden , oder wir sind mit dem Wort Modell vertraut, i d t, o ist nur eine ausgefallene Art, ein Modell zu sehen, aber es wird normalerweise in Bezug auf APIs verwendet, oder? So können Sie diese Ordnermodelle nennen, wenn Sie es Details nennen möchten , so dass Sie genau wissen, was es tut, das ist in Ordnung, aber ich werde nur bei Modellen bleiben. Jetzt anstelle von Foreign Models Ordner, haben wir in der Regel eine Reihe von Klassen, die jede Variation einer Anforderung relativ zu jedem Domänenobjekt darstellen kann . Beginnen wir also mit Ländern. Das Land hat also drei Felder. Ordnung? Also werde ich ein sauberes Werkzeug erstellen, das es uns ermöglicht, mit dem Gegenteil zu interagieren oder eine andere Ebene zu haben. Also nenne ich es Land D T O, und das ist meine Namenskonvention. Ich habe Details bis zum Ende des gleichen Namens angezogen, oder? Weil ich nicht will, dass unser Koordinator da oben zaubert. Und habe ich eine Änderung vorgenommen? Und dann stellt sich heraus, dass es immer der falsche ist. also ein Detail benennen, können Sie deutlich sehen, welches nicht die DTU ist, auf der man richtig ist. Also mach voran, erstelle Land dto. Andrei Linde. Wirklich muss das dto ähnliches Tool aussehen, das eigentliche Domain-Wissen, das Sie wahrscheinlich sagen, okay, warum also die Duplizierung? Weil Sie gerade eine andere Klasse in einem anderen Ordner erstellt haben, nur um Ihnen dieselben Eigenschaften zu geben. Nun, an diesem Punkt habe ich gesagt, wir können Validierung hinzufügen, damit ich sehen kann, dass der Name erforderlich ist, oder? Das heißt, wenn ein Benutzer mit dem Detail unterbrechen wird, wird diese Anmerkung sagen, dass Sie mir keine Informationen für dieses dto ohne diesen Wert senden können . Wenn es also nicht da ist, wird die Validierung jagen. Wir können auch andere Dinge wie festlegen. Die Länge der Zeichenfolge. Und dann können wir sagen, dass die maximale Länge 150 ist, oder ob es sich um ein Land handelt. Nehmen wir also an, kein Land sollte jemals einen Namen mehr als 50 Zeichen haben. Ich habe meine Recherche nicht durchgeführt, aber lässt uns mit 50 arbeiten, oder? Und wenn ich eine bestimmte Fehlermeldung geben wollte, wenn dies verletzt wurde, kann ich keine Fehlermeldungen sehen, die gleich Maisbaum sind. Der Name ist zu lang. Wenn also diese Validierung für die Zeichenfolgenlänge für den Namen verletzt wird, dann ist dies der Fehler fehlgeschlagen. So können Sie das Teal immer so kommentieren , dass, wenn der Benutzer mit dem Werkzeug interagiert, Verschleiß Handhabung bestimmter Dinge, um sicherzustellen, dass wir nicht überschreiten, außerhalb des Bandes gehen, was wir wollen, dass unsere Datenqualität sein. Nachdem sie diese Validierung erfolgreich durchlaufen haben. Dann gehen wir weiter und machen die Kartierung zwischen der BTO und dem Land. Das Prinzip ist also, dass der Benutzer nie Land sehen würde, wenn er die Datenklasse sehen wird und die Datenbank nie das Detail sehen würde. Benutzer unterbrechen also hier. Und dann in der Mitte übertragen wir in d eta von hier nach hier. Ich gebe es dann an die Übergewichtigen Beats weiter. Also alle Validierungen, die wir hinzufügen können und fügen Sie das einfach zu kurzen Namen hinzu. Hier werde ich sehen, ein kurzer Name ist auch auf die maximale Länge für den kurzen Namen erforderlich wäre, um zu schreiben und Fehlermeldung Kurzname oder kurze Ländernamen. Und wir sagen, ein kurzer Ländername kann noch nicht, er ist zu lang, oder? Wir können immer Sonne viel und GND Zope machen. Es gibt andere Anmerkungen, die wir auf dem Weg hinzufügen können, aber diese beiden sind diejenigen, die ich rational für das Detail verwenden werde. Jetzt gibt es auch eine Erweiterung oder Erweiterung dieser Butter und ein bisschen mehr, wo wir BTUs pro Operation erstellen. Wenn wir also mit der Entwicklung unseres Controllers beginnen, werden unsere Controller beginnen, die verschiedenen Arten von Operationen auf Verben zu betrachten und in dem, was Menschen tun oder tun. Einige Fälle, in denen sie ein Detail pro Operation haben. Angenommen, ich habe ein Detail zum Lesen der Details zum Erstellen eines Details für die Aktualisierung. Denn die Realität ist, dass es einige Zeiten gibt , in denen Sie bestimmte Informationen nicht bereitstellen müssen. Also schafft jemand ein Land. Ich brauche sie nicht, um das Feld für ID zu haben, oder? Das Detail, mit dem ich möchte, dass sie unterbrechen, wäre das Erstellen eines Country-D-Werkzeugs. Und Sie werden diese Möglichkeit nicht erhalten, einen Wert für die ID anzugeben , weil wir den Wert für die ID wirklich nicht benötigen. Also im Allgemeinen, müssen das Land haben oder ich habe die Basis Detail. Und dann R14 erstellt, weil erneut erstellt, die ID nicht benötigt. Okay, also 1hier, wenn du ar Verben machst, wirst du tatsächlich den Unterschied zwischen Hall sehen. Wir benutzen beide. Ich merke, dass ich es in die gleiche Datei lege. Einzelne Zuständigkeitsteile sind und können hier Vorrang haben. Und Sie machen jeden in seiner eigenen Datei, wie wir es für die Domain-Klassen getan haben. Oder da dies eine kleine Anwendung ist, lege ich einfach alle Details, die sich auf eine Domäne beziehen, innerhalb des CM Foulstaubs in separate Klassen mit ihren entsprechenden Namen. Also werde ich hier innehalten und ich werde Sie herausfordern , voranzugehen und das gleiche für das Hotel zu tun, erstellt das Detail, und gehen Sie voran und setzen Sie einige Validierungen für das Feld. Okay, ich hoffe, du hast diese Herausforderung angenommen und ich bin hier, um dir zu zeigen, was ich wusste, wenn du es tust und du keine Pfeile hast, das ist wirklich gut. Ich habe es etwas anders gemacht. Also werde ich Sie einfach durch die Gedanken hinter dem führen, was ich hier für das Hotel getan habe. Also drehe ich das Skript um, anstatt die ganze bis, die Kasse zu erstellen und dann die Create-Version zu erstellen, was ich getan habe, war, dass ich die Create-Version erstellt habe und dann lasse ich es das Detail erbt, das BaseOne vom Create erbt und ich werde erklären Sie diese Entscheidung. Zurück zu dem, was wir gerade mit dem widersprüchlichen Deal gemacht haben, bemerken Sie, dass wir die Felder wiederholt haben, oder? Ich IDs in einem, aber nicht in der anderen, aber es gab wiederholten Namen und ich refactoriere diesen auch wir wiederholten Namen auf short_name, richtig? Was ich also tat, war zu sagen, was sind die gemeinsamen Felder auf? Was sind die eindeutigen Felder sonst. Also ID, ich brauche nur wirklich ID, wenn ich ein Update machen werde, oder ich werde mir die Details ansehen oder etwas, das keine Create-Operation ist, oder? Also habe ich die Kreativität für Sie, die alle Felder haben wird, die absolut notwendig für die Schöpfung sind. Sie sind auch absolut notwendig, wenn Sie nach den Details suchen oder wenn Sie es sein werden. Ordnung? Und wieder einmal haben Sie Variation. Wenn Sie also einen dto Punkt wollten, können Sie nur den Namen aktualisieren. Und das ist, was Sie explosives Verhalten verwenden wollen, um nur den Namen des Landes zu aktualisieren, aber nicht die kurze meme, wissen Sie, nur zum Beispiel, c_k, dann könnten Sie ein Bedürfnis zu erstellen, das sagt Update Land Name, BTO, und alles, was es dauert, ist das Namensfeld. Sie haben also all diese Möglichkeiten. Aber ich mache das Müsli nicht hinein. Also, was ich tue, ist, eine zu definieren, wo die Ideen nicht Gefängnisse, und das ist, was wir tun werden. Die Erstellungsvorgänge sind die nicht idealen erforderlichen Operationen. Und dann habe ich die Basis, die von dem erbt, der alle anderen Felder hat. Die Basis hat also ID und sie erbt, so dass sie automatisch Zugriff auf alles hat, was definiert wurde. Auf diese Weise muss ich meine Validierungen nicht wiederholen, da ich zunächst die gleichen Validierungen zweimal in der Datei hatte. Und für so viele andere Details, wie ich vielleicht definiert habe, hätte ich diese Validierungen immer wieder erhalten. Also, das war mein Denken hier. Also habe ich diese Ideologie erweitert. Zu den Hoteldetails. Also das Gesamtdetail erstellen, das seine Validierungen für den Namen hat, richtig? Und ich habe kopiert und eingefügt, Ich habe diese Nachricht nicht einmal geändert. Das ist also der Hotelname zu lang, Adresse ist zu lang, und Sie haben die maximale Länge. Wir können Mindestverliehen hinzufügen. Wahrscheinlich möchten Sie Mindestlängen, den Kurznamen, hinzufügen, da sie mindestens 11 Zeichen oder sogar Namen angeben müssen. Ein Zeichen wird benötigt, oder? wir in ein Hotel zurückkommen, haben wir diese Validierung für den Namen, Validierung für die Adresse, den Aufruhr. Und lassen Sie mich einfach etwas Platz setzen, damit wir sehen können, wo alles beginnt und aufhört. Da gehen wir. Also für die Bewertung ist es erforderlich. Und ich habe unseren Bereich von eins bis fünf gesetzt, weil sie essen muss zwischen einer 1-Stern-Bewertung oder einer Fünf-Sterne-Bewertung liegen. Natürlich verwenden wir double, weil Sie 4.54.11.5, et cetera haben. Also der Re-Engineer, Jill sieht welcher numerische Wert zwischen diesen Zahlen sein muss. Und dann ist die gegenteilige ID erforderlich. Nein, nein, was ich Kontur-ID habe, aber im Gegensatz zur Domain-Klasse habe ich kein Land definiert. Und auch beim Ersteller fehlt die ID. Also fehlen diese beiden, weil bei der Erstellung alles, was ich brauche, ist die ID. Die gesamte Datenbank wird sehen, ist die ID. Es wird nicht die tatsächliche Entität oder irgendetwas aus diesem Feld kommen sehen. Wissen Sie, dass Feld notwendig wird , wenn ich die Details sehen muss, also wie wir beschreiben, anstatt eine andere Abfrage auszuführen, um herauszufinden, welches Land die ID hat, die hier angegeben wurde. Ich kann einfach ein Include machen und die Länderdetails einbeziehen. Deshalb im Basisdetail, und ich mag es nicht, dies die Basis zu nennen, erbt normalerweise von der Basis. Also, als ich BS sagte, meine ich nur diejenige, die nicht unbedingt so spezifisch für eine Operation ist. Also benutze ich es lose, aber ich habe mich selbst erklärt, damit ich euch nicht verwirre. Hotel dto erbt also alle Felder, die wir alle in der Create-Version davon gesäumt sind. Aber dann enthält es die ID und es enthält ein Objekt vom Typ country dto. Es wäre also einfach genug gewesen, die Felder einfach zu kopieren und Sie würden sich nicht irren. Sie müssen keinen Fremdschlüssel im Detail angeben. einmal, das ist der Kunde konfrontiert. Es ist nicht datenbankzentriert, also ist es egal, ob es ein Fremdschlüssel ist oder nicht, nur zu sagen, Okay, ich brauche eine ganze Zahl, weil ich als int definiert wurde. Allerdings wurden nicht mit Land, weil bei BTO sollte nie Frankreich ein Domain-Objekt direkt. Also haben Beatles die Details übertroffen. Doumani ein Objekt gedacht, um Domäne-Objekte, Auto-Mapper ist die einzige Brücke zwischen den beiden. Technisch gesehen weiß ein dto Holz nicht einmal, dass es ein Domain-Objekt hat. Es sollte also keine Korrelation mit Domänenobjekten und id2 geben. So ist die BTU hier definiert, und die Eigenschaft hier ist auch eine DTU. Also nach all dem werde ich nur einen Build machen und sehen, ob es etwas fehl am Platz gibt. Und ich habe eine erfolgreiche Builds. Also scheint alles nein zu sein, scheint zu wissen, wo es sein soll. Ich werde nur zwei weitere Dinge hinzufügen und dann können wir fortfahren und Auto Mapper installieren und konfigurieren. Wissen Sie, wenn wir nach einem Land suchen, ist es manchmal einfacher, nach dem Land zu suchen, oder manchmal einfacher, nach dem Land zu suchen. Und Sie werden die Details aller Hotels sehen, die ein Teil dieses Landes sind. Also haben wir irgendwie diese Verknüpfung hier gemacht, wo wir die Details des Landes für ein bestimmtes Hotel sehen dürfen. Aber dann, wenn ich beschwöre, mehrere Hotels, richtig, müssen wir sagen können, suchen Sie nach dem Land mit der ID eins. Und ich möchte alle Hotels sehen, die dort sind, was nirgendwo im Internet ungewöhnlich ist. Wenn Sie suchen, wissen Sie, auf einer Buchungswebsite, um zum Beispiel auf Jamaika zu schauen. Und es wird Ihnen die Liste der Hotels zeigen. Also, was wir in unserem Domain-Objekt tun müssen, und wir werden Daten über auch replizieren. Aber wir müssen eine Eigenschaft haben, die öffentliche virtuelle Liste ist und andere verwenden Ion-Liste, da dies eine Erweiterung des Listendatentyps ist. Und es ist eine Liste vom Typ Hotel. In Ordnung? Und es wird Hotels genannt werden. Und wir können diese Eigenschaft ausschalten. Also diese Eigenschaft, wenn wir dafür keine Migration durchführen müssen, ist dies wirklich nicht, wo wir in die Datenbank gehen. Dies sagt nur dem Domain-Objekt, dass Sie, wenn Sie Daten für all diese erhalten, wenn es Anfrage ist, auch die Liste der Hotels hinzufügen können, die mit dem Land verknüpft sind. Denken Sie also daran, in unseren Arbeitseinheiten haben wir gesagt, dass Sie ein Includes machen können. So wäre die Details eines Landes mit einem bestimmten Hotel enthalten. Oder wir könnten nach unserem Land suchen und die Liste der Hotels hinzufügen. Das ist also, was diese Eigenschaft da weit ist. Nun, was ich tun werde, ist zulassen, dass das Detail tatsächlich dieses Verhalten auch hat. Also in unserem Land dto, werde ich das in der unspezifischen, nicht operationsspezifischen VT0 platzieren . Und noch einmal, Details beschleunigen sich bis ins Detail. Also Hoteldetail, das ist der Datentyp, mit dem wir es zu tun haben. Und es geht zurück zum Hotel. Das muss nicht virtuell sein. Okay, also haben wir eine Öffentlichkeit, wo das Potenzial, ein Land zu betrachten und die Liste der Hotels zu bekommen. Außerdem haben die Feldnamen zu viel zwischen dem dto und unserem Domain-Objekt, wenn wir wollten, dass ein Mapping nahtlos funktioniert. Ansonsten gibt es viele Konfigurationen. Ich muss gehen und sehen, oh, dieses Mitglied oder dieses Anwesen, so wie dieses hier, das gesagt hat, wir wollen das nicht alles durchmachen, basierend auf dem, was wir hier tun. Alles sollte dem anderen zuordnen, sind zwei sein Gegenstück, ruhig, na ja, in Ordnung, also habe ich Karte gesehen, Karte, Karte, Karte. Also lassen Sie uns Herbst obere Ursache installieren, das ist, was wir verwenden werden, um dieses Mapping zu tun. In Ordnung, also klicken Sie mit der rechten Maustaste auf das Projekt, gehen Sie zu NYU noch Pakete. Und dann gehen wir nach Burroughs und suchen nach Auto-Mapper. Und was wir wirklich wollten, um letztlich obere Punkt-Erweiterungen dot Microsoft Dot Dependency Injection zu sein , weil dieser speziell für dominieren Kern ist , der obwohl auf, es ist nicht für .net Core optimiert, oder? Das ist also diejenige, die wir wollen. Wir können einfach voran gehen und installieren Sie das Herbst-Obermaterial ist nicht der Standard da draußen, obwohl Werkzeuge, die ähnliche Dinge tun, um Herbst oben, aber dieser ist sehr beliebt. Ich habe viel benutzt. Er hat mich nicht im Stich gelassen, zumindest in jüngster Zeit hat es nicht. So können wir eine Menge Arbeit mit Herbst oben erledigen. Jetzt, wo wir es installiert haben, dachte ich das auf Pfeil. Jetzt brauchen wir alles, um eine Initialisierung einzurichten, oder? Also, was ich tun werde, ist nur einen Ordner zu erstellen. Und Sie erkennen, dass ich liebe, Ordner zu erstellen ist irgendwie trennt, was passiert wo jemand ein Aufruf dieser Ordnerkonfiguration, xy-Konfigurationen. Und in diesem Ordner werde ich eine Klasse erstellen, die ist, ich werde es einen Mapper-Initialisierer nennen. In Ordnung, also müssen wir, dass die Konfiguration auf der Klasse erstellen , so dass ultimative Per weiß, wie es sich verhalten sollte und beobachten sollte, auf die es achten sollte. Also Mapper, Mapper-Initialisierer. Und wir werden von dieser Klasse namens Profil erben. Jetzt, wenn ich das mache, muss ich die using-Anweisung für den automatischen Mapper einschließen. Und dann kann ich das erstellen, was ich brauche, um einen Konstruktor zu erstellen. Also, sobald es aufgerufen wird, um die Initialisierungen rückgängig zu machen. Und dann muss ich in diesem Konstruktor alle Mappings definieren, richtig? Also, mit anderen Worten, ich muss sehen, dass diese Domain-Klasse namens Land. Und dann gehen wir weiter und schließen jede fehlende Bibliothek ein. Ihr Ziel ist es, direkt auf Land die TOO Karte. Na gut, gehen Sie weiter und schließen Sie das ein. Und dann öffnen und schließen wir Klammer. Und dann werde ich das einfach mit Dot River Smog verfolgen, was auch eine Funktion ist. Das heißt also, dass das Land Nieto-Klasse hat eine direkte Korrelation oder die Felder im Land braucht eine Klasse als direkte, haben eine direkte Korrelation, um dto Felder fortzusetzen und sie gehen in beide Richtungen. Okay, dann werde ich das für alle Details tun wollen, die ich habe. Das habe ich also gesagt. Sie können gewährt werden. Oh, aber sobald Sie körnig sind, müssen Sie sicherstellen, dass Sie die potenziellen Mappings abdecken, richtig? Also im Gegensatz zu schaffen und Land zu Land, und dann Hotel, um die T0 zu halten. Ordnung? Und dann das gleiche Verhalten oder Cmd Behandlung für das Hotel, um die erstellen Toto BGO. In Ordnung, also jetzt, wo wir das Mapper-Initialisierer-Setup haben , müssen wir es wissen, in den Start unserer Anwendung aufnehmen. Also gehen wir wie gewohnt zum Start, und dann werden wir einen Löwen und Algen schließen es hier auf der schönen Ad-Kern, wo ich ging, um Dienste zu sehen, dot add, auto, mapper. Und dann wird das verlangen, dass ich etwas einschließe. Lassen Sie mich es aber zu Ende schreiben. Zuerst. Da gehen wir. Also muss ich die using-Anweisung für die Automobilindustrie einschließen oder hatte. Da gehen wir. Also würde ich letztendlich oben und ich werde sehen, tippen Sie ab. Und ich werde den Datentyp übergeben, der dem Pro-Initialisierer zugeordnet ist. Also mapper __init__ und erhalten Sie die Rechtschreibung richtigen Laser. Und dann noch einmal, fügen Sie die fehlende Referenz, richtig? Fügen Sie die using-Anweisung ein. Und wenn ich das mache, ist Herbst-Oberschuh fertig und wir gehen. Also, wenn wir tatsächlich entwickeln oder Endpunkte, werden wir tatsächlich sehen, die Polar des Herbstoperanden halten die Details, Arbeit und ganze alles bezieht sich auf die Datenklassen, aber es ist gut, diese Konfigurationen werden die Welle sagen von früh an, also setzen Sie den Standard für Ihre Anwendung und später gibt es nicht so viel Nacharbeit, die durchgeführt werden muss, da dieser Standard festgelegt wurde. Sie behalten diesen Standard bei, wenn Ihre Anwendung größer wird. Und all diese Dinge sind bereits vorhanden. 17. Änderungen in GitHub überprüfen und hinzufügen: Hey, Leute, willkommen zurück. Also sind wir am zweiten Check-In-Check-Point für unser Projekt. Also nach jedem Modul werden wir einfach überprüfen, was wir getan haben , und dann gehen wir weiter und aktualisieren unser Repository entsprechend. Es ist also immer gut, kürzere Collins von Ihren kleinen Gewinnen fernzuhalten , so dass, wenn Sie kalt später beschädigt werden, Sie immer auf die neueste funktionierende Version Ihrer Anwendung zurückkehren können. Also erstens können wir immer wissen, dass die Änderungen, die durch das Betrachten der Dateien vorgenommen wurden , ein Deque bedeutet, dass es da war und es unterscheidet sich nicht von der letzten Sache, die in getreten wurde. Und ein Pluszeichen bedeutet, dass es seit dem letzten Huhn hinzugefügt wurde. Also Git hält immer LKW weg die Datei aussieht und lässt Sie wissen, dass es nicht anders ist durch Tür am Schwanz lassen Sie wissen, dass dies seit dem letzten Mal hinzugefügt wurde. Wenn Sie sehen wollten, was sich ändert, können Sie tatsächlich mit der rechten Maustaste gehen, um zu erhalten und Sie können den Verlauf anzeigen oder vergleichen. Also, wenn Sie vergleichen Sie zu sagen, gut die letzte Version, die ich hatte, ist die Linken und Seiten bekommen meine Haltung richtig? Also ist die erlaubte Version, die ich hatte, links und die neue Version ist auf der rechten Seite. So wird es Ihnen zeigen, dass diese Neun auf diese Weise modifiziert wurde. Und überall, wo Sie sehen, ein grün hervorgehoben bedeutet, dass etwas passiert ist. Wenn Sie also in einer Teameinstellung arbeiten, es immer empfohlen, dass Sie nicht an den Nahtdateien arbeiten, um einzuchecken , denn wenn Sie dann etwas auf Ihrem traurigen ändern, habe ich dieselbe Datei auf meiner Seite geändert, dann werden wir mit diesem vernichtende Art der Diskussion Situation, wo es sagen wird, Nun, die beiden Zeilen sehen zwei völlig unterschiedliche Dinge. Welchen sollte ich verwenden? Ich werde es nicht schaffen müssen, was Sie Conflicts nennen. Ich zitiere von Masse Osaka wirklich zeigen, dass alle Konflikte nicht Nein sind. Aber hoffentlich kodiert ihr nicht darin. Also, was wir tun werden, ist einchecken. Also, um das zu tun, kann ich mit der rechten Maustaste gehen, um zu bekommen, dass falsch ist. Änderungen. Da gehen wir hin. So Manöver und ich werde Visual Studios in verschiedenen Layouts. Wir wollen nur keine Änderungen bekommen. Wenn Sie das nicht sehen, können Sie immer auf Ansicht klicken und Sie werden in der Lage sein, den Menüpunkt entsprechend zu sehen. Sie möchten also immer eine Nachricht eintragen, die zeigt, was war. Also meine Nachricht ist die gemeine sagen, wer auch immer die Kranken sehen würde, ich habe keine Herbst-Obereinheiten für den Deal abgelegt. Also müssen Sie es nicht sein, Sie müssen keinen Aufsatz schreiben. Aber lass mich wenigstens eine Idee haben oder wer auch immer eine Vorstellung davon hat, was du getan hast. Danach können wir das Auto anklicken. Dann sagen wir alles zu begehen und singen. Also wird es die Änderungen übergeben, und es wird Sie auffordern, zu speichern, einfach abzuspielen und zu speichern, wird es die Änderungen lokal übertragen und dann wird es irgendwie mit GitHub synchronisiert. Und zu diesem Zeitpunkt, wenn es Änderungen gibt, die auf der anderen Seite warten, was bedeutet, dass Ihr Teammitglied einige Änderungen vorgenommen und vorher eingecheckt hat. Wenn Sie sagen, Commit alle unsinkbaren Push up Ihre Änderungen, erhalten Sie die neuesten. Und noch einmal, wenn Sie die gleiche Datei mit unterschiedlichen Inhalten ändern , dann könnte dieser Konflikt Boden entstehen. Wenn Sie das nicht tun, dann ist dies ein wirklich nahtloser Prozess. Hier lassen wir Sie wissen, dass es erfolgreich synchronisiert wurde und Sie können mit der nächsten Aufgabe fortfahren. 18. Übersicht – Nahteile einrichten: Willkommen zurück Jungs. An dieser Stelle haben wir grundsätzlich zumindest den Großteil unserer Konfigurationen abgeschlossen. Während wir weitergehen, sehen wir vielleicht die Notwendigkeit, andere Dinge einzubeziehen. Aber im Moment wollen wir anfangen, unsere API tatsächlich funktionieren zu lassen, denn außerhalb des Treffens von F5 und des Sehens von Swagger und der Anstöße funktioniert nichts, richtig? Wir haben noch keine API. Also, was wir tun wollen, ist tatsächlich beginnen, unsere get Endpunkte zu konfigurieren. Und ich werde genau erklären, was die Get Endpunkte bedeuten. Also, um uns zu beginnen, werden wir nur auf diesen Wettervorhersagen Controller schauen, der mit unserem Projekt kam. Aber es ist eigentlich nur ein Beispielcode, der einen Kontext dafür bereitstellt was wir tun müssen, um unseren Endpunkt zum Laufen zu bringen. Also steuert unser Controller, und wie ich bereits sagte, tatsächlich, was passiert, wenn ein Benutzer eine Entzündung anfordert und den Controller lehrt. Die Endpunkte werden in der Regel durch bestimmt, sind, was wir Axone nennen, die diese Funktionen sind, die innerhalb des Controllers definiert werden. Und was es mit R reagiert, wenn der Controller die Optionen, ist es eher, es macht es Berechnungen und reagiert dann auf eine Weise, dass die aufrufende Anwendung oder die Client-Anwendung, die versucht, auf die API zuzugreifen , wissen wird, dass dies ein erfolgreicher Anruf. - Vielleicht. Und im Allgemeinen, wenn jemand dazu führt, dass ich zu Rohstoffen komme , um Informationen abzurufen, also wird das Wort , sie bekommen etwas, erwarten sie etwas? Im Kontext dieses Beispiel-Controllers sehen wir, dass wir, wenn wir diesen Endpunkt aufrufen, wird es Daten zurückgeben. Also bekommen wir Beta, vorausgesetzt, es sind sehr zufällige Daten. Es ist nichts zu Ernstes. Aber die Realität ist, dass es der einfache Befehl ist, der bekommt, also haben wir, was wir diese HTTP-Attribute nennen werden, oder? Und es ist zu sehen, es definiert das Verhalten der Funktion. Wenn wir also tatsächlich Ergebnisse testen, und wir das hier im Fußball machen können, und du gehst einfach weiter und zeigst uns alle Beispiele dafür, was wir essen können. Klicken Sie dann auf Try to Toyota und klicken Sie auf Execute. Und dann wird es wissen zeigen, dass dies die Anfrage war, die gesendet wurde. Also beachten Sie, dass es hier keinen echten Indikator gibt, um zu sagen, oh, dieser Schrägstrich gibt es zu wissen, die Kinder und um zu sehen, was der Endpunkt war, kennen wir den Server basierend auf der Tatsache, dass, wenn wir die Anwendung ausführen, das ist unsere Serveradresse. Und dann kennen wir den Controller, den wir mit Wettervorhersagen interagieren, richtig? Das ist der Name unseres Kontrolleurs. Wetterprognose Controller ist ein statisches Schlüsselwort, das jemals kontrolliert wurde und SSI Namenskonvention. Aber dann weiß ich nicht, was darauf wirkt, es, also was wirklich passiert ist, ist das, und ich werde nur einen Haltepunkt hier setzen, damit wir jetzt sehen können, wenn wir auf Ausführen klicken, es trifft tatsächlich diese Haltepunkte. Es ruft diese Methode auf. Und es heißt „Get“. Und wenn ich F5 drücke, kehrt es nur mit allen Informationen zurück, die davon abgerufen wurden. Was hier wirklich passiert ist, ist, dass basierend auf dem Protokoll und bestimmten Definitionen, die wir hier für jede Option machen werden. Die Art und Weise, wie wir unsere Anfragen formulieren, wird die Kontrolle automatisch wissen, welche wir treffen sollten. Und der Kontext dafür ist, dass Sie nicht zu granular mit Ihren Namen für Ihre Aktionen werden möchten , die Sie nicht sehen und 4x erhalten möchten und eine erhalten, eine nach ID bekommt, einen nach Namen erhalten. Sie können anrufen, naja, Sie können tatsächlich das Axon anrufen, im Grunde alles, was Sie sagen wollen. Ich kann ihm seinen eigenen Namen geben. Natürlich gibt es Standards, die besitzen. Aber die Realität ist, dass, wenn Sie mehrere gegessen haben, nennen Sie alle von ihnen, um zu sehen, dass er bekommen. Aber Sie, basierend auf den Daten, die erforderlich sind, um die Informationen abzurufen, können Sie festlegen, welche bekommen aufgerufen werden soll. Also all das, noch einmal, das ist nur die Einführung. Also, und im nächsten Video werden wir unsere eigene Kontrolle zu schaffen. Jetzt fangen wir mit den Hotels an, tut mir leid, mit den Ländern. Und wir werden genau sehen, wie es geht und Sie wollen das Land abrufen ist die Liste der Länder von den Bedürfnissen seiner durch einen API-Aufruf. 19. DEN Endpoint erstellen: Also, jetzt werden wir konstruieren oder ersten Controller und unsere ersten GET-Operationen. Also werde ich mit der rechten Maustaste auf Controller klicken, zu Controller hinzufügen gehen, und dann werden wir nur einen leeren API-Controller machen. Wählen Sie also API auf der linken Seite und API-Controller Dash leer. Und wir werden auf Hinzufügen klicken. Nein, nur zur Klarheit. Wir haben einen Großteil der Datenbankoperationen in unsere Arbeitseinheiten abstrahiert , so dass wir nicht direkt mit unserer Datenbank über unsere Controller interagieren, richtig? Wenn wir den API-Controller mit Aktionen mit Entity Framework ausführen, dann würde es tatsächlich einen Controller generieren, ein aktives Objekt aus dem DB-Kontext hat, der die Datenbankverbindung ist. Und wir würden in der Lage sein, alle unsere Entitätsframework Arbeit genau hier zu erledigen. Gefahr aus, dass jedoch Gefahr auf lange Sicht ist, kann es weniger wartbar als die Anforderungen Mädchen werden, denn dann wirst du am Ende wiederholen eine Menge cool, weshalb wir den ganzen Weg über zu R i Einheit aus der Arbeit, abstrahiert weg. All das hat es sehr generisch gemacht. So dass wir eine Codebasis haben, an die wir nur dynamischere Aufrufe machen. Also, jetzt werde ich mich nur mit der M21 beschäftigen, weil wir wirklich nicht vorangehen müssen und das hier abgekratzt haben. Aber wenn wir die Anwendung aufbauen, werden Sie die Praktikabilität von allem sehen, was wir getan haben. Also ein PI-Controller Strich leer, gehen Sie vor und klicken Sie auf Hinzufügen, und dann auf den Namen. Sie möchten im Allgemeinen noch einmal das Neem, bis es die Endpunkte widerspiegelt, denn genau wie bei Wettervorhersagen, achten wir nicht auf, wenn wir URL-Slash Wettervorhersagen heizen. Wir erwarten, dass wir uns mit Wettervorhersagen beschäftigen. Also, wenn ich erwarte, mit den Hotels zu sein, tut mir leid, ich beginne mit Clincher ist, dass ich eine Einzeldosis behalte. So werden wir Land sind, sagen Länder Controller. In Ordnung. Ich wollte Land sagen. In Ordnung, Landeskontrolleur. Und dann bekommen wir unseren leeren Controller. Nein, ich schaue hinter dem, was du in diesem Controller ansiehst, der Wurzel. Wir haben also zwei Routing-Mechanismen, die wir in der APA-Entwicklung auf dieser MVC-API-Entwicklung verwenden können . Einer ist der überzeugt auf Basis Routing, Routing, oder? Das ist, wo wir tatsächlich zum Startup gehen müssen. Und wir würden in US-Endpunkten konfigurieren. Wir würden unsere Wurzeln irgendwie konfigurieren. So Quincy Endpunkte, Punkte, Mopp, Controller, Controller-Wurzeln . Da gehen wir. Und dann würde ich irgendwie die Namenskonvention definieren. Also könnte ich Name sagen, Doppelpunkt, und ich werde einfach einen Standard sagen. Und dann wäre die Konvention für das Routing das Muster. Uhr sollte so aussehen. Und ich zeige dir nur, dass das nicht das ist, was wir benutzen werden. Was ist ich nur sicherstellen, dass Sie genau alle Optionen verstehen, die es gibt. Also werden wir Controller haben und dann wäre die Probe gleich zu Hause, richtig? Schrägstrich Auktion. Und zum Beispiel Index. Und dann Matsch. Alle erforderlichen Parameter haben nicht die Form der ID. Ordnung, also sollte dies auch in Klammern gefördert werden. Dies wäre also unsere Art, überzeugt vom Basis-Routing-Schema zu definieren. Auf diese Weise benötigt diese Anfrage jedes Mal einen bestimmten Alistair, den wir nach Disk-Controller mit diesem Namen suchen. Zum Beispiel, Wettervorhersagen Controller, oder tut einen Endpunkt, den wir hoffen, zu suchen. Aber wir wollen diese spezifischen Aktionen. Also habe ich erwähnt, dass wir mit unseren Aktionen nicht zu spezifisch werden wollen. Wir wollen nicht sagen, Länder zu bekommen, Land, Land nach Namen zu bekommen, um Kontur zu bekommen, wissen Sie, wir listen sie einfach alle 1250 Auktionen auf. Und dann haben Sie den Klienten angerufen um sich an das Axon zu erinnern, das bei jedem Anruf verwendet werden soll. Das würde uns also irgendwie zwingen, bis jetzt zu tun. Und das ist wahrscheinlich nützlicher für eine Webanwendung in unserer regulären MVC-Anwendung. Aber wenn wir Arrest API-Standards betrachten, was sie wollen, ist, dass das Verb zu bestimmen, was es ist, dass Sie tun werden. Also werden wir dann verwenden, was wir Attribute nennen, die rotieren, oder? Was im Grunde nur sagen wird, suchen Sie nach dem Controller. Und wenn wir die Sequenz ändern wollten, sagen wir api Schrägstrich Controller. Was auch immer Sie hier setzen, Was wird es nach diesen Servernamen kommen, Servername ist localhost, Doppelpunkt, welcher Port zwei Schrägstrich ist, was auch immer Route hier ist, richtig? Also, wenn Sie zurückblicken, Wettervorhersagen bekommen, Öl wo Wettervorhersage, das ist, was es gibt. Also war es, dass Schrägstrich der Controller ist Wettervorhersage. Wenn wir uns unsere neue anschauen, sehen wir, dass wir Schrägstrich api Schrägstrich Controller haben. Dann werden die Links etwas anders aussehen. Wenn wir also das Fußballdokument generieren, werden Sie sehen, dass ans Licht kommt. Aber im Moment werden wir das attributbasierte Routing verwenden. Ordnung? So ermöglicht es uns, direkt auf unseren Controller und direkt auf die Aktionen überhaupt zu spezifisch über welche genau zu bestimmen. Aber dann wird das Verb bestimmen welche Endpunkte basierend auf der Anforderung darunter aufgerufen werden sollen. Also, jetzt, da wir alle angezündet haben, aber wachsen und lassen Sie uns Angebote verdrahten und bekommen. Also, bevor wir etwas anderes tun können, müssen wir unsere privaten lesen nur i Einheit der Arbeit, so dass wir die Vorteile der Datenbank Zugriff nehmen können. In Ordnung, und ich werde das nur in der Score-Einheit der Arbeit anrufen. Dies ist also meine Namenskonvention, bei der ich einen Unterstrich verwende und Sie würden sehen, dass es einen Unterstrich für private Variablen verwendet. Und du wirst sehen, wie wir weitergehen, also brauchen wir das. Und ich werde nur den Logger anziehen. Also ich logger dafür, wir müssen gehen und einrichten oder Injektionen. Also werde ich diese einfach schnell kopieren und einfügen , so dass ich nicht zu monetären tippen muss. So. Wieder einmal bedeutet die Abhängigkeitsinjektion, dass wir, sobald wir uns registriert haben , zum Start gehen und eine Konfiguration abschließen müssen. Nun, sobald Sie etwas im Startup als Dienst im Bootstrapper registriert haben, wird es für vier in der Injektion in irgendeiner Weise in den meisten Fällen verfügbar, oder? Bis jetzt unser Controller, können wir die Instanz der Einheit der Gabel injizieren und wir werden nur eine Kopie davon für fremde lokale Verwendung machen. Das sind also vier. Und wir werden dasselbe für den Logger tun. Okay, also haben wir unsere lokalen Kopien davon. Nein, die Sache, die wir in einem Startup tun müssen, ist tatsächlich die Einheit der Arbeit zu registrieren. So erstellen wir ein Intervall, wir haben es im Bootstrapper registrieren. Also werde ich es verlassen und ich werde Ihnen den Fehler zeigen, den Sie bekommen würden , und dann können wir ihn gemeinsam lösen. In Ordnung, also weiter, nachdem ich diese vorläufigen Dinge getan habe, um meinen Konstruktor zu konfigurieren, werde ich definieren, dass ich auf HTTP möchte. Und Sie können alle möglichen Verben sehen, die dort aufgelistet sind. So HTTP Get Operation. Und um diese Operation abzuschließen, werde ich öffentlich verwenden. Ich werde nur asynchron gehen. Also öffentliche asynchrone Aufgabe vom Typ Axon Ergebnisse. Okay, wenn Sie also, wenn Sie den Controller mit dem generiert haben, mit dem Entity Framework, werden sie ihm hinzugefügt? Sie alle wären Stoßzähne von Handlungsergebnissen gewesen. Sie kommen also nur zum asynchronen Code des Blocks. Also ist es gut, einfach zu beginnen, lseek aus dem zu verwenden, von Anfang an kann ich jetzt Get Land nennen. In Ordnung. Das ist in Ordnung. Ich meine, nun, in diesem Fall will ich alle Länder, also Länder, weil ich mehrere bekomme, oder? Wieder einmal, basierend auf unserem Routing, müssen wir das nicht spezifizieren. Nun, das siehst du später. Und dann wird unsere Aufgabe null einen Versuch fangen. Ordnung, also werden wir versuchen, operieren und jeden Fehler behandeln, den wir bekommen könnten. Und ich werde dies mit x erweitern, so dass wir das Ausnahmeobjekt tatsächlich abfangen. Und dann hier werde ich sagen, var Länder ist gleich o oder Einheit aus Arbeit, um die Länder anzurufen. Und dann kann ich sagen, kriege alles. Okay, es sieht gut aus. Denken Sie nun daran, mit unserer Methode, wir könnten in und Experten auf hier setzen, wenn Sie einen Filter hinzufügen wollen und alle Unternehmen bekommen wo wir ziemlich viele Dinge von dieser Methode allein tun könnten, aber im Moment brauchen wir nur alle. Okay, und dann werde ich zurückkehren. Daher sind die Rückgabetypen sehr wichtig. Du willst alle Schlüssel zurückgeben, wenn alles zu unserem ging, okay, deshalb heißt es okay. Oder 200. Also, um diese Nummer zu starten, ist 200 und wir können das alte Kind mit den Daten zurückgeben. Okay, das sieht gut aus. Bisher werden wir es etwas Kraftstoff modifizieren, aber das ist es, was wir versuchen und tun werden. Und wenn alles gut läuft, kehren wir zurück. Okay, und es wird an den anrufenden Client zurücksenden , welche Daten von diesem Anruf zurückkamen. Wissen Sie in unserem Fang, an dieser Stelle wird unser Logger sehr wichtig. Also Logger Dot Log-Fehler. Und dann kann ich so etwas wie Dollarzeichen sehen. Etwas ist schief gegangen. Und ich kann sehen, dass ich mehr Details in der und jemand meine Interpolation verwenden kann . Gibt das Dollarzeichen dort, falls Sie nicht mit ihm vertraut sind, weisen Sie keine Zeichenfolge zu. Er hat diejenigen getan, die zu diesem Zeitpunkt eine beliebige Variable verhängen sollen. Also werde ich nur irgendwie den Namen von der Methode angeben , wo was auch immer schief gelaufen ist, okay. Also nennen Sie Länder. Ordnung. Und dann werde ich im Ausnahmeobjekt zum Boss gehen. Eigentlich habe ich das rückwärts. Die Ausnahme sollte zuerst im Protokollfehler, Ausnahmekomma kommen , dann ging etwas schief mit unserer Ausnahme, dann unsere Nachricht. Assyrien-Protokoll mit eigentlich nur Schwellenwerten werden die gesamte Stack-Trace ausgedruckt. So können Sie alle Details des Pfeils aus der Ausnahme sehen, die wahr war. Nein, wenn es einen Fehler gibt, will ich nicht einfach werfen, was ich tun wollte, ist den Klienten zu alarmieren, dass etwas schief gelaufen , also ja, der Logger sieht es, der für alle internen Zwecke ist. Aber dann möchte ich etwas zurückgeben, das der Benutzer sieht, weißt du, das passiert. Ein Statuscode 500 ist also der universelle Code, um zu sehen, dass ein Serverproblem aufgetreten ist. Okay, das sagt dem Benutzer, dass das hier etwas schief gelaufen ist. Es geht nicht um dich, sondern um mich. In Ordnung. Der Statuscode 500 bedeutet also Interner Serverfehler. Und andere sagen, bitte versuchen Sie es später erneut. Also gut, das sind unsere Kunden. Schauen Sie kann ich und der Verbrauch der API wird sehen, wenn ein Fehler vorliegt. Andernfalls sollten sie die Liste der Länder erhalten. Also lassen Sie uns das testen. Okay, das erste, was Sie bemerken werden, ist, dass , nein, unser neuer Endpunkt wurde dem Swagger hinzugefügt. Das zweite, was Sie bemerken, ist der Unterschied zwischen Holden Links Schleife. So Slash Wettervorhersagen für uns selbst Slash api Schrägstrich Land. Wieder einmal hat das mit der Route zu tun, die wir definiert haben, erscheint, ob es sich um einen API-Schrägstrich Controller handelt oder es sich nur um den Controller-Namen handelt. Okay, also ist es, es ist dynamisch. Also können wir jederzeit die API entfernen, wenn es zu viel Mühe ist, aber wir werden es für jetzt verlassen. Also lassen Sie uns es sehen, probieren Sie es aus, und dann klicken wir auf Ausführen. Und was bekommen wir? Also erstens, Das ist die Anforderungs-URL, also der Server, in Ordnung, Schrägstrich API Schrägstrich Land. Und wir bekommen diesen Fehler, richtig. Also ist es tatsächlich Spucken Werkzeug oder Swagger die gesamte Antwort. Das Meer kann den Dienstpunkt nicht auflösen, der diesen Punkt aktiviert , und Sie sehen, dass es den 500-Fehler aufruft. Okay, also haben wir gesagt, dass es eine 500 zurückgibt, wenn etwas Schlimmes passiert. Und die andere Sache, die zu bemerken ist, ist, dass ich den Namen der aufgerufenen Funktion nicht angebe. Also, bevor wir diesen Fehler beheben, beachten Sie, dass ich nicht sagen, Schrägstrich API Slash Controller Slash Länder bekommen. Es ruft nur Schrägstrich api Schrägstrich Land. Sie, der Benutzer kennt den Namen der Methode nicht, die aufgerufen wird und die Antwort zurücksendet. Also das ist eine andere Sache, dass, wenn wir über die Routing-Konvention sprechen, weil wir angeben, dass es ist, ich sie automatisch gebildet. Es sollte ein Git-Befehl sein. Also werden wir die Ära reparieren und dann werde ich es erneut mit Postman testen, was ein wenig mehr Kontext bieten sollte was wir mit GET versus post, et cetera, et cetera, et cetera. Um diesen Fehler zu beheben, müssen wir unseren Dienst registrieren und ich denke, es vorher in unserem Start, nicht cs. Also beim Start müssen wir etwas wie Services dot sagen und transiente i Einheiten oder vier Arbeitseinheiten hinzufügen . Sie würden also sehen, dass die verschiedenen Schuloptionen vorübergehend sind, Bereich hinzufügen und das Singleton hinzufügen. Ja, manchmal vergesse ich, oder? Also fügen Sie das, was wir getan haben, ein Add-Signal TA1 vor, noch haben wir es nicht. Okay, also bin ich Trans. Es bedeutet, dass jedes Mal, wenn es benötigt wird, eine neue Instanz im Bereich erstellt wird bedeutet, dass eine neue Instanz für einen Zeitraum oder für die Lebensdauer einer bestimmten festgelegten Anforderungen erstellt wird. Und add singleton bedeutet, dass nur eine Instanz, in der sie für die gesamte Dauer der Anwendung vorhanden sind. Basierend auf Ihren Bedürfnissen, können Sie am Ende verschiedene tun. Also fügen Sie transient hier bedeutet, dass, wenn jemand meine Kontrolle trifft, ich immer erstellen werde. Dies wird immer eine neue Kopie liefern. Die IU und es ist arbeitslos. Also lassen Sie mich einfach voran und fügen Sie die fehlenden Referenzen ein. Und dann versuchen wir es noch einmal. Dieses Mal werde ich Postman verwenden, um diese Anfrage zu bearbeiten. Also werde ich immer noch versuchen zu wählen, nur um das zu zeigen. Okay, also bekommen wir einen Fehler für den Logger. Und okay, lassen Sie uns das reparieren. sind also, es ist gut, diese Fehler zu sehen. Dc kann sagen, warum. Wir können nicht. Wir können den Schuh bis Y verfolgen, wo er die bekommt. Also denke ich, das Problem mit dem Logger ist, dass es mit dem Kontext der Klasse injiziert werden muss, in die die injiziert wird. Also in diesem Fall wäre es der Controller. Also werde ich nur tauschen diese Alyssa I ein Logger im Zusammenhang dieser Änderung, wo wir sehen Wetter con Schrodinger zaubern. Okay, und dann probieren wir es noch einmal aus. Okay, also versuchen wir es diesmal mit dem Postboten. Also werde ich nur die Anforderungs-URL eingeben, die noch einmal nur der localhost-Doppelpunkt ist, die Portnummer, die Sie haben. Und dann Schrägstrich api Schrägstrich Land. Niemand würde über GET gegen Post gegen Spots sprechen. Boltzmann, wir können versuchen, den Typ zu ändern. Also denken Sie daran, dass wir es gebaut haben, ich verstehe, dass es das ist, was es sein soll. Was bedeutet, dass, wenn ich versuche, dieselben Endpunkte ohne Post aufzurufen, es mir eine Antwort geben kann. Und OK, ich bekomme etwas wegen der SSL. Sie können also einfach die SSL-Verifizierung deaktivieren und wenn Sie dieses Problem bekommen, okay, dann gehen wir. So Methode Mata Last. Methode Mata Load bedeutet, dass es eine Anfrage und das Verb gesendet, das angefordert wurde. Diese Nüsse existieren. Also, wenn ich versucht hatte, bekommt und dann nochmal Nonce schicken, bekomme ich eine 500 und ich bekomme einen weiteren Pfeil. Ordnung? Oh, wir bekommen einen guten Fehler. Also dieses Konzept der guten Fehler, wo es gut ist, diese Fehler zu sehen und zu verstehen, wie sie zu beheben, oder? Also dieser sagt, dass System.Out Punkt nimmt JSON eine Ausnahme gibt , weil ein potenzieller Zyklen erkannt wird. So ist der Dollar gewachsen, dass wegen der Abhängigkeit vom Hotel, Hotel hat eine Abhängigkeit von Land zu Land. Hat diese Abhängigkeit von Hotel. Sobald es sagt, ist so gut, Ich bekomme Hotel, das Gegenteil hat, Ich bin Andreas Hotels. Ich sehe viele Daten, wie es von Seite zu Seite geht. Also bin ich, lasst uns das reparieren. Ich bin dem schon mal begegnet. Also lasst uns einfach weitermachen und das reparieren. Um dies zu tun, brauchen wir eine Bibliothek, verwalten, tun Pakete. Und wir werden die neue Softpunkt-JSON-Bibliothek bekommen, aber nicht die, die wir wollen. Das Microsoft ist b-a. Lassen Sie mich einfach in neue Wendung soft eingeben. Das ist nicht das, was wir wollen. Wir wollen das hier, das Optimierte. Für unseren Zweck, richtig? Also werde ich einfach voran gehen und aus1 installieren. Okay, und sobald es installiert wurde, müssen wir in Richtung Start gehen. Und wir werden Controller hinzufügen. Wir werden neue TEN soft JSON hinzufügen. Dort gehen wir und definieren einige Optionen. Also alle Lambda RO, ich meine, Sie können es Option nennen, wenn Sie eine wollen. Tolkien geht es gut. Lambda R0 Und definieren Sie dann, dass OP-Punkt diese Serialisierer-Einstellungen serialisiert. Punktereferenz, Schleifenbehandlung ist gleich zwei analoge Löwen, also nicht zu weit vom Bildschirm. Die Serialisierer-Einstellungen Punktreferenzschleifenbehandlung ist also gleich Newtons Softpunkt-JSON, nicht Referenzschleifenbehandlung. Und dann ist das eine Aufzählung, so weiter zu sagen, ignorieren. Wo Sie das sehen, sehen wir im Grunde, wo Sie eine Referenzschleife sehen können. Keine Ahnung, machen Sie eine große Sache, ignorieren Sie es einfach. Ich habe ein Auge verschlungen. Lassen Sie das Programm laufen. Okay, also noch eine Sache, die ich gerade durchmache und irgendwelche kleinen Fehler korrigiere, die hier gemacht werden. Wir rufen alles, was ich nicht getan habe, war erwartet eine Kardinalregel, wenn wir eine asynchrone Funktion aufrufen oder etwas, das eine Aufgabe ist, stellt sicher, dass wir Gewichte sind. In Ordnung, also versuchen wir es noch einmal. Okay, also gehen wir zurück zum Postboten, werden wir versuchen, mehr zu schicken. Und das sieht ein bisschen besser aus. Da gehen wir. Status 200, okay? Also, wieder einmal, unser Status 200 ist ein universeller Sand, der alles in Ordnung ist. Und anstatt uns den Statuscode 200 sagen zu müssen, gab uns Knidos eine Methode, denn sie haben leider keine Methode für die FIFO-Engine oder zumindest habe ich noch keine gesehen. Deshalb sieht dieser so aus. Und wir können einfach sagen ok, mit den Daten zurückgegeben werden und es wird automatisch in serialisiert werden. Da gehen wir. Also, beachte, dass wir jedes Anwesen zurückkommen und Hotels, die leer sind, Farnell, richtig? Weil wir die Wähler nicht einbezogen haben. Was wir das später tun können. Also, das ist, wie wir damit umgehen, bekomme ich keine 7x eine weitere Modifikation zu machen und das ist, das Mapping zu machen. Denken Sie also daran, dass wir die tatsächlichen Domänenobjekte nicht zurückgeben möchten. Ich hatte recht, nein. Besorgt alles ist das Rückkehrland. Und Land ist das Datenbankobjekt. Was wir zurückgeben wollen, ist das dto. Also wollen wir zurückkehren, beitragen Deal. Und dann werden wir später sehen, wie wir das Detail um ein bisschen mehr erweitern können, macht es Sinn, warum ich durch all diese Schaufel gehen werde, weil eindeutig das Datenmodell, das das Domänenmodell als Rückgabetyp funktionierte. Aber dann wollen wir immer noch diese Segregation. Also werde ich einfach Kontinuität sagen, oder wir werden darauf zuordnen. Deshalb brauchen wir unseren Autumn Mapper, um das zu tun. Und um Herbst oben zu bekommen, muss ich einen privaten Lesetyp definieren, der nur vom Typ abgerufen wird. Ich bin oben, also gehe ich einfach voran und füge das ein und mache dann die Injektion. Okay, wir, nachdem wir injiziert haben, werden wir die Subjekte trennen. Also werden wir sagen, var Länder ist gleich diesem Aufruf. Und dann ging ich eine andere Variable darunter und rufe sie über Ergebnisse auf, ist gleich Mapper-Punktkarte, die ich ging, um den Datentyp anzugeben, dem ich es zuordnen möchte. Also möchte ich es unserer Liste des Typs Land dto zuordnen , für das ich eine fehlende Referenz hinzufügen muss, okay? Und legen Sie die eckigen Klammern offen. Und Kriegskarten sind Länder, die bereits als Liste zurückkommen. In Ordnung, also egal welcher Datentyp Sie sind, Sie gehen wieder los, um sicherzustellen, dass Sie diesem entsprechenden Datentyp und dann all das zuordnen. Also gibt es nur gehen, um alle Domain-Objekte zu nehmen und sie in Land dto Objekte zu konvertieren und dort gespeichert. Wenn ich also keine Ion-Liste angegeben hätte, würde ich einen Fehler erhalten, weil dies eine Liste ist. Und ich versuche, nun, es würde einen Fehler geben, unabhängig davon, es kann Ihnen keinen Syntaxfehler geben, aber Sie können sehen, dass der Datentyp nicht ganz das ist , was ich erwarte, weil ich diese Liste brauche, richtig? Also sei einfach sehr explizit in diesem Kartenabschnitt gesetzt. Das ist deine Kartierung. Ich liste das auf, oder Sie bekommen, dass ich hoffe, es einer Liste dieses Datentyps zuzuordnen. Und dann, anstatt zurückzukehren, werden die Länder Ergebnisse zurückgeben, die vom Typ Land D TO sind. Also an dieser Stelle, wenn es ist, dass wir einige Details weglassen wollten, sind weitere Details enthalten. Wir hätten diese zusätzlichen Felder hier definieren können, nicht was auch immer Berechnungen hier tun wollten. Und dann würden sie nie wirklich sehen, was drin ist, was direkt aus der Datenbank kommt. Was wir es bereinigt hätten, transformiert, verschönert es so viel wie wir wollen, bevor wir die Daten zurückgeben. Also lasst uns einfach voran gehen und testen und sicherstellen , dass dieser funktioniert und dann sind wir mit diesem Zeug fertig. Also zurück zum Postboten, sagen wir „Senden“. Also wird es die gleiche Methode treffen. Und richtig, nein, es bringt zurück. Also hier ist der Beweis, der etwas anderes herbeibringt, weil denken Sie daran, Hotels waren am Ende der Liste anfangs, kein ID Hotel Name als kurze Namen. Sie wissen also, dass diese Daten nur dann neu strukturiert werden, weil die Felder im Widerspruch dazu stehen, dass Sie sich in einer anderen Reihenfolge befinden als in den Domänenobjekten. So oder so, wir können sehen, dass es immer noch funktioniert und so sollte es wirklich sein. Wenn wir zurückkommen, schauen wir uns an, wie wir ein bestimmtes Land basierend auf dem Ausweis bekommen können. Fangen wir mit der ID an. 20. Construct GET By Id Endpoint: Ordnung, also haben wir vorher unsere get-Methode konfiguriert, und das ist wirklich wie alle Methode, aber es ist nicht die ganze Zeit, dass unsere Client-Anwendung alles bekommen will. Manchmal wollte ich bestimmte Daten erhalten, in Ordnung, also wollen wir sie zumindest an Endpunkten bereitstellen, an denen sie ein Land basierend auf einer bestimmten eindeutigen Kennung erhalten können . In diesem Fall wird die ID. Ordnung? Und nur für den Kontext, da wir die API mit dem Kontext dieses Clients abrechnen. Wenn Sie eine Liste von Ländern gesehen haben und er die Details aus einem dieser Länder sehen wollte und Sie auf Ansicht klicken, dann würde es passieren, dass es zur Datenbank zurückkehren würde und dieses bestimmte Land angezeigt werden die spezifische Entzündung sind Einzelheiten des jeweiligen Landes. Okay, also das ist das Gleiche, für das wir einen Endpunkt bereitstellen wollen. Also, wenn auf ihrer Seite, wenn der Benutzer auf das Land klickt, sie in der fehleranfälligen, sagen wir, welches Land hier angeklickt wurde, welche IDs dort? Hier ist die ID API. Bitte, darf ich die Details haben? Und dann sagen wir, OK, wir machen die Suche. Hier sind die Details für das jeweilige Land. Also ohne weitere Verzögerung, lassen Sie es bekommen. Also werde ich eigentlich nur das Original kopieren. Okay, und wir werden nur ein paar kleinere Änderungen vornehmen. Die erste Änderung wäre also die Attribute. Also ja, sie sind beides und bekommen, richtig. Aber dieses Get muss insbesondere wissen, dass es einen Parameter annehmen kann, okay? Und das ist wirklich, es hat viel mit der Dokumentation über Zwecke auf seinem Holz zu tun , so dass, wenn die Leute es sehen, sie gleichzeitig ableiten können, wie es sich unterscheidet, während es entlang geht. So können Sie den Git definieren, aber dann öffnen und schließen Sie die Klammer, und dann definieren Sie die Vorlage für das Gute. Also kann ich hier sagen, dass ich erwarte, dass einige Umgebungen ID genannt werden und es vom Typ int sein sollte. Wenn wir also nach Namen bekommen wollten, könnten wir so etwas wie den Namen des Typs String machen. In Ordnung, also, so dass Sie wissen, dass diese bekommen wird, wird diesen Parameternamen zu nehmen. Und die Namen sind sehr wichtig. Und dieser Datentyp, der auch sehr wichtig ist. Als Nächstes müssen wir das umbenennen. Ich meine, Länder holen, das ist keine Länder, das ist ein Land zu bekommen. Und es nimmt eine Parameter-ID. So wie bei jeder anderen Methode in irgendwo anders in c-sharp, sobald sie eine Methode aufrufen, die Umgebungen hat, müssen Sie die Wohnung verteidigen, die das erwartet. Und beachten Sie, dass der Name hier, viel ist der Name, der in den Attributen ist. Okay, also hol dir die Länderkennung, null. Wir haben den gleichen Versuchsfang. Nun, dann werden wir die Abfrage und die Mapping-Objekte ändern. Also eins, wir bekommen keine Länder, in die Land kommen und arbeiten auf die gleiche Weise daran. Es sind Einheiten, alle vier Länder, wir die Get-Methode nennen. Alles klar, und unsere GetMethod, beachten Sie die rote Linie, die Get-Methode erfordert, dass der Ausdruck die Bestimmung hinter dem ist, was genau es bekommen sollte. Also müssen wir in diesem Ausdruck definieren. Also denken Sie daran, dass ich sagte, dass der Ausdruck wirklich ein Lambda-Ausdrücke sein wird. Ich werde in der gleichen Art von Lambda-Ausdruck übergeben. Sagen Sie immer Tolkien Lambda R0. Und was suche ich dann? Q-Punkt. Und dann habe ich alle Felder vom Tisch. Also wurde das für Länder entworfen, oder? Also, was ist Feld in den Tabellen des Landes sollte ich suchen? Ich suche einen IB. Und meine Bedingung ist, dass die ID in Tabelle des Landes mit der ID übereinstimmt, die über den Parameter hereinkommt. In Ordnung, und dann auf die gleiche Weise kann ich auch einschließen, weil ich nur darüber nachdenke. Wenn Sie mich im Zusammenhang mit diesem Land fragen, hat jemand auf ein Land geklickt. Ich habe herausgefunden, dass Sie vielleicht alle Hotels für dieses Land sehen wollen. Also, während Sie sich die Liste der Länder ansehen, wollten Sie nur vielleicht die Liste der Länder sehen. Aber wenn man sich ein Land anschaut, möchte man wahrscheinlich das ganze Lotto sehen, oder? Also unsere Hotels, so wollte ich sagen, eine neue Liste, jemand Abbas in einer neuen Liste von Typ String. Und ich werde es noch hinzufügen. Also das ist alles, was wir initialisieren eine Liste und ein wir können sagen, dass ich ganze Tos einschließen möchte. Also noch einmal, das wird jetzt gehen, es ist unsere Einheiten aus der Arbeit wird die treffen, lassen Sie mich die Methode finden, die im generischen Repository ist. Und es wird das Get treffen. Das ist also der Ausdruck, das ist die Includes. Es bekommt also alle roten Karten. Dann heißt es, wenn es ein Includes gibt, gehen Sie voran und fügen Sie alles, was Sie brauchen, um einzuschließen, schließen Sie die Hotels, richtig? Und dann werden wir in der Abfrage suchen, das Trucking abnehmen und den ersten Stern Standard zurückgeben, um so viel zu verlangen, und Standard bedeutet wirklich, dass nur neolithische Affinität zurückgegeben wurde. Nun, der erste Datensatz, der diesem Ausdruck entspricht, so dass sie ausdrücken, wäre, wo q dot id gleich dem ID-Wert ist. Wir werden die ganze Berechnung machen und einfach zurückkehren. Sie wollen Red Guard nahm Land mit allen Hotels, die verfügbar sind. Also werde ich nur mit meiner Domain überprüfen, nur um sicherzustellen, dass das Ding heißt Hotels verursachen dieses System viel genau die gleiche Weise in der bewussten ETO, es muss Zehen genannt werden. In Ordnung, jetzt, da wir die Verkabelung gemacht haben, werde ich nur meine Kartierung ändern. Also bekomme ich ein Landobjekt, Juan Objekte. Also werde ich nicht auf unsere Liste kommen. Ich mappe nur auf, um Teal beizutragen. Das ist also eine Eins-zu-Eins-Zuordnung. Und ich ziehe nur die S ab und repariere die Plurals und Singulare, nur damit ein Code selbsterklärend ist. Wir sollten diese Länder nicht anrufen, wenn wir nur eins bekommen, oder? Also versuche ich nur, sicherzustellen, dass es lesbar ist. Okay, und dann werden wir nur sehen, dass etwas schief gelaufen ist, im Namen des Get Country. Okay, also lassen Sie uns das für einen Spin nehmen , damit Sie sehen, dass das Get wirklich unkompliziert ist, richtig? Wir wollten es nicht, und wir nahmen die Quote mit ein paar Modifikationen. Möglicherweise nicht damit. Also lass uns mal sehen. Das erste, worauf ich Sie aufmerksam machen wollte, ist die Dokumentation. So sehen Sie API Schrägstrich Land und Idiotie APIs Schrägstrich Land ID. Damit die ID angezeigt wird, gibt es mit freundlicher Genehmigung unserer Anmerkung hier. Ordnung? Und dann, wenn wir einen Drilldown in seine, werden Sie sehen, dass sie tatsächlich sehen, dass der ID-Parameter erforderlich ist. Keine zwei Möglichkeiten dazu. Es ist ein Pflichtfeld. Ordnung? Und wenn wir sagen, alles zu versuchen, können Sie das hineinsetzen. Aber ich werde sagen, ich werde Postman benutzen, um das hier zu testen. In Ordnung? Also, wenn ich sage, werde in Ordnung mit Postboten und dem gleichen Endpunkt und CSS und ich bekomme den Ursprung jetzt bekommen, was die Liste bekommt. Nein, wenn ich diesen Endpunkt ändere und ich sage Schrägstrich eins, Ordnung, und dann auf Senden, Ausschau Was ich bekomme Box, also bekomme ich nur ein Ergebnis. Und das ist die ID. Und es ist die Liste der Hotels, bei denen es nur ein Hotel gibt, das mit Hotel Nummer eins verbunden ist. Beginnen Sie mit Land Nummer eins. Es gibt nur ein Loch für das, was das auf IRI ist. Also, wenn es mehr als alle von ihnen unter dieser Eigenschaft oder Attribut aufgelistet werden. Und dann ist der Name Dummy-Konto von short_name ist GM. Du siehst also, dass unser zweiter Git funktioniert. Also lassen Sie mich einfach unseren Haltepunkt setzen. Und sicherlich genau das, was passiert, wenn wir dieser Bitte nachkommen. also unseren Haltepunkt dorthin setzen und dann erneut auf Senden klicken, wird der Haltepunkt aktiviert. Wenn wir in der Parameterliste schauen, sehen wir unseren Wert, einer kommt vorbei. Ordnung? Und dann können wir weitermachen und ich werde F zehn benutzen. Also Nachrichten, wenn es nicht in die ganze Methode geht , verursachen, was, wenn ich mir ein Land-Objekt anschaue, das zurückkommt, Sie werden Hotels sehen und das ist zumindest mit einer ID, dem Namen, dem kurzen Namen, und dann machen wir das Mapping. Kein Ergebnis hat also alle Daten, die nur im Land waren. Und dann wird es zu allen k zurückkehren, mit Ergebnissen wird es automatisch deserialisieren, um es in JSON-Layouts zu serialisieren. In Ordnung, und genau da sind wir fertig mit unserem zweiten Get. Also, jetzt wissen wir, um alle zu bekommen, und jetzt wissen wir, wie man durch Baseline abgesehen von besonderen Anforderungen zu bekommen. 21. GET Endpunkte für Hotels einrichten: Na gut, Leute, also stelle ich eine Herausforderung für dich aus. Ich möchte, dass du das Video pausierst. Ja, es fängt gerade an, aber geh weiter und pausiere es. Und ich möchte, dass du weitermachst und einen Controller für die Hotels erstellst. Sie können seinen Hotel-Controller anrufen. Und die Funktionalität, die wir gerade mit unserem Country-Controller durchgemacht haben. Ich möchte, dass Sie es im Zusammenhang mit den Hotels replizieren. Also habe ich es schon hier. Aber ich möchte, dass Sie pausieren, wo der Wind zusammen durchgehen soll. Aber ich möchte, dass Sie die Aktivität für sich selbst pausieren. Und dann vergleichen wir Notizen. Okay, Buck und ich sind Sagan Buck, weil ich davon gehe, dass du das Video pausierst und weißt, dass du weitermachst. Und jetzt können wir es gemeinsam durchmachen. Also hier haben wir den Hotel-Controller und ich ging durch die gleichen Schritte. Ich klickte mit der rechten Maustaste Controller, klickte auf Add Data Controller, leerer API-Controller namens Total Controller. Ich ging weiter und injizierte Musik unter den gleichen Diensten, die nicht im Kontakt-Controller waren , und initialisierte sie im Konstruktor? Nein, alles ist so ziemlich identisch. Die einzigen Dinge, die wirklich geändert haben, wo meine Variablennamen, denn offensichtlich werde ich nicht dieses eine Länder nennen, wenn wir Hotel bekommen. Also bekommen Hotels statt bekommen Länder Tele gesagt, anstatt Hotel x2 und Ähnlichkeit zu bekommen, würden Sie zu einem Hotel nach ID bekommen wollen. Eine andere Sache, die ich möchte, dass ein Punkt gesagt wäre die Mapping, wo die T0 zu halten. Und das letzte wäre, dass ich irgendwie mehr Attribute hinzugefügt habe. Also, wie wir dieses Attribut Art von Eden sehen, es zeigt die Elis Swagger. Und ich meine, es diktiert das Verhalten, aber Swagger hängt davon ab, auch zu wissen, wie LTL Formel diese Dokumentation. Also genau hier lasse ich sie wissen, dass diese Methode 200 produziert. Es produziert auch 500, denn wenn Sie sich erinnern, wenn wir uns Swagger angeschaut und er zu 500 zurückkehrte, hätten Sie etwas gesehen, das unter diesem 500 Fehler undokumentiert ist. Und so wollen wir nur sicherstellen, dass Swagger kontextuell so viele Informationen wie möglich an den Entwickler zu jeder Zeit erzählt. Also und ich bringe Swagger auf. Sie werden sehen, dass das Land der Segregation anders ist als das Hotel. Ordnung? Ich hoffe, du siehst das. Und wenn wir uns das Hotel oder eines davon ansehen, dass die Attribute waren beide Attribute hinzugefügt wurden. Sie würden sehen, dass die 500 ursprünglich nicht da waren und sehen, dass die 200 null 500 anfangs nicht da war. Alles klar, das funktioniert oder für jemanden, der Postman benutzt, um ein paar Tests zu machen. Also habe ich immer noch meinen Test aus der Zeit. Und die Sache ist mit Bozeman, du kannst immer einfach einen neuen Tab starten, oder? Anstatt also eine Wanne zu benutzen, um ständig zu wechseln, wollte ich eine für das Ghetto ohne Parameter haben und verteilt hier drüben. Dies ist also kein Parameter, der sieht, ob das funktioniert. Okay, tut mir leid, sie haben meinen Code vorher nicht getestet. Nein, ich habe es geschrieben und ich habe es nicht getestet und ich bin froh zu sehen, dass es funktioniert. Ordnung? Und dann derjenige mit dem Parameter, der auch funktioniert. Und im Moment ist das alles, was es gibt, um unsere Controller einzurichten. In Ordnung, so viele Controller, wie Sie vielleicht haben, natürlich, Variationen und basierend auf Kontexten, können bestimmte Dinge unterschiedlich sein. Aber wir haben eine gute Vorlage, auf der wir unsere Git-Operationen aufbauen können. Okay, also kannst du weitermachen und das einfach loswerden. Und wenn wir zurückkommen, werden wir unsere Änderungen in unsere Repositories verschieben. 22. Letzte Tipps und Änderungen in GitHub: Okay, Leute, also sind wir wieder in unserem Projekt und unsere Aufgabe ist heute einfach. Wo Schwan, um in all unseren Änderungen zu überprüfen? Alles mit unserem SDK wäre also auf dem Weg noch einmal geändert worden, und alles mit einem grünen Pluszeichen wurde hinzugefügt. So können wir einfach voran gehen und Änderungen vornehmen. Und ich werde nur aktualisieren, was ich nicht brauche, um zu aktualisieren, teilen Sie alle meine Änderungen. Und stattdessen hat jemand in meine Nachricht gesteckt. Und meine Nachricht ist nur, dass alle wissen lassen, dass ich die Kontur hinzugefügt habe und die Hotel-Methoden auch dieEinheiten von der Arbeit DI-Abhängigkeitsinjektionsreferenzbeheben Einheiten von der Arbeit DI-Abhängigkeitsinjektionsreferenz , weil denken Sie daran, dass wir diese Änderung im Startup vorgenommen haben. Also kann ich weitermachen und alles begehen und sinken. Und wenn das erledigt ist, sind wir bereit, mit unserem nächsten Modul fortzufahren. 23. Deine API sichern – Section: Willkommen zurück Jungs. In dieser Lektion machen wir einen kurzen Überblick über das Konzept der Sicherheit in Bezug auf Ihre Rest-API. Jetzt, wenn wir über Sicherheit sprechen, obwohl es irgendwie selbsterklärend ist. Wenn wir darüber sprechen, was Sicherheit ist, müssen wir irgendwie in einige Besonderheiten kommen, wenn wir Loch diskutieren, wir machen eine API sicher. Jetzt werden einige dieser Dinge tatsächlich bereits berücksichtigt und kommen mit mindestens nicht.NET Core API aus dem Kasten heraus. Ich kann nicht wirklich nach anderen API-Entwicklungs-Frameworks reisen. Wieder einmal Spannung für.net-API, wo sie bestimmte Sicherheitsüberlegungen von Anfang an von der Projekterstellung durchsetzen oder stark ermutigt haben. Und dann liegt es an dir, wenn du mit dem fortfahren willst, ist wirklich und wirklich machen sie es so eingebaut, dass du morgen realisierst, dass ganze Sicherheit aus der Box sein könnte. Der erste und wahrscheinlich wichtigste wäre also, SSL zu verwenden. SSO ist also ein Standard-SSL, TLS. Es gibt Standards für die HTTP-Kommunikation und was sie tun, ist eine gewisse Menge an Verschlüsselung für alle Kommunikationen durchzusetzen , die über die Pipe gehen, oder? Also, wenn Sie das Projekt erstellen, glaube ich, dass es dort eine Option gab, SSL zu aktivieren oder zu deaktivieren, und ich habe es nicht viel Aufmerksamkeit darauf gebracht. Aber wenn Sie sehen möchten, ob SSL aktiviert ist, können Sie immer mit der rechten Maustaste auf das Eigenschaftenreplikatprojekt gehen, viele Eigenschaften gehen zum Debuggen. Und dann würden Sie hier sehen, dass SSL standardmäßig aktiviert ist. Selbst im Debug-Modus ermutigen sie Sie, SSL zu verwenden. Und natürlich, wenn Sie fortfahren und veröffentlichen, Sie empfohlen, AS richtige SSL-Zertifikate zu verwenden. Andernfalls haben Sie auch Zugriff auf sehr leistungsfähige Benutzerauthentifizierungssystem in Form von Identitätskern, die wir sitzen werden , die Sie autorisieren, authentifizieren und sagen wir Sanitizer Quests basierend auf, wer Ihrer Meinung nach auf Ihre API zugreifen sollte. Jetzt brauchen Sie das nicht immer für eine API. Manchmal muss Ihre API für jedermann öffentlich zugänglich sein. Und dann gibt es einige Zeiten, in denen jemand die Registrierung überprüft, wer sie sind, bevor sie auf Informationen basierend auf unserer API zugreifen können, und nein, jeder könnte einen Zugriff haben. Die Liste der Hotels sind besondere Hotel-Akt wird. Es gibt keine Einschränkung, um einen Benutzer zu authentifizieren und zu autorisieren, bevor wir ihnen erlaubt, dies zu tun , aber wir werden Dinge in Kraft setzen, die es uns erlauben würden , Art von Kontrolle, wer Zugang zu einem bekommt. Obwohl Dinge wie das, was wir in unseren URLs aussetzen und wenn wir sagen URLs, Ich meine wie Hier sind wir Denken Sie daran, dass, wenn wir wollen, dass es zu einem bestimmten Hotel zu bekommen , wo der Benutzer Topos diese ID laden, das sind keine sensiblen Daten. Aber wenn es so etwas wie ein Passwort war oder etwas, das man nicht will, dass die Welt sieht, dann will man es definitiv nicht in Wohnungen stecken. Und so wie Sie entwerfen, haben Sie eine defensive Möglichkeit, Ihre API so zu entwerfen , dass Sie implizit bestimmte Dinge sichern. Bei schlechtem Design könnten Sie Sicherheitslücken einführen. Also natürlich, was Sie erlauben, Passah so hübsch zu sein und nimmt Lauras Parameter. Was Sie schweigen Sind Sie verschlüsseln auf dem Weg all diese Dinge, es, um Ihre Anwendung sicher zu machen. Jetzt mit all dem, was gesagt denken wir manchmal, dass wir eine sehr, sehr sichere Sache haben müssen . Wir haben versucht, jede Form von Sicherheit in unsere API zu integrieren, und das ist nicht unbedingt wahr, wie ich immer gesagt habe, Kontext bestimmt viel. Also gebe ich Ihnen ein Beispiel für ein Mal, dass ich eine API entwickeln musste oder obere sind im Besitz eines Drittanbieters. Und das Konzept war, dass dieser Drittanbieterdienst einige Messaging-Dienste bereitstellte , die mein Unternehmen für verschiedene Anwendungen verwendet hätte? Nein. Was wir nicht tun wollten, war, dass der Endpunkt Dritter in 5-6 verschiedene Verpflichtungen integriert wurde . Denn wenn der Anbieter sein Design oder etwas änderte, hätte er fünf oder sechs verschiedene Berührungspunkte, die beibehalten müssten. Stattdessen. Ich wurde für die Entwicklung einer API verantwortlich gemacht, die die Drittanbieter-API verbraucht, und dann würden die internen Anwendungen meine API verbrauchen , so dass, wenn der Dritte ihr Design änderte, wir nur die 1 haben würden, weil jeder konsumiert unsere bereits interne API. Wissen Sie, wann, wann, als das Unternehmen erwähnte, dass die Sicherheit natürlich sehr hoch auf der Liste war. Und ich ging voran und implementierte alle Arten von Authentifizierung auf Tolkiens. Und wir werden uns Tolkiens auch ansehen, während wir mitmachen. Aber alle Arten von Sicherheitsprotokollen und wirklich und wirklich war übertrieben, weil die interne API war nur, dass es intern war. Wir hatten IP-Whitelisting und sehr starke Netzwerkschutzprotokolle rund um das, was intern in unserem Netzwerk betrieben wurde. Um also eine interne Anwendung zu haben, müssen Sie überprüfen, wer es ist, um auf die andere interne API zuzugreifen, bevor es an den Drittanbieter geht. All das war wirklich übertrieben. Es gibt uns ein Szenario, in dem ich persönlich etwas umgesetzt hätte, das übertrieben war. Nach einer Weile haben wir gerade all das überschüssige Zeug gebaut und wir hatten alle Sicherheitsprotokolle, um das Gleichgewicht überhaupt abzuwehren. Also noch einmal bestimmt der Kontext viel. Für diesen Abschnitt werden wir jedoch die Authentifizierung implementieren, was bedeutet, dass sich unsere Kunden bei unserer Anwendung mit unserer API-Anwendung registrieren müssen . Und sie müssten sich anmelden und dabei den Benutzernamen und das Passwort übergeben , mit dem sie sich registriert hätten. Und danach werden wir davon ausgehen, wie wir JSON nennen. Web-Token sind Träger-Token, die Informationen haben, die uns jedes Mal informieren , wenn sie eine Anfrage stellen, wer sie sind, damit sie sich nicht weiter anmelden müssen , bevor sie Dinge tun können, die das einmal tun, erhalten Sie dieses Tolkien und übergeben Sie dieses Token jedes Mal für uns zu überprüfen und zu akzeptieren oder zu verweigern. Das ist also, was wir in diesem Abschnitt genug von meinem Monolog tun werden. Nächster Halt werden wir unsere Identitäts-Kern schaffen , die Identitäts-Kern in unser Projekt integrieren. 24. User: Hey Leute, willkommen zurück. Unsere erste Sicherheitslinie wird also für die Authentifizierung sein. Und um die Authentifizierungsfunktionen in unserer API zu implementieren, werden wir die Vorteile der integrierten Bibliotheken von neck CT nutzen. Wir werden also ein paar Änderungen an unserem Datenbankkontext, unserem Startup und anderen kleinen Dingen hier und da vornehmen. Beginnen wir also mit unseren Datenbankkontexten, in denen wir es von DB-Kontext zu null ändern müssen als Identitäts-DB-Kontext. Dies ist also nur eine andere Klasse, die es uns ermöglicht, diese Entitätsdienste zu nutzen. Und wenn ich Kontrollpunkte mache, sehen Sie hier, dass Sie die Möglichkeit haben, eine Paket.net Identität zu installieren , wenn R in verschiedenen Work Core. So gehen Sie einfach vor und finden und installieren Sie die neueste Version. Und dann, wenn das fertig ist, müssen wir noch eine Modifikation vornehmen. Tour auf Modellerstellung, wo ich BCE Punkt auf Modellerstellung sagen muss. Ordnung, nach dem Aufruf der gleichen Funktion in der Basisklasse, die unsere neue Basisklasse ist, werde ich nur die Naht-Builder-Objekte entlang übergeben , die wir im aktuellen DB-Kontext verwenden. Nun, das ist Schritt eins erledigt. Wir gehen zur Startdatei und beginnen dann hier Änderungen vorzunehmen. Nun müssen wir unsere Identitätsdienste konfigurieren, um zu wissen , welche Klasse verwendet wird, um die Tabellen abzuleiten, die generiert werden. Bevor ich weitermache, lass mich einfach ein wenig zurückverfolgen und erklären, was passieren wird. Wo wir unsere Anwendung von Anfang an sagen, dass wir nutzen wollen, schulden uns Identitätsdienste. Das ist es, was wir tun werden. Wissen, dass die Identitätsdienste auf einer Datenbankverbindung zu gut basieren, eine Verbindung zu einer Datenbank, die Tabellen hat, um identitätsbezogene Dinge zu erleichtern, verwendet Speicherrollen, Speicheransprüche sind beide Dinge bekannt. Was wir also tun müssen, ist Identitätsdienste zu konfigurieren, um zu wissen , welche Klasse wird informieren, wie die Benutzertabelle aussehen soll. Und wenn es möglicherweise eine andere für Rollen, Inhaber Regeln gibt, werden wir schauen, et cetera. So bereits integriert ist der Benutzer unsere Klasse namens Identity user. Okay, lassen Sie mich einfach weitermachen und einschließen, sagen, es ist legitimes Glas, das bereits eingebaut ist, das verwendet werden kann. Wir betrachten die Details des Identitätsbenutzers. Sie würden sehen, dass es Felder für lokale hat und Sie nicht hierher kommen müssen. Aber wenn Sie zu diesem Punkt wieder kommen wollen, klicken Sie dieses Steuerelement und dann Kontinente oder Steuerelement klicken, bis wir zu diesem Teil kommen. Ordnung? Also haben wir diese Standardfelder, die in der Datenbank kommen, wie Sie von ID, Benutzername, E-Mail und Passwort, Passwort-Hash sehen können , richtig? Dies sind also gemeinsame Felder, die jede Benutzertabelle automatisch mit dem Hashing umgehen muss. Es ist alles, es wird immer alles eingebaut haben. Kein Problem. Es kann jedoch Zeiten geben, in denen wir ein bisschen mehr Entzündungen von unseren Benutzern benötigen , dann nur E-Mail, Passwort und Benutzername potenziell. So ermöglichen sie uns, die Identitätsbenutzerklasse zu erweitern und in andere Felder zu setzen, wie wir das Notwendige gemacht haben. Also habe ich bereits begonnen, dass dieser Prozess in Daten diesen Gras-API-Benutzer erstellt. Sie können fortfahren, mit der rechten Maustaste auf Ihren Ordner neue Klasse API-Benutzer hinzufügen. Und dann im API-Benutzer, was ich getan habe, ist es, vom Identitätsbenutzer zu erben. Denken Sie daran, sobald die Vererbung passiert, haben wir das mit unseren Details früher gemacht. Also tun wir es nein, mit Admins, es ist Benutzer, es wird automatisch alle diese Felder sowie jedes andere Feld erben , das ich sehe, dass ich brauche. Also in diesem Fall brauche ich nur Vorname, Nachname. Sie können möchten Geburtsdaten gleich einem Geburtsland, Vorwahl, anderen Dingen, was auch immer Sie wollen, Sie können dieses Gras einfach erweitern und hinzufügen, aber es wird immer diese Felder standardmäßig haben. Sobald Sie diese Klasse erstellt haben, können Sie zwei Änderungen vornehmen. Bevor wir zurück zum Start gehen, wollte ich diese Klasse als Kontext für den DB-Kontext hinzufügen, meine Winkel Klammern und das DB-Kontextjahr relativ zur API verwendbar sehen , da es standardmäßig gut ist, Identitätsbenutzer zu verwenden. Wenn Sie also diese Anforderung nicht haben, wo Sie mehr Felder benötigen, müssen Sie diesen zusätzlichen Schritt nicht machen. Allerdings wäre es gut, diesen zusätzlichen Schritt zu tun , denn später, wenn Sie es erweitern müssen, können Sie dies tun, ohne viel Kopfschmerzen oder Hektik. Okay, das ist also eine weitere Änderung, die wir genießen können. Db-Kontext. Nein, wir müssen die Identitätsdienste konfigurieren. Also könnte ich das von hier aus machen, aber ich werde irgendwie eine andere Reise mitbringen, nein, wo wir nicht wollen, dass einige manchmal Sie nicht weiter hineinlegen und einlegen wollen und der Anfang der Stapel ist anschwillend. Und dann müssen Sie durch Berge von Zitaten blättern, ein Fan eine Konfiguration. Was wir also tun werden, ist zu unserem Projekt zu gehen, um eine neue Klasse zu erstellen. Wenn du es in einen Ordner legen wolltest, ist das in Ordnung, aber ich lasse es einfach auf dieser Ebene. Also möchte ich es Service-Erweiterungen nennen. Und dann innerhalb von Diensterweiterungen werde ich öffentliche statische Void haben. Und ich werde diese eine Konfiguration Identitäten nennen. Also wird diese Klasse wie sein, gut es ist die Service-Erweiterung, sagen wir, sie werden Konfiguration, die in dieser Startdatei Breite belasten würde, wir können es darauf abstrahieren und es heißt die Methode auseinander ME, na ja, Sie werden sehen das. Also werde ich das als Parameter sagen, dies, und dann diene ich Sammlung und nenne es seine Dienste. Fügen Sie alle fehlenden Referenzen ein. Es gab ein Ziel und dann ist das nicht bereit zu sagen, dass ich das als statische haben muss. Gus, da geht's. In Ordnung. Also innerhalb dieser Methode werde ich ein Verb haben, ich werde es Builder nennen. Also, im Grunde Bauherren, wird es wie eine Verschmelzung von uns geben, die dieselben Dienstleistungen bauen, die wir hier hinzugefügt hätten. Auf die gleiche Weise hätten Sie Services Punkte gesagt und fügen Sie dies und das hinzu. können wir auf dieses Glas abstrahieren. Und jetzt nennen wir es einfach, es ist auf der anderen Seite, so dass Sie zu gegebener Zeit sehen werden. Also werden wir ich bin r Punkt hinzufügen Identitätskern. Und dann übergeben wir die Benutzerklasse. Also wieder verwenden wir die benutzerdefinierte Benutzerklasse API Benutzer, API, Benutzer, richtig? Und dann öffne und schließe die Klammer. Und ich muss nur irgendwelche fehlenden hinzufügen oder ihr Ziel referenzieren. Und dann werde ich mein Lambda Tolkien haben, wo bestimmte Dinge über heilige Zunge anpassen kann , die Benutzerinteraktionen, Ich kann meine Passwort-Richtlinien Schriftsteller einstellen. Ich kann sehen, dass alle Busser die meisten erforderlichen Ziffern oder haben eine Mindestlänge, verwenden Sie eindeutige Zeichen. All diese Dinge sind genau da, trotz der Spaziergänge. Allerdings bin ich mehr daran interessiert, nur sicherzustellen, dass meine Benutzer, so q-dot Benutzer und erfordern eindeutige E-Mail wahr ist. Okay, das ist der Eins-zu-Eins-. Ich bin wirklich daran interessiert, Netzhaut zu erzwingen. Sie können jedoch experimentieren und Sie können die anderen hinzufügen, die Sie für notwendig halten. Also, das ist die erste Zeile und dann werde ich sagen, dass Builder gleich neuer Identität ist. So werden die meisten Dienstleistungen wie spezielle Baumeister, GAS bei Tanten, all das kommen . Also werde ich nur Density Builder sagen und die fehlende Referenz einschließen. Da gehen wir. Also neuer Identitätsgenerator, gib mir den Builder, richtig, also das ist das Objekt, das wir gerade gestartet haben, dieser Benutzertyp. Ordnung, also welcher Typ auch immer angegeben wurde, was da drin war, und dann tippen Sie aus, weil ich Rollen verwenden möchte. So wie es einen integrierten Identitätsbenutzer gibt, gibt es eine integrierte Identitätsrolle. Roland bedeutet, dass Sie admin sind, sind Sie Benutzer, was auch immer es ist, das ist, was die Rolle bedeutet, richtig? Und dann, nachdem ich angegeben habe, dass Zeile da sein sollte, werde ich in i Sammlungsdienste weitergegeben. Objekt in Form von Dienstleistungen. Nach all dem werde ich nicht Builder Dots sagen. Und wir müssen sagen, wo es speichern sollte, sind, welche Bedürfnisse grundlegende Bedürfnisse sind, mit denen die Identitätsdienste für Ehemann zu unterbrechen. Also werde ich den Basiskontext sagen, richtig? Also der DB-Kontext, den wir als unsere Datenbank verwenden, übergeben wir das passende Objekt dafür. Und noch ein Land zu Standard-Token Provider. Ich habe gesagt, wir werden Tolkiens Buch später mit offiziellen Tolkien-Bits verwenden. Ich lege nur das alles da hin. Also nur für den Kontext, wieder einmal, sagt dieses Builder-Objekt wirklich nur, ich baue alles auf, was oben zu tun ist , um zu den Diensten hinzuzufügen. Das ist ziemlich genau das, was wir die ganze Zeit getan haben. Also hier haben wir gesagt, Dienste, Punkte, und wir fügen alle diese Zeilen und Optionen laufende scheinen nicht, was würde eine Kernpolitik und so weiter. Also, jetzt, da wir extrahiert haben, extrahiert alle diese Zeilen. Also diese Methode oder zu diskutieren und diese Methode, die ich beim Start kennen kann, siehe Dienste Punkt auf Authentifizierung , weil das das erste ist, was ich hinzufügen muss, Authentifizierung. Ordnung, es gibt auch Authentifizierung auf dem Kern, aber ich benutze bei der Authentifizierung von ihnen hatte bisher irgendwelche Probleme damit, also werde ich einfach dabei bleiben. Und dann werde ich Dienste sagen, Identität konfigurieren. Na gut, schön und einfach. Also Dienste, die keine Identität konfigurieren, ist im Grunde das, was wir gerade hier getan haben. So können Sie es jederzeit so betrachten, wenn wir etwas zum Start hinzufügen müssen, wenn es nicht der einzige Liner wie dieser ist, können wir vielleicht mit ähnlichem beginnen, um diese Dinge in diese Datei zu extrahieren und die -Buildern, um das Objekt zu senden, wenn es aufgerufen wird. Okay, es ist nicht das Ende der Welt, aber verschiedene Leute sehen gerne andere Dinge. Also einige Leute, ich selbst eingeschlossen, die nicht gerne aufgeblähte sehen, fängt Dateien an. Und zumindest, wenn Sie so viel Code haben, müssen Sie durch den Feind ein Scrollen über die Konfiguration auf fünf Mal und 40 erkennen, war da. Das sind die Dinge können nervig werden, wenn Ihre, Ihre Anwendung wächst. Also zeige ich Ihnen nur einen Weg, wie Sie zu viele Codezeilen aus Ihrem Konfigurationsabschnitt blockieren und in einem sehr engen Raum haben können. Also, jetzt haben wir all das getan, und wir haben all das Setup gemacht. Was wir tun wollen, ist eine Migration nirgendwo mit ADD die Tabellen für die Identität, Sir. Also, was wir tun werden, ist Strich-Migration zu sagen. Wir kennen diesen Teil, sagen, dass hinzugefügte Benutzer Identität hinzugefügt werden. Es sagt es nur so, dass es Identität hinzugefügt hat. Und sobald wir das tun, gelangen wir zu unserer Migrationsdatei. Also, jetzt, wenn Sie durch, sehen Sie die verschiedenen Tabellennamen haben wir die ISBN-Intervalle Tabelle, wir haben Erdnuss-Benutzer Tabelle. Und wenn Sie sehr genau hinsehen, sehen Sie, dass neben allen Standardfeldern, die wir früher gesehen haben, auch die benutzerdefinierten Felder haben, die dem Gas hinzugefügt wurden. In Ordnung, Vorname, Nachname. So wird es zu scheuern und wird immer noch in unsere benutzerdefinierten Felder setzen. In Ordnung, genau den gleichen Weg und die Regeln. Und wenn wir mehr Informationen über Zeilen wollten, hätten wir eine benutzerdefinierte Klasse hinzugefügt, erweitert, und es wäre das gleiche gewesen. Also lasst uns voran gehen und unsere Bedürfnisse übergewichtig aktualisieren. Und mit all dem haben wir unsere Konfiguration für unsere Identitätsdienste abgeschlossen. So können Sie sich einen Klaps auf den Rücken geben. Aber das meiste, was wir getan haben, ist im Hintergrund. Wenn Sie greifbare Beweise dafür haben, dass etwas getan wird, können Sie immer Ihre Datenbank überprüfen und Sie werden die Tabellen sehen , die entsprechend generiert wurden. In Ordnung, aber unser nächster Schritt ist es, die Endpunkte so einzurichten , dass die Benutzer mögliche Entzündungen und als Benutzer unserer API registriert werden und auch für sie sich anmelden können . Und danach werden wir darüber sprechen, wie wir weiterhin überprüfen, ob dieser Benutzer Zugriff haben sollte, nachdem er ihn geliebt hat. 25. Endpoint für die Benutzer-Registrierung: Weil willkommen zurück. Daher werden wir unsere Reise in die Einrichtung unserer Authentifizierung für unsere API fortsetzen. Und wir werden diesen Endpunkt für Benutzer wandern, eine Verteilung und Login und durch Erweiterungsauthentifizierung einrichten. Nein, ich habe schon irgendwie betrogen und weitergemacht und den neuen Controller eingerichtet , damit du pausieren und weitermachen kannst und auf dem Laufenden ist, richtig? Könnte Controller erstellen, aber einen brandneuen Controller, der leer ist und es einen Cons-Controller nennen. Und ich ging schon voran und fing an, meine Injektionen zu machen. Also 2 Jahre vertraut mit Ihnen würde zum ersten Mal sehen. Sie kennen also bereits den Logger und den Mapper, also muss ich diese nicht detailliert erklären. Allerdings sehen Sie möglicherweise zum ersten Mal den Benutzer-Manager und den Anmeldemanager. Dies sind zwei integrierte Bibliotheken mit freundlicher Genehmigung von Identitätskern. Wenn Sie sie eingeben, möchten Sie möglicherweise die fehlende Referenz einschließen, und Sie werden sehen, dass diese oben angezeigt werden. Beachten Sie nun, dass der Kontext für den Benutzer-Manager und für den Anmelde-Manager API-Benutzer unabhängig von der benutzerdefinierten Benutzerklasse ist, die Sie beim Einrichten der Identität verwendet hätten . Wenn Sie keine verwendet haben, verwenden Sie weiterhin Identitätsverwendungen. Egal welche Klasse es ist, dass Sie als Kontext in Ihrer Konfiguration sitzen, und diese Konfigurationsdatei wäre hier. Was auch immer Sie dort sitzen, Sie verwenden weiterhin diese Kehle Anwendung. Ordnung? So Benutzer-Manager gibt uns Zugriff auf eine Reihe, unsere Suite von Funktionen, die es uns ermöglicht, verwalten, anmelden, abrufen Benutzerentzündungen, Ich würde Benutzer. Also wollen wir keinen benutzerdefinierten Code schreiben müssen, um hinzuzufügen, oder ich muss keine Einheit von Arbeitsfunktionen für den Benutzer einfügen, Benutzer-Tabelleninteraktion sind relativ Interaktion. All diese Dinge kommen aus der Box mit der Verwendung von Geld, melden Sie sich einfach in Manager und Sie haben eine andere namens Rules Manager. Wenn wir es benutzen müssen, dann werden wir es. Aber ich bin nur der Teenager oder die meisten dieser Dinge sind in diesen Diensten verkapselt , die leicht in unsere Anwendung injiziert werden können. Also, jetzt, da wir unseren Controller eingerichtet und alles, was wir brauchen, injiziert haben müssen wir anfangen zu schreiben unsere Endpunkte sind zuerst, Endpunkt wird für die Registrierung sein. Es wird also so etwas aussehen. Public Async, Task, Aktion und Ergebnis. Und der Name ist Register. Für die Registrierung, da wir potenziell sensible Daten benötigen, werden möglicherweise nicht Benutzername, Passwort usw. erforderlich sein. Ich möchte das nicht über die Pipe im Parameter senden. Also haben wir das im Übersichtsvideo besprochen, wo ich dich darin sehen werde. Die Verwendung des Parameters ist ziemlich in Ordnung, wenn es so etwas ist, nur eine ID und nichts zu dämpfen, oder? Aber wenn Sie den Benutzer auffordern, sich zu registrieren und sensible Informationen zu übermitteln, möchten Sie nicht nur Zeichenfolgen-E-Mails, Zeichenfolgen-Passwort usw. sehen . Denn dann würde alles tatsächlich im Klartext über den Endpunkt kommen. Also, was wir tun wollen, ist, diesen einen Beitrag zu machen. Also haben wir mit dem GET Verb gearbeitet. Wir haben nicht viel Arbeit oder Arbeit mit der Post gemacht. Also ein Beitrag, genau wie wenn Sie ein Formular im Internet einreichen, wenn Sie auf Absenden klicken, um zu gehen, lassen Sie uns sagen, registrieren Sie sich für Facebook oder registrieren Sie sich für etwas online. Wenn Sie oben in der URL nachsehen, werden keine der Informationen aufgeführt. Sie wissen nur, dass Ihre Informationen eine Seite verlassen und angeblich irgendwo hingegangen sind und Delta-pH-Wert es darstellen könnte, das ist, was die Post-Operation ist. Okay, also ist die Nachricht verkapselt und vor neugierigen Blicken verborgen. Wenn wir das tun, wird es über vier Implantatstandorte geschickt, genau wie das, was wir hier gesehen haben. Es gibt also keinen Grund, es zu binden. Also natürlich, wenn Indien mit sensiblen Informationen, wollen Sie keine Gitarre benutzen, alles, was nicht die Entzündung, die über gesendet wird, gebunden wird. Mit diesem Betrachten wird der Parameter, den wir hier verwenden werden, Kosten für eins sein. Also werde ich eine Anmerkung einfügen, um zu sagen, die Informationen vom Körper zu bekommen. Der Absender muss es also im Körper senden im Gegensatz zu der URL und dem Text der Anfrage. Und dann können wir einen Datentyp angeben, der die Informationen aufnehmen soll. Also werde ich sagen, dass der Benutzer detaillierte Souverän noch ein Benutzerdetail erstellt, aber ich werde nur Benutzerdetails sagen. Ordnung. Also lassen Sie uns voran gehen und erstellt diesen Benutzer dto. Und dann würde ich erklären, warum es so nicht funktionieren kann. Also in Modellen klicken wir auf Klasse hinzufügen. Wir rufen Benutzer brauchen TO an. Und dann müssen Benutzerdetails mindestens die gleichen Felder haben , die wir brauchen, um zu unserem EPA-Benutzer zurückzukehren. Und zweitens, wir brauchen den Benutzer zur Verfügung zu stellen. So entwerfe ich meine Benutzerdaten. Sie können pausieren, replizieren, aber ich werde Sie trotzdem durch es führen, also FirstName, Nachname bei der Registrierung. Ja, die Möglichkeit, die beiden Felder zu übergeben. Beachten Sie, dass ich die Option sagte, weil ich weder sitze wie erforderlich. Wir haben die Telefonnummer. Also, wenn Sie gegen Industrie oder Telefonnummer wollen, wenn Bereich, nur sagen für die API, noch einmal, nicht erforderlich. Allerdings ist E-Mail definitiv erforderlich und Passwort ist definitiv erforderlich. Und dann für E-Mail wird dies auch als Benutzername verwenden. Also, wenn wir dieses Detail haben, wie üblich, müssen wir sicherstellen, dass unser Mapper über das dto weiß. Also Mapper-Initialisierer, ich werde nur voran gehen und sehen, dass APA-Benutzer. Und Benutzer dto muss über einander wissen und umgekehrt Karte, okay? Und so werden wir das tun. Der Zweck des von Körper hier ist zu sehen, dass, wenn ich diesen Endpunkt anfordere, Sie im Körper der Anfrage suchen, nicht in der URL suchen. Also eins, ich benötige nichts in der URL. Und zwei, wenn der Benutzer etwas in der URL übergibt, ist es mir egal. Ich suche keine Entzündung in der URL. Der Text der Anfrage sollte jedoch Informationen mit Feldern enthalten, die für den Benutzer dto sehr wichtig sind. Also senden sie mehr Informationen, als ich brauche. Es wird ignoriert. Aber zumindest müssen sie diese an mich schicken, damit ich sie verarbeiten kann. Also, das ist so alles Art von Bindungen, wenn wir darüber reden, die Anfragen zu bereinigen und Entscheidungen zu treffen, basierend auf dem, was über die Pfeife kommt. Okay, also gehen wir zurück zu unserem Kegel Controller. Und dann, was wir an dieser Stelle tun wollen, und wir können eine Reihe von Dingen tun. Also werde ich zuerst, Trend geliebt NC-Registrierung Versuch kam in für und ich kopiert auf Piazza, das ist irgendwie krempelt mich. Aber sagen wir, Registrierungsversuch für Benutzer dto, dot email. Also, was auch immer E-Mail über den Benutzer dto kam, das ist es, was ich da mache. Also werde ich auch überprüfen, ob der gültige Zustand, wenn es kein gültiger Zustand ist. So kann ich sehen, ob Modelle. Das ist alles, was wir überprüfen Formulare, richtig? Wenn Sie das tun, wenn Sie MVC und schwindlig gemacht haben oder einfach API lernen, ist es ziemlich der gleiche Prozess. Wir wollen sehen, ob der Zustand des Modells gültig ist, oder? Also an dieser Stelle würde ich wahrscheinlich sagen, wenn es nicht gültig ist, dann ging ich, um eine schlechte Anfrage zurückzugeben. Das bedeutet, dass Sie eine Anfrage zur Registrierung gesendet haben, aber Ihr Validierungsfeld, also haben Sie die E-Mail, die sie nicht enthalten haben, nicht hinzugefügt oder Sie haben nicht die Standards erfüllt , die ich für Sie in Bezug auf die Daten, die Sie hätten senden sollen, oder? Und dann kann ich den Modellzustand zurückgeben, so dass er den Absender irgendwie informiert , was schief gelaufen ist. Okay, also wenn der Modellstatus nicht gültig ist, dann tun wir das. Andernfalls können wir fortfahren, um es zu versuchen. Probieren Sie einfach oben, oben, fangen Sie diese Ausnahme. Lassen Sie mich einfach mit der Ausnahme umgehen. Teile davon, wo ich Logpfeil sehen werde, ging etwas schief in diesem Registerabschnitt. Und dann in früheren Zeiten, was haben wir getan? Wir kehrten mit einem Statuscode 500 zurück. Eine andere Art von Rückkehr, die Sie tun können, wenn ein Problem aufgetreten ist, ist buchstäblich Rückgabe-Problem. Und du hast die gleiche Art von Nachricht eingelegt. Also konnte ich etwas schief gelaufen. In Ordnung. Und dann sagen Sie ihm, dass es eine Statusbewertung von 500 hat. Also zeige ich Ihnen nur, dass es verschiedene Möglichkeiten gibt, wissen Sie, wenn Sie andere Ressourcen betrachten, können Sie sehen, wie ich es auf diese Weise mache und jemand anderes unser Problem zurückgibt, jemand gibt den Statuscode manuell zurück. Es gibt verschiedene Möglichkeiten, dies zu tun, okay? Aber dann für diejenigen, die eingebaut sind und sie es bereits eine Methode gegeben habe ich generell ermutige ich Sie, diese einfach zu verwenden. Also haben wir uns um die schlechten Situationen gekümmert. Ich möchte nur sagen, wenn es nicht stimmt, tun Sie das. Nein, was mache ich, wenn es richtig ist? Eins kann ich sagen, var Benutzer ist gleich Mapper dot mop in API-Benutzer. Und dann mappe ich Benutzerdetails zu. Also dann wird es sagen, okay, viel alle Felder, die wir bereits kennen. Wir wissen, wie der Mapper mit einem Null funktioniert. Und dann weiß, dass ich den Benutzer habe. Ich kann sagen, var Ergebnisse sind gleich. Und ich ging zu unserem Gewicht, unserem Aufruf an meinen User Manager Punkte. Und dann hier ist, hier ist eine Reihe von Funktionen. Wie ich schon sagte, wir können eine Reihe von Dingen tun. Ich kann sagen, eine Szene zu schaffen. So erstellt der Benutzer-Manager eine Senke, und dann werde ich einfach die Benutzerobjekte übergeben. In Ordnung, also mach weiter und erstelle diesen Benutzer. Es wird es automatisch zum Passwort bringen, hash es, speichern, alles tun, was es tun muss. Wir mussten keine komplexe Logik schreiben, um das wirklich zu erleichtern, oder? Aber manchmal scheitern die Dinge. Also werde ich sagen, wenn nicht Ergebnis, nicht gelungen, richtig? So wird es Ihnen sagen, ob es gelungen ist nicht, dann werde ich auch eine schlechte Anfrage zurückgeben. Also werde ich sagen, dass etwas schief gelaufen ist. Diesmal. Es sind nicht die Modelle, das Ding. Es ist wahrscheinlich nur ein Pfeil. Die Sache ist also, dass das Ergebnisobjekt Ihnen tatsächlich die Pfeile gibt. Wenn Sie sie wirklich alle auflisten müssen, können Sie sie wahrscheinlich in eine Schleife setzen, sie auflisten, in eine Zeichenfolge einfügen und sie zurückgeben, wenn Sie möchten, wenn Sie dem Benutzer so viel Details geben möchten. Aber manchmal können diese Details zu sensibel sein, also müssen Sie vorsichtig sein, welche Informationen Sie Bach-Tool senden, die anrufenden Clients, richtig? Also an diesem Punkt werde ich nur Batterieanfragen speichern. Es war ein 400. Und es ist, weil der Benutzer oder die Verteilung auf Feld, das ist alles, was Sie wissen müssen. Versuchen Sie es später noch einmal, denn das hätte meine Schuld sein können. Andernfalls, wenn Sie so, als etwas Ernstes hätte ihnen eine 500s und alle gegeben. Es ist auf unserer Seite, dass das Problem ist, und wenn es ist, dass Sie falsche Daten senden, dann sage ich Ihnen, was falsch ist, weil ein Motto Staaten wird auflisten, dass schreit. Okay, und das ist so ziemlich das für die Kasse. Jetzt, da wir das Register gemacht haben, denke ich, wir könnten genauso gut den Login machen weil obwohl keine echte Möglichkeit, unsere Registerstatistik Login zu testen. Also werde ich diesen Code direkt unten kopieren und einfügen. Aber was wir tun müssen, ist den Aktionsnamen zu ändern. Dies ist also eine Login-Aktion. Wir verwenden den gleichen Benutzer müssen von der gleichen URL genommen wurden, aus dem gleichen Körper, sorry, ignorieren alles, was in der URL kommt. Und dann, was wir tun werden, ist Anmeldeversuch für diesen Benutzer zu sagen. Wenn es ungültig ist, erneut, Validierungseinschränkungen, E-Mail, Kennwort. Nein. Eine Sache, die wir vielleicht in Betracht ziehen möchten, ist, brauchen wir das gleiche dto oder sollten wir das CMB TO für Login und Registrierung verwenden? Gleiches Prinzip mit den anderen Details, richtig? Denn für einen Login brauche ich nicht Ihren Vornamen, Nachname, Telefonnummer. Ich möchte nur Ihre E-Mail und Ihr Passwort. Also, was ich hier tun werde, ist schnell einfach Klasse zu sagen, Login ETO. Und ich ging, um diese beiden Felder zu nehmen, legte nur den Login ein, weil es absolut notwendig ist Far Login-Zeug. Aber dann lasse ich das von Logins erben. Die Felder werden also unabhängig voneinander verteilt. Okay, also sollte ich es nicht als Login-Benutzer nennen. Da gehen wir. Lassen Sie meinen Mapper wissen, dass es eine Welle ist und der Mapper, Nein, ich muss den Mapper wirklich nicht wissen lassen weil die Operation etwas anders sein wird. Also werde ich Benutzerdetails im Mapper hinterlassen, aber ich werde diesen nicht setzen und ich werde erklären, warum. So loggen Sie sich Benutzerdetails ein. Das ist ein weiterer Teil der Sicherheit, wenn wir genau das bereinigen, was wir wollen. Denn wenn der Benutzer möglicherweise böswillige, sorry, der Client schreien nicht auf den Benutzer, der die Anfrage sendet. Der Client, der die Anfragen sendet, könnte bösartige Entzündungen im Körper der Anfrage enthalten haben . Indem ich diesen Teil hier mache, sage ich, dass ich nur nach Feldern suche, die dem entsprechen, was ich alle in diesem Dto ausgerichtet habe, sagen Sie dies UND mehr Informationen, als ich brauche. Es wird ungeachtet ignoriert werden. Das ist also ein weiterer Teil der Sicherheitsüberlegungen beim Erstellen von APIs. So bekommen wir den Login-Benutzer dto. Und dann für den Login, okay, wir validieren es. Okay, gut. Also überprüfen wir die Modelle Zustand und dann, was ich versuchen werde. Also nichts anderes zu ändern hier außer vielleicht die Log-Nachrichten, um sicherzustellen , dass wir genau darstellen, wo beobachtet Twin falsch. Okay, also unter dem Trie, was wir tun werden, muss ich keine Mapping machen, also lass mich einfach entfernen, was versucht wird und von vorne anfangen. Ich werde sagen, var Ergebnis ist gleich, und hier verwenden wir den Anmelde-Manager Punkt-Passwörter, die eine Senke signieren. So sehen Sie das und Sie können sogar einen Scheck machen. Sie können überprüfen, ob das Passwort würde die Bursts Australopithecine und natürlich, dass sagen, hielt die Situation an dieser Stelle. Weil wir eigentlich unterschreiben wollen, oder? So Anmelden sehen dauert zwei Überladungen. Wir können das gesamte Benutzerobjekt übergeben. Ich habe gerade alle Mapping und das Passwort genommen. Oder wir können wählen, einfach den Benutzernamen und das Passwort einzugeben, das ist das, das ich verwenden werde. Du siehst also, dass ich beide Optionen bin. Also, wenn wir sie behalten upping wird das gesamte Benutzerobjekt sowie das Passwort übergeben. In diesem Fall ist das jedoch Wiki. Also werde ich nur sagen Benutzer dto dot, und wir verwenden die E-Mail-Adresse als Benutzernamen und Benutzer dto dot Passwort. Und dann ist für Hilfe. Also lasst uns lesen, was Persistenz ist. Es sagt Flag, das angibt, ob das Signatur-Cookie sollte nach dem Schließen des Browsers bestehen bleiben. Nein. Ich das ist eine API. Ich weiß nicht, welche Art von Anwendung anruft. Die API könnte Postbote sein. Es könnte der Browser sein, es könnte eine mobile APP sein. Ich muss nichts anhalten, also werde ich falsch sagen. Okay, und dann der letzte, Lacan-Fehler, möchte ich niemanden sperren, wenn sie sich nicht anmelden, wäre ein zu großer Verwaltungsaufwand. Wieder einmal ist Kontext alles, aber das ist, was unser Anmeldecode Licht Schleifen, noch das Ergebnis wird ein ähnliches Objekt wie der Registerversuch sein. So können wir einfach sagen, wenn die Ergebnisse leider sind, wenn nicht, Ergebnis nicht erfolgreich oder sorry, das ist asynchron. Also, wenn wir nicht auf die Wartezeit setzen, dann das Ergebnis, dass wir diese vom Typ Aufgaben bekommen werden, nicht von dem Typ, den wir erwarten. Also lass mich sicherstellen, dass ich Dewitt anziehe. Und wenn ich das tue, wirst du sehen, dass der Intellisense mir das gibt, was ich erwarten würde. Also, wenn es nicht erfolgreich ist, lassen Sie mich einfach überprüfen, was wir getan haben, als es hier nicht erfolgreich war. Dann sagen wir, wir sagen schlechte Bitte oben. Aber wenn es nicht erfolgreich ist, Login-Versuch, es ist nicht unbedingt eine schlechte Antwort war ich würde nur sagen, sind schlechte Anfrage oder das Hotel würde sagen, ist nicht autorisiert. Richtig. Was ein für 01 ist, wenn ich mich nicht irre, richtig, unautorisiert. Und ich kann wahrscheinlich einfach die Benutzerdetails zurückgeben, um zu sehen, dass dies das ist, was sie zu verwenden versucht haben. Es ist nicht autorisiert, es tut mir leid. Ordnung. Andernfalls, wenn es dieses Feuer bekommt, bedeutet das, dass alles in Ordnung ist. Also kehren wir einfach zurück. Ich könnte zurückkehren. Ok. Ich habe akzeptiert in der Vergangenheit verwendet, richtig. Also alles mit einem 200 in der 200-Reihe würde als okay angesehen werden. Antwort. Also OK. Als 200 Sie erstellt haben, was ich denke Werkzeug für ja, Ich habe akzeptiert, was gedacht wird, um et cetera. Sie müssen sich nicht darum kümmern, diese Codes unbedingt auswendig zu lernen. Weiß, dass Sie in bestimmten Situationen diese verwenden möchten oder nicht behandelt werden. Ordnung? So wird unsere Login-Funktion aussehen. Und okay, ich habe eine Änderung vorgenommen. Das ist keine Kunst. Also lassen Sie uns alle, das Register sieht, dass nicht alle Zitate Pfade, Rückkehr von o. Deshalb tut es mir so leid, dass ich diesen einen Knoten verpasst habe. Also denken Sie daran, dass Sie immer einen Fan andere Renditen haben. die gleiche Weise, wie wir gesagt haben, dass Sie in Windows bleiben, das, was wird dann akzeptiert zurückkehren, danach tun Sie das hier. Also habe ich wieder oben akzeptiert, auch hier oben, richtig? Ich habe Ihren Registrierungsversuch akzeptiert und dann ist das erledigt. Nein. Bevor wir mit dem Testen übergehen, wollte ich Ihnen etwas sehr Wichtiges zur Aufmerksamkeit bringen und das sind die routinemäßigen Überlegungen für diesen Endpunkt, wo festgestellt wurde, dass die Regel API-Schrägstrich Controller sein würde, in diesem Fall API-Schrägkegel. In früheren Zeiten, die der Hotel-Controller sagen, hätten wir festgestellt, dass wir nicht zwei identische Get-Operationen haben können. Der Name der Aktion ist irrelevant, aber ich kann nicht zwei Operationen haben. Wie identisch Verben, kann das Verb das gleiche sein, aber dann muss es eine Nuance zu einer Implementierung des Verbs von der anderen sein. In dieser Situation habe ich beide als Post. Beide sind Post. Wieder einmal spielt der Name hier keine Rolle, was sie beide Beiträge sind, was bedeutet, dass, wenn ich versuche, eine Post-Operation zu tun , nicht wissen wird, welche man verwenden soll. Sie sind beide irgendwie identisch in Bezug auf das, was sie erwarten. Der einzige Weg, den ich wirklich zwischen diesen beiden unterscheiden kann , ist, ihnen ihre eigenen Wurzeln zu geben, oder? Also kann ich sagen, die Wurzel für Register ist Register. Ordnung? Und dann ist der Weg für einen Login Login. So dass wir an dieser Stelle die einzige Möglichkeit, Register zu treffen, ist, Server Slash api Schrägstrich Register zu sagen. Als Post-Anfrage. Obwohl wir Login tun, ist zu sehen, was Schrägstrich api Schrägstrich o Doppelpunkt Schrägstrich Login. Also gebe ich an, dass eine Route für diesen Endpunkt Login ist und dieser ist ein Register. Jetzt können wir identische Verben haben, aber weil es verschiedene Orte gibt, werden sie sich nicht gegenseitig stören. Okay, das war also, das versucht, einen Benutzer schnell zu registrieren. Also, was überprüfen wir alt, was Swagger für uns generiert hat hängt hier nichts an seinen Aufruf nach ID an und ich brauche dort. Das sind sie. Kein Posten, nicht bekommen, richtig. Und wenn ich expandiere, werden sie mir zeigen, was das Objekt braucht. Das Aussehen wie unser Chan sah aus, wenn er über die Pfeife kommt. In Ordnung, nur für die gleichen für die Anmeldung. Du siehst also den Unterschied. Denken Sie daran, dass wir zwei verschiedene Details haben. Dieser hat ein E-Mail-Passwort und die benutzerdefinierten Felder. Das hier. Es dauert E-Mail und Passwort. Also, das habe ich gesagt, dass, wenn Sie in einer Situation, in der Sie nicht alle Informationen benötigen, die Sie erstellen, ich nachgeben muss, um genau das zu begrenzen, was Sie in dieser Situation brauchen. Okay, also versuchen wir es mit dem Registrierungsversuch. Also werde ich diese E-Mail hinterlassen. Ich werde in ein Buswort setzen, das Zeichen und eine Zahl hat. Und ich ging, um alles leer zu lassen, weil alles, was ich wirklich brauchen unsere E-Mail und Passwort, jedoch, indem sie diese so lassen, wie sie sind, werden sie buchstäblich gehen über als String, String und Telefonnummer. Also lassen Sie uns sehen, was passiert, wenn wir auf Ausführen klicken. Es ist, dieser Versuch gibt mir einen 500 Fehler. Dies wäre also eine dieser Ausnahmen gewesen, die darauf gefangen wurden, sagen, dass ein bestimmter Dienst für den Anmeldemonitor nicht aufgelöst werden kann. Ordnung? Okay, also gibt der Anmeldemanager das Problem auf und ich möchte eingehen und Fehlerbehebung. Aber wenn ich darüber nachdenke, brauche ich wirklich nicht den Anmelde-Manager für diese API. Und ich werde es erklären. Also, als ich San in Manager und injizierte es und all diese Dinge, war es, weil das wie eine Knie-Ruckel-Reaktion ist. Wann immer wir eine Authentifizierung zu tun haben, wollen wir alle Bibliotheken, die bei der Authentifizierung helfen können. Ordnung? Im Fall einer Webanwendung, bei der jemand einen Anmeldeversuche über ein Formular einreicht, klicken Sie auf Absenden und dann werden Sie mitgeteilt, dass sie durch eine Nachricht oder einen Hinweis, der Hallo Benutzername sagt, zugelassen sind . Das ist wirklich der San in Manager, der etwas wie eine Sitzung oder ein Cookie erstellt , basierend auf der Konfigurationseinrichtung für die Verwaltung dieser Benutzersitzung. In Bezug auf eine API sind wir nicht bereit, eine Sitzung für neue Benutzer zu verwalten. Ja, dein Register, was? Wir wissen nicht, wann Sie die API ganze Lunge aufrufen werden. Und es ist nicht so, als würden Sie ein Verweilen in der API für 1R wenige sein , weil das eBay Ihre Anfrage annehmen wird, geben Sie Ihre Antwort auf beendet sein. Deshalb benutzen wir Tolkiens. Also will ich nicht auch, wenn ich mich selbst abgeschlagen habe und über Tolkiens diskutiert habe. Aber wegen der Tolkiens brauchen wir den Anmeldemanager wirklich nicht im traditionellen Sinne dessen, was der Sign In-Manager tut. Also werde ich alle Verweise auf den Sign In-Manager wirklich entfernen. Und ich werde den Login-Endpunkt für Nein auskommentieren. Also das ist Kontrolle, Casey, nur ein Kommentar. Okay, also brauche ich das nicht alles, nur damit wir dorthin kommen. Aber ich muss mich nur entschuldigen und manchmal passieren diese Dinge. Aber hey, wir werden nur den Code auskommentieren und dann werden wir ihn später noch einmal besuchen. Wissen, wie es sich auf einige der Fehlermeldungen bezieht, die wir ein Bock senden möchten. Was ich hier tun werde, ist irgendwie, dass ich die ganze Ergebnispfeilseite hatte. Sie würden sehen, dass Sie einen Weg finden könnten, um die Ergebnispfeile in ein Paket zu setzen und jemanden zu senden, um für jeden Fehler in Ergebnissen, Fehlern zu sagen. Ich habe nicht gesagt, dass es keine sensiblen Informationen sein könnte. Also akzeptiere ich dieses Risiko. Aber ich werde sagen, Modellzustände Punkt und ich kann sagen, fügen Sie modalen Pfeil , der mich dann nach unserem Schlüssel fragen wird. Ich muss den Schlüssel nicht einlegen. Und dann werde ich Fehler sehen. Punkte, es tut mir leid, Fehler ist die Nachricht, die vom Ergebnisversuch Code zurückkommt. Also hier ist, was ich tue. Ich habe den Code als Schlüssel gesetzt, oder? Und so bedeutet der Schlüssel dort entweder, wie der Name des Pfeils ist. Und dann wäre die Kernbeschreibung genau da. Richtig? Dann können wir sehen, dass der Benutzerversuch fehlgeschlagen ist, oder sie werden den Modellstatus setzen, weil es bereits offensichtlich ist, dass es fehlgeschlagen ist. So werden wir mit den Fehlermeldungen für unsere Registrierung bei ihm vorgehen. Also lassen Sie uns das noch einmal versuchen. In Ordnung, also trage Wildleder Swagger mit all dem Login und Punkten. Aber wir werden einfach versuchen mein kompliziertes Passwort noch einmal einzugeben und dann ausgeführt. Okay, und das sieht ein bisschen besser aus. Also, zuerst gab es keine Beschwerden über Benutzermanager oder einen IT-Dienst, der nicht registriert wurde. Das sind 12. Sehen Sie hier jetzt, wir bekommen wieder eine 400 und wir bekommen wieder einige Details, da die Uhr falsch ist. Also in gültiger Benutzername, Benutzername, leer, leer ist ungültig und kann nur Buchstaben oder Ziffern enthalten. Okay, das liegt daran, dass wir eine Kartierung gemacht haben, aber wir bitten nur um E-Mail. Der tatsächliche Identitätsbenutzer muss auch einen Benutzernamen Wert haben. Also, was ich hier tun muss, ist anzugeben der Benutzername der Benutzerpunkte gleich der E-Mail-Adresse ist, so dass die E-Mail-Adresse ein Pflichtfeld ist. Benutzername ist ein Pflichtfeld und ein Kennwort. Sie sind alle Pflichtfelder des Identitätsbenutzers. Also wollte ich E-Mail und Passwort zur Verfügung stellen. Ich gehe nur weiter und gebe den Benutzernamen an. Was ist auch das gleiche wie die E-Mail-Adresse? In Ordnung, also lasst uns das noch einmal versuchen. Ordnung, und wenn ich das tue, und ich in den gleichen Details Benutzer auf das Beispiel und Passwort eins, schauen Sie heraus, während wir bekommen, erhalten wir eine 200 Antwort. In Ordnung. Und war uns einfach umwälzend. Alles ist gut zu gehen. So ist es nicht gescheitert. Es gibt keinen Validierungsfehler oder so etwas. Ich merke, dass es auf dokumentiert für das Werkzeug zu Glukose sagt, wir haben den Controller weder lassen noch Swagger wissen lassen, dass Werkzeug ein potenzieller Rückgabetyp ist. Denken Sie also daran, dass wir das mit den anderen Controllern gemacht haben , in denen wir alle möglichen Rückgabetypen aufgelistet haben. So können Sie voran gehen und replizieren, dass in Großbritannien Heimcontroller, was ausländische immer Singapur, eine Verteilung auf Prozess. Weißt du, du könntest enttäuscht sein. Sie können den Login noch nicht testen, aber es ist wirklich kein Login. Es ist mehr, es wird mehr wie ein oft d, eine Berechtigung zu sehen, okay, Sie über Tolkien und es ist gültig, ja, Sie können auf die Ressource zugreifen, die Sie wollen. Denn wieder einmal ist ein Login wirklich, um eine Sitzung zu erstellen und jemandem Zugriff für einen bestimmten Zeitraum zu ermöglichen. Während, was ich mit einer API gemacht habe, wissen wir nicht, für welchen Zeitraum Sie möglicherweise Zugriff benötigen. Wir brauchen es nicht für einen längeren Zeitraum zu erleichtern, als es dauert , Ihre Anfrage zu bearbeiten und Ihnen Ihre Antwort zu geben. Also wollen wir nur wissen, dass Sie inakzeptabel sind, Accessor, validieren Sie das, geben Sie, was Sie wollen und dann sind wir mit Ihnen fertig. Deshalb werden wir die Toolkits machen. Also, wenn wir dort ankommen, werden wir voran gehen und hosho mehr Flur beschränken Zugang. 26. Wichtige Endpoint – User Endpoint: Hey Jungs, ein schnelles Addendum zu dem, was in der vorherigen Aktivität getan wurde, saß über eine Verteilung Endpunkte und alles, was es funktionierte. Als ich jedoch erkannte, dass mein Benutzer kein Passwort hatte , und das liegt daran, dass ich diese Pipe nicht angelegt habe. Wenn Sie sich also die Benutzerfunktion „erstellt“ ansehen, hat sie zwei Überladungen. Eine, wo es nur den Benutzer erstellt, und eine andere, wo es Sie nach dem Benutzer und dem Pastor fragt, mit ihnen zu gehen. Also bin ich mir nicht ganz sicher, warum sie das Bedürfnis haben, zwei zu treffen, denn für mich muss ein Benutzer einen Parser-Bots haben, ich denke, für verschiedene Situationen muss er möglicherweise etwas speichern oder nicht die anderen. So Benutzerkomma und dann vom Benutzer brauchen Teal, nehmen wir das Passwort, so dass wir sicherstellen können, dass, wenn der Benutzer-Manager diesen Benutzer erstellt, dieses Passwort wird auch gehashed und in ihren Aufzeichnungen gespeichert. 27. Benutzerrollen hinzufügen: Hey Leute, willkommen zurück. Also ein sehr wichtiger Teil des Benutzers autorisiert Sean ist zu wissen, welche Rolle dieser Benutzer in einem Ponton ist. Nein, wir haben nichts mit Rollen verbunden gemacht, waren mehr damit beschäftigt, die Benutzerinformationen zu erhalten, validieren und ob wir den Benutzer nicht erstellen. Nun, wenn es um Rollen geht, die Rollen, die im System existieren dürfen, bevor das System verwendet wird. die gleiche Weise, wie wir diese Seeding-Operationen für Hotels auf Länder davon eingerichtet hätten , wäre weniger wichtig als Rollen so weiter, um sicherzustellen, dass die ländliche Seite dort von Anfang an, so dass, wenn die Benutzer starten registrieren, sind die Regeln bereits da. Also, was wir tun wollen, ist, sie zu sehen, aber stattdessen werde ich sie so aussäen, wie wir das Land und das Hotel sehen. Ich werde Ihnen einen Weg zeigen, dass wir diese Operation von o dB-Kontexten abstrahieren und die DB-Kontexte so leicht wie möglich halten können , ähnlich wie Hollywood hat Ihnen gezeigt, dass Sie dies mit unseren Diensten tun, die wir installieren. Also, was ich tun werde, ist, einen neuen Ordner einzurichten, haben Konfigurationen sind bei m, nur gehen Sie voran und fügen Sie einen anderen Ordner darin hinzu und ich werde es nennen, es ist Entitäten. Also Konfigurationen für alles, was seine Entität verwandt ist. Und dann werde ich eine Klasse hinzufügen. Und dann wollte ich diese Klassenrollenkonfiguration aufrufen. Gehen Sie weiter und fügen Sie es hinzu. Und dann diese Regelkonfigurationsklassen, die von der I-Entitätstypkonfiguration erben. Und es wird vom Typ sein, dann DIE Rolle. In Ordnung, lassen Sie uns weitermachen und alle fehlenden Referenzen einschließen. Es trifft also nicht auf die ländliche Konfiguration oder dass es mit diesem Konfigurationstyp verknüpft werden sollte . Und natürlich müssen wir weitermachen und implementieren, was auch immer dies sieht, implementiert werden muss, was unsere Konfigurationsfunktion ist. Ordnung, also gibt es auch, wenn Sie in mögliche oder den Naht-Builder gehen müssen , der beim Modellieren verwendet wird. Also dann können wir tatsächlich den Code replizieren, den wir haben, wo wir sagen, dass Builder dot Daten hat. Und dann anstelle von Builder Punkt Daten hat, können wir voran gehen und neue Rollen erstellen, neuronale Objekte. Lassen Sie mich einfach alle diese Anführungszeichen auswählen. Na gut, so neue Identitätsregel. Und wir werden nur dieses Objekt initialisieren. Ich gebe ihm keine ID, erschreckte Zonen-ID, den Namen, der diesen einen Benutzer genannt wird. Und wir müssen seinen unnormalisierten Namen geben, der wirklich nur kapitalisierte Version davon ist. Aus dem Namen wirklich. Und dann. Ich werde es auch Admin-Administrator geben, das ist gebaut Administrator. Und dann ist das normalisierte alle CHEOPS, Version des Ministeriums, Tür, fügen Sie Ministerium hinzu. Es ist immer mesure die Spins Rechte ausgegeben nettes Debugging, aber Rechtschreibungen, also lassen Sie mich nicht führen. In Ordnung. Also nicht, dass wir diese Konfigurationsmethode und so viele Zeilen haben, wie Sie denken, dass Sie benötigen, können Sie voran gehen und sie konfigurieren. Aber die wichtigsten Teile von all ist , wenn wir bereit sind, es in das System zu setzen, müssen wir nur sagen Builder, Punkte, gelten. Entschuldigung, Bauverzeichnis Punkt, Fliegenkonfiguration. Und dann werde ich nur eine neue Rollenkonfiguration sagen. Und dann schließen Sie die fehlende Refrence Store wusste Lee erstellt. Und da gehen wir. Also siehst du, dass mir das sehr viel aussieht, das sieht viel sauberer aus, als das alles zu haben. Denken Sie daran, dass der Grund, warum wir es von oben hier über der Liste verschoben wurde, war, dass es so riesig eine Funktion war, weil ein diese Zeilen folgen. Wenn Sie möchten, können Sie pausieren, richtig wissen und versuchen, andere Konfigurationsdateien für Land und Hotel zu erstellen. Okay, ich hoffe, du hast es wirklich versucht, weil ich es getan habe. In Ordnung. Also werde ich Sie nicht bitten, etwas zu tun. Ich werde es nicht tun. Also nur für den Fall, dass Sie eine Anleitung brauchen. Wir gingen voran und erstellten Konfigurationsdateien pro Typ. Okay, also haben wir Holton, ich bin vom Land und wo auch immer wir erschaffen haben, zusammengerollt. Ich habe Land gemacht, die gleiche Benennung konnte im Grunde Code kopieren und einfügen und nimmt wesentliche Teile kontra Konfiguration an, die ich Entitätstyp Konfiguration relativ zum Land, dem Kontext. Und dann der gleiche Code, der da war, um die Länder zu erstellen, die ich gerade ausgeschnitten und eingefügt habe. Okay, die einzige Sache ist, dass wir im vorherigen Builder Dot in t hatten, so etwas und ich habe diesen Entitätsteil entfernt. Also sagt er, bauen ihre Punkte hat Daten, so dass Sie voran gehen und diese sowohl im Land als auch im Hotel replizieren können. Und wenn du dein eigenes Ding über irgendein anderes machst und nein, bist du auf Model-Building. Sieht viel sauberer aus. Ordnung. Und ich glaube, ich setze das einfach ein. Ich habe nicht wirklich nicht viel bekommen, als wo in Bezug auf die Bestellung Boote aus uns legt es an den Boden. Und da das die Reihenfolge ist, in der sowieso alles geschaffen wurde, also Land, dann Hotel, dann haben wir die Regeln. Wieder einmal sind diese beiden wirklich optional in Bezug auf was wirklich benötigt wird, um eine Anwendung in Betrieb zu bringen, oder? Also, jetzt, da wir die Rollenkonfiguration Seeding haben, können wir einfach Migration hinzufügen und sagen, zusätzliche Standardregeln. Und, und resultierende Migrationsdatei hat zwei Einträge in unsere Regeldatei. So sehen Sie generierte eine eigene ID. Deshalb wollte ich das nicht ändern. Aber dann bekommen wir Benutzer und wir bekommen den Administrator. Also, wenn wir Aktualisierungsdatenbank tun, wird es voran gehen und die Einfügung tun. Sobald das geschehen ist, müssen wir zwei weitere Änderungen vornehmen. So ist man im Benutzerdetail. Ich habe diese Sammlung von Typ-String eingeführt und ich rufe ihre Rollen auf, richtig? Also geben wir dem Benutzer die Möglichkeit zu sagen , welche Rolle oder welche Rolle diese Person haben sollte, richtig? Und dann im Kegel Controller, gleich nachdem wir überprüft haben, ob der Registrierungsversuch erfolgreich war oder nicht, der Benutzererstellungsvorgang erfolgreich war oder nicht. Denken Sie daran, wenn es darüber hinausgeht, dass Aussage ist, bedeutet es, dass es erfolgreich war. Dann haben wir den zusätzlichen Schritt gemacht, um Benutzer-Manager Punkt, Punkt, fügen Sie Rollen async hinzu. Und wir fügen dem Benutzer hinzu, der gerade erstellt wurde, die Rolle, die hereinkam, unsere Rollen, die hereinkamen. Wenn Sie sich das ansehen, hat es ein paar Überschreibungen. Eine Over-Anzeige erlaubt es, Überlastung zu überlappen, sorry. Der eine Overlord ermöglicht es Ihnen, einfach eine Liste von Rollen zu übergeben. Und das war's. Wir werden es einfach abspielen und diesem Benutzer hinzufügen. Also, sobald alle vorhanden sind, dann wird es mit dem Benutzer im Backend verknüpft. Wieder einmal, eingebaute Funktion, nicht viel Code oder Aufwand auf unsere Teile benötigt. Lasst uns das für unser Tempo nehmen. In Swagger siehst du also, dass sie die potenziellen Werte modifizieren, oder? So dass sie es zeigen. Ich kann ein Array namens Regeln übergeben. Die Ironie ist also die eckigen Klammern, während ein Objekt die geschweifte Klammer ist, richtig? Also lasst es uns ausprobieren. Und ich werde diesen gleichen Benutzer verlassen scheint es nicht zu benutzen. Wir haben Erfolg mit dem letzten Mal. Alles klar, das bedeutet, dass ich eine Validierungsnachricht erhalten sollte, um zu sehen, dass es nicht funktionieren sollte , was ich in der Rolle des Benutzers übergeben werde und wann ich ausführen soll. Und dann ist das, was ich bekomme. Das Ergebnis ist also, dass ich eine 400 schlechte Anfrage habe. Doppelte E-Mails sind das Problem. Es ist bereits so gemacht, dass die Validierung funktioniert. Also lass uns mal sehen. Benutzer in Hotels. Hotel listing.com macht etwas anderes. Und das ist der Benutzer. Also werde ich voran gehen und exekutieren. Und was ich bekomme, ist keine schlechte Antwort. Alles klar, das sieht gut aus. Also lassen Sie uns sehen, was in der Datenbank nach diesen Operationen passiert ist. Also werde ich die Ausführung töten, gehen Sie in den Server-Manager. Und Erstens möchte ich in der Benutzertabellensitzung von mindestens zwei Verwendungen basierend auf meinen bisherigen Tests suchen. Und da gehen wir. Wir haben USA, Gesamtliste und Benutzer am Beispiel. In Ordnung, das ist also gut. Die nächste wären die Rollen. Also habe ich selbst die Regeln gerüstet. Ich sehe nur, dann ist die Regel in. Das sind also die Regeln, die wir erstellt haben. Die Benutzerrollenzuordnung wird jedoch hier gespeichert, da es sich um Viele-zu-Viele-zu-Viele-handelt. Sie sehen also, dass viele Benutzer viele Rollen haben könnten, oder? Deshalb laden wir eine Arie, weil vielleicht ein Benutzer Administrator und Benutzer sein könnte, vielleicht ein Supervisor, et cetera, et cetera, et cetera, basierend auf einem System. Es sind alle Kontexte, oder? jedoch Daten anzeigen, sollten wir in dieser Tabelle Wenn wirjedoch Daten anzeigen, sollten wir in dieser Tabelledie Benutzer-ID sehen, die mit der Rollen-ID verknüpft ist. Also, wenn wir einfach zurückgehen und überprüfen würden, sehen Sie, dass dies die Benutzer-ID ist. Da gehen wir. Und die acht, f, sieben. Also, wenn ich auf die gleiche Benutzer-ID schaue und es ist, wenn sieben und die Rolle 755. Sie müssen also zu diesem gehen, um zu sehen, welcher 755 ist, der Benutzer ist. Das heißt, es ist alles, was wir anfangen, regelbasierte Autorisierung in unsere Systeme und alle unsere Benutzer zu integrieren . Wenn sie sich registriert haben, werden wir mit ihren entsprechenden Rollen registriert. 28. JSON Web (JWT) entdecken: Hey, Leute, willkommen zurück. Also Randall, Wir wollen beginnen, unsere JSON-Web-Token zu diskutieren, aber bevor wir voran und implementieren sie und sind in Bergen von schönen Code. Um dies zu tun, möchte ich ein vollständiges Verständnis für den Zweck verkaufen , den sie im gesamten Workflow, der API-Sicherheit und allem dienen . Es gibt also eine führende Autorität, zumindest in meinem Buch, sie sind führende Autorität in Form von Auth 0. Wenn ich mich nicht irre, gibt es wahrscheinlich Pioniere für diese Art von Protokoll. Aber Sie können zu JWT Dot IO gehen und Sie landen auf der CMP ist, dass ich hier wo sie Ihnen zeigen einige setzen Tolkien und Art von zeigen Ihnen den Zusammenbruch. Also werden wir genau diskutieren, warum Tolkiens unnötig sind und was genau sie sagen, wann, wann sie entschlüsselt werden. Also lasst uns mal sehen. Wieder einmal versucht die Person, sich bei unserer API anzumelden, oder sie versuchen, über unsere API auf unsere Ressource zuzugreifen. Wir haben eingeschränkten Zugang. Wir sagen ihnen also, dass wir wissen müssen, wer Sie sind und was Sie tun können. Aber dann muss ich sicherstellen, dass Sie jemand sind , der zunächst auf mein System zugreifen kann, oder? So würden unsere Tolkien hier ziemlich viel zu ihnen nach einem erfolgreichen Login Versuche ausgegeben werden . Sie würden also ihren Benutzernamen und ihr Passwort übergeben, das wir bereits in unserem System gespeichert haben, weil sie registriert sind. Sobald wir überprüft haben, dass sie sind, wer sie sagen, dass sie sind, werden wir ihnen ein Token mit Informationen geben, die wir auf ihnen haben, damit sie, wenn sie nachfolgende Anfragen stellen, dieses Token verwenden können, anstatt zu versuchen, melden Sie sich jedes Mal an. Also würde diese Tolkien eine Stille darstellen, sind einige codierte Darstellung aller Informationen, die wir für sie haben, die ihren Benutzernamen, ihr Passwort, ihr Passwort, Apologe, mcdr, ihre Benutzername, ihre E-Mail-Adresse, wenn sie anders sind. Ganz lange erlauben wir ihnen, dieses Token zu verwenden, um auf das System zuzugreifen, welche Rolle sie haben. Und dieser andere nennt Ansprüche, was bedeutet, dass Sie in der Lage sind, dies zu tun, was auf vibrieren beginnt. Das sind also die Dinge, die wir in dieser riesigen Zeichenfolge codieren und an sie zurücksenden, nachdem sie sich erfolgreich angemeldet haben. Oder die Vorteile davon ist, dass sie auf ihrer Seite nicht weiter den Login aufrufen müssen, weil denken Sie daran, dass wir nicht die Entscheidung behalten , zu wissen, ob sie zuvor eingeloggt waren oder nicht. Anstatt sie jedes Mal versuchen zu müssen, sich anzumelden , wenn sie einen API-Aufruf machen. Die Anmeldedaten erhalten dieses Token und machen es dann eher mit diesem Token aufgerufen, der an ihre Anfragen angehängt ist. Abgesehen davon, wenn wir die Anfrage bekommen, dann sehen wir, dass es ein Tolkien gibt, wir entschlüsseln es, validiert, dass es von uns kam und sie dann entsprechend umleiten oder geben die Antwort entsprechend. Das ist also, was JWT-Sicherheit alles ein Boot ist. Und Sie werden sehen, dass diese Zeichenfolge tatsächlich farbcodiert ist rot. Ich denke, das wird sagen, Liebe-Anbieter und blies, oder? Und so ziemlich essen sechs x1 ist das erklärte o hier. Dies ist also der Header-Abschnitt, der enthält, welcher Hashing-Algorithmus verwendet wurde, sowie den Typ von Tolkien, in diesem Fall JWT ist. Der mittlere Abschnitt hat die Nutzlast oder die Daten. Also ist die Nutzlast wirklich zu sehen, all diese Informationen ist, was ich über diesen Benutzer weiß. Je mehr Informationen wir darin einpacken, desto größer wird der Abschnitt. Ok, und rechts sehen Sie hier, sie zeigen Ihnen was genau in dieser Nutzlast enthalten ist. So kann die Nutzlast Ablaufdatum der Tolkien- oder Dayton-Zeit geführt haben, weil Sie normalerweise ein Token für einen begrenzten Zeitraum ausgeben. Solange dieser Token gültig ist , wollen sie sich nicht wieder anmelden, richtig? Sobald es ungültig ist, möchten sie sich möglicherweise anmelden und unser frisches Token erhalten und fährt dann fort. Das ist also, was den Zweck erlaubt, dem man dient. Und dann wissen die Piraten mit der Unterschrift. Normalerweise verwendet der Server den Signaturteil, um zu überprüfen, ob die Tolkien eine gültige Information enthält oder nicht. Also, wenn wir das Token ausstellen und wir überprüfen möchten, dass es von uns kam , weil jeder diese Art von Daten wirklich codieren kann. Was sie sicherstellen wollten, dass sie haben, hören Sie nicht kodiert relativ zu unserem ausstellenden Schlüssel, um sicherzustellen, dass er wirklich von uns kam und es in unserem System gültig ist. Also hoffe ich, dass einige der klären, lassen Sie uns sagen, die grauen Bereiche sind, was JWT nicht bewusst ist, es zu verwenden. Wenn wir zurückkommen, werden wir anfangen zu ändern oder Konfigurationen in unserer API, um die Verwendung zu erleichtern. 29. JWT implementieren: Na gut, Leute, wir werden wieder kommen. Also werden wir direkt in die Einrichtung unserer Konfigurationen für unsere JWT springen. Also werde ich einen neuen Abschnitt in unserer Einstellungsdatei erstellen. Ich werde es JWT nennen. Und im Grunde werden wir nur einige Werte hart codieren, die wir wissen, dass wir auf dem Weg bei der Ausgabe und Validierung benötigen. In Ordnung, also werde ich sagen, Herausgeber. Und das bedeutet, dass ich die ausstellende Behörde bin. So können Sie Ihren Anwendungsnamen oder Ihren Domainnamen eingeben, was auch immer es ist. Ich werde nur sagen, die Großbuchstaben auf Namen hier, OTA Liste PA. Das bedeutet also nur, wenn ein JWC JRR Tolkien mit diesem Thema kommt oder werde ich darauf achten? Was Sie später mehr dazu sehen werden. Und es gibt noch andere Dinge, die du hier reinlegen kannst. Sie können in wie die Presets Ablaufzeit setzen. Eigentlich können Sie hier einen Schlüssel setzen, weil es einen Schlüsselwert gibt, der verwendet wird , um die Tolkien zu begleichen. Im Allgemeinen möchten Sie diesen Schlüssel jedoch aus Sicherheitsgründen nicht in die App-Einstellungsdatei einfügen , oder? Wenn Sie es also dort ablegen, kann jemand die App-Einstellungsdatei sehen und dann den Schlüssel herausfinden, der verwendet wird. Ich bin, ich setze hier in ein GUID-Tal, aber das könnte leicht dein Name sein oder was auch immer. Es ist also etwas, das Sie brauchen, das Sie verwenden möchten, um unseren Januar den Schlüssel zu verifizieren. In Ordnung, alternativ, anstatt etwas, das sensibel in die App-Einstellungsdatei ist , zu setzen, weil Sie nicht zu viele sensible Informationen in dieser Datei möchten. Was Sie tun können, ist eine Umgebungsvariable zu erstellen. Wenn es jetzt einen eigenen Entwicklungscomputer erstellt, müssen Sie sicherstellen, dass Sie auch auf dem Server erstellt haben, wenn er bereitgestellt wird. Eine schnelle Möglichkeit, die Umgebung oder Setups oder die Umgebungsvariable aufzurufen, besteht also darin, eine Eingabeaufforderung zu öffnen, Urin-Administratormodus zu messen. Wenn dies also auf einem Computer bei der Arbeit passiert ist, auf dem Sie keine Administratorrechte haben, müssen Sie sicherstellen, dass Sie dies in Ihre Versionshinweise aufnehmen , damit die Systemadministratoren DevOps-Ingenieure sind wer auch immer die Bereitstellung macht, weiß, was zu tun ist. Also werde ich sagen, set x und noch einmal, dies ist eine Umgebungsvariable, die also auf der Windows-Ebene offenbart. Also, wenn ein Hacker war, jemand böswillig war in der Lage, auf die tatsächliche und loggen Sie sich an die Maschine, die wahrscheinlich nie sehen wird, dass dieser Wert sind die Skikunst. Also werde ich diesen Schlüssel anrufen, ihm den Wert geben. Also noch einmal, das ist einfach nicht gut. Das ist, was ich erzeugt habe. Es ist kompliziert genug. Es muss nicht unbedingt so kompliziert sein. Aber noch einmal, es ist ein Kontext, ist alles, okay? Also, egal welchen Wert Sie dort setzen, Sie stellen nur sicher, dass Sie ihn in Anführungszeichen einschließen. Lassen Sie mich das tun. Also key open zitiert den Wert close quotation slash m und m, im Grunde gesagt, dass es eine Systemvariable und keine lokale Variable sein muss. Deswegen musst du das. Stellen Sie sicher, dass Ihr Administrator, so dass Sie sehen, dass es gespeichert wurde. In Ordnung, Seele und all das. Wir haben das eingerichtet. Wir können weitermachen und unsere Service-Erweiterung erstellen, weil wir unser Startup erweitern müssen. Also wieder, anstatt es hier zu tun, werden wir einfach zu Service-Erweiterungen gehen und eine neue Methode erstellen. Das hier werden wir öffentliche statische Leere haben. Also werde ich das auf zwei kopieren, trotz dieses Bart und sagen konfigurierte DW t. Und dann nehmen wir die gleichen Parameter der Dienste. Aber dann nehmen wir auch ich Konfiguration. Es ist Konfiguration, die uns Zugriff auf die App-Einstellungen Konfigurationen noch Freds für, für ein wenig Kontext davon gibt. Wenn wir, lassen Sie mich sehen. Also sehen Sie hier, wir sagten Konfiguration, bekommen Verbindungszeichenfolge, hi Konfiguration, richtig? Also, das ist es, was wir hier drüben referenzieren. Ich habe nachgedacht, gezeigt. Also gehen Sie los und alles, was fehlt. Und dann in dieser Datei ist, wo Abschläge von Magie passieren werden. Also werden wir sagen, var JWT-Einstellungen ist gleich. Und dann werde ich auf den Konfigurationspunkt rufen get Abschnitt. Und der Abschnitt, den wir bekommen werden, ist JWT-Sitzungen. Okay, das ist es, was ich das einfach überprüfen lassen. Oh, es sind JWT Entschuldigungen. Ich nenne es JWT. Ordnung. Dies gibt einen Pfeil und ich denke, es ist, weil ich mit Bibliotheken so dass ausgereift, das ist wieder ich Konfiguration. Ich will keine Erweiterungen, die konfiguriert und nicht die ultimative Person. Lassen Sie mich das noch mal versuchen. Und da gehen wir. Keine Pfeile, alle Rechte. Also der geheime Schlüssel, nein, ich werde sagen, var Ki ist gleich und dann kann ich einen Umgebungspunkt aufrufen, eine Umgebungsvariable erhalten. Und denken Sie daran, dass wir den Namen dieser Umgebungsvariablen setzen, nur wissen, dass sie meine Eingabeaufforderung geschnallt bringen. Ich setze es auf C0. Was auch immer Sie verwenden, gibt es den Namen Ihrer Umgebungsvariablen. So t. Als nächstes wollen wir sagen, ein Dienste Punkt hinzufügen Authentifizierung. Also werde ich eine Authentifizierungsoptionen mit Optionen hinzufügen. Tut mir leid, lassen Sie mich das einfach kriegen. Also sagen sie OPT oder Sie sagen einfach alles außer dem Lambda. Und dann werde ich einfach die Klammer öffnen und schließen, weil wir einige Konfigurationen haben, die wir hier reingehen. Es ist jederzeit, wenn Sie mehrere Zeilen haben, Agenden öffnen die geschweifte Klammer und dann endet jede Zeile mit einem Semikolon, jemand, der alle Punkt-Standardauthentifizierungsschema x0 gleich sagen kann. Und dann haben sie JWT Bier Defaults, Soul, was nicht hier ist. Und ich denke, ich brauche ein paar Bibliotheken oder Song von. Von New bekommt. Also lassen Sie mich einfach Fässer überprüfen, damit es da ist. Müssen die Microsoft ist bei der Kernauthentifizierung, das JWT Bureau. Dann gehen wir weiter und holen das. Wissen Sie, dass es JWT Birra Standard-Punkt-Authentifizierungsschema enthalten ist. Das heißt also im Grunde, dass ich der Anwendung Authentifizierung hinzufüge. Und das Standardschema, das ich möchte, ist das JWT. Okay, also ab dem, aber jemand versucht sich zu authentifizieren, suchen Sie nach einem Inhaber-Token. Das heißt im Grunde, was das heißt. Und dann ist das Standard-Challenge Schema die gleiche Sache. In Ordnung, also überprüfen Sie das für Authentifizierung und Herausforderung. Was auch immer, welche Informationen auch immer auf der Grundlage des JWT-Standards stoßen , fordern Sie sie heraus. Und bewusst erweitern ist, dass ich nur das Semikolon für ein bisschen entfernen werde. Also wollte ich in der nächsten Zeile Punkt JWT Bearer hinzufügen sehen. Und dann wird dieses wieder Optionen haben. Also werde ich mein Tolkien-Lambda machen und dann lockige Klammer öffnen und schließen. Und Bild ist die Einrückung fixiert, richtig? Also dann sagen wir alle Punkt Tolkien Validierungsparameter. Es gibt also einige Parameter, die Sie auf dem Weg einrichten können. Jede Person könnte anders sein. einmal könnte die Institution anders sein. Was ich also tue, sind diese pädagogischen, aber in Ihrem Unternehmensumfeld haben Sie vielleicht andere Bedürfnisse als das, was ich hier darstellen werde. Also, wenn sich das als deine Situation herausstellt, dann handelst du einfach entsprechend, richtig? Also eine neue Tolkien-Validierungsparameter. Und dann werden wir wissen, dass alle einige der Parameter skizzieren, die wir verwenden werden , um zu bestätigen, dass dieses Tolkien, wissen Sie, jemand Zugang gewähren sollte. Dann können wir hier sehen, ob wir bestätigen wollen, wer die Tolkien ausgestellt hat? Das ist generell eine gute Idee. Wenn man bedenkt, dass wir die Mühe durchgemacht haben zu sagen, hier ist der Emittent. Das bedeutet also, wenn jemand einen anderen Wert dort legt, dann sagen wir: Nun, wenn ich die Werte dort kenne, dann sollte es ungültig sein. Boolean wollte die Lebensdauer validieren, richtig? Auf diese Weise werden wir die Tolkien ablehnen, wenn es abgelaufen ist, wird automatisch abgelehnt. Willst du das also tun? Ja. Und dann eine andere, die wir wahrscheinlich tun möchten, ist das ISU-Problem oder den Signaturschlüssel zu validieren. Und wir haben bereits festgestellt, dass das hier oben der entscheidende Wert war, richtig? So weiter, um sicherzustellen, dass es immer der richtige Signaturschlüssel ist. Und dann machen wir weiter. Und dann ging ich zu einem gültigen Emittenten. Oder der gültige Aussteller für ein bestimmtes Tolkien wäre JW-Einstellungen, JWT-Einstellungen, die ein Sträftenabschnitt ist. Rufen Sie Abschnitt, all das. Und dann wäre es Emittent, richtig? So wird ihr Wert für den Emittenten festgelegt. Ich will diesen Punktwert, ihr Ziel. Und dann sehen wir, dass der Aussteller-Signaturschlüssel gleich einem neuen symmetrischen ist. Also nein, wir werden Hashing sein. Und deshalb habe ich gesagt, dass es ein kompliziertes Tal sein kann, muss es nicht unbedingt sein, denn wenn es es aufstellt , wird es sowieso hashen. Also sagen Sie neue Symmetrie, symmetrischer Sicherheitsschlüssel. Und dann kodieren wir. Also sehen Sie, selbst mit meinem sehr, sehr komplizierten, das auf einer Leere basiert, kodieren wir das und dann werden wir es danach wieder hash. Alles klar, wie ich sagte, dass es nicht unbedingt so kompliziert sein muss , wenn man W2 kodiert oder es in Bytes zerlegt. Und dann geben wir den Schlüsselwert ein, den wir von der Umgebung erhalten haben. Also die wichtigsten Teile dessen, was der Schlüssel ist, setzen Sie ihn nicht in die App-Einstellungen, oder? Es ist aufgewühlt, es hätte dorthin gehen können. Aber, wissen Sie, um eine Menge Vorsicht zu sein. Sie legen es in die Umgebungsvariablen. Ich Alf legt es in den App-Einstellungen vor, aber dann war das weit sehr interne Anwendung und nicht notwendig, um öffentlich zu sein oder und so werden wir einfach voran gehen und alle fehlenden Referenzen dort einschließen. Und dann denke ich, dass es nur darum geht, für Validierungsparameter Kugel wieder, basierend auf Ihrer Situation, brauchen Sie möglicherweise mehr Validierungen, als ich hier setze, oder? Also das ist alles, was ich verwenden werde, Semikolon, Semikolon, und dann ist es für unsere Erweiterungen. Also nein, wir können zum Start gehen und wir können auf unsere konfigurierten JWT-Dienste dot konfigurierte JWT aufrufen. Und wir haben das Konfigurationsobjekt, das in der Zeile weitergegeben wird, oder? Und dann stoppen wir irgendwie Rechnung, nur um sicherzustellen, dass alles weicher ist, erfolgreiche Build können wir mit unseren Aufgaben fortsetzen. Also das nächste, was ich tun wollte, ist, einige Funktionen für die Validierung und die Ausgabe der Tolkien zu erstellen , richtig? Also werde ich nach oben gehen, ich meine, einfach alles im Projekt zusammenbrechen. Und dann in unserem Brunnen, ich Repository und Repositories. Was ich also tun werde, ist einen anderen Ordner namens Dienste zu erstellen. Ich wollte nur sicherstellen, dass alles gut ist, trennt seine unbewussten Uhren. Dienste wären also für Erweiterungen, oder? Ich ging, um eine neue Klasse hinzuzufügen. Es tut mir wirklich leid. Ich hätte diesen Vorgesetzten benennen sollen. Also füge ich eine neue Klasse hinzu, die es aus Manager genannt wird. Sie am Ende tun genau das, was ich Adidas die Datei umbenannt habe und es wird automatisch, automatisch umbenannt, dass. Aber dann tut mir leid, es ist keine Klasse, es ist eine Schnittstelle. Da gehen wir. Also in dieser Schnittstelle wollte ich eine Aufgabe haben, die Boolean zurückgeben wird. Und ich wollte es validieren Benutzer nennen. Und dann wird dies den Anmeldebenutzer dto Offenlegung nehmen. Es ist User Nietzsche. Oh, nun, Uniformitätszwecke. Und wir werden weitermachen und alle fehlenden Referenzen wie gewohnt einschließen. Und dann werde ich etwas anderes haben, das die Tolkien schaffen und zurückgeben wird, jemand daran erinnern, dass es Tolkien schafft. Okay, also brauche ich eine Klasse, um das Lesen zu konsumieren. Jemand wird weitermachen, und ich will das nicht aus dem Manager anrufen. Diese ist eigentlich eine Klasse, die von ihrem Namensgeber der Schnittstelle erben wird, dann diese Implementierungen sehen wird, die Methoden, die Sie mir gesagt haben, ich sollte haben. Bevor wir weitermachen, müssen wir sicherstellen, dass wir unseren Service in unserem Boot-Trapper hier in der Datei style.css registrieren . Also werden wir nur sagen, eine Dienste die Chancen gefangen und haben Auge aus Manager abgebildet Manager. Und wir fügen noch einmal in Sculpt hinzu. Das ist also sehr wichtig. Also werden wir dieses Tolkien erschaffen. Also innerhalb von Manager, werde ich diese beiden setzen. Ich werde Werkzeugsachen injizieren. Also brauche ich meine, Erstens, Ich brauche den User Manager , den ich leicht von Kegel bekommen kann, meine Adresse. Ich brauche die exakte Instanz des Benutzer-Managers, richtig? Und gehen Sie einfach vor und fügen Sie die fehlende Referenz. Außerdem muss ich eine Instanz des Configuration Managers injizieren. Also geh einfach weiter und mach ihre Präsentationen für die und beende dann die Injektion. Und wenn das erledigt ist, können wir weitermachen. Beginnen wir also mit der Validierung des Benutzers. Das ist eine tiefere hängende Frucht. Also lasst uns zuerst mit dieser 1 umgehen, richtig? Also, wenn wir validieren wollen, würde der Benutzer im Grunde sagen, wir wollten weiter sagen, dass diese USA im System existiert und ist der Parser erworben? Da gibt es. Also kann ich sagen, var Benutzer Z gleich wartet, Benutzer-Manager Punkt findet namentlich eine Senke. Und dann denken Sie daran, dass für diese Geldstrafe mit Namen im Grunde bedeutet Fan von den USA in Indien es ist, es ist nach dem Benutzernamen fragen. Ich benutzte die E-Mail-Adresse als Benutzername. Also fragen wir nur nach E-Mail-Adresse in dto, aber systemweit ist die Geschichte, die auch einen Benutzernamen hat, oder? Also kann ich einfach weitermachen und das tun. Und das sagt, oh, also o, es bedeutet, dass ich meinen Asynchronsatz brauche, richtig. Also, wann immer Sie ärgern, lesen Sie eine perfekte oh, warten Statement und Sie sind immer noch in die rote Linie. Nur doppeltes Check. Wenn Sie die asynchrone haben, neigt es dazu, auszuschneiden. Mit der Praxis wird es dauerhaft. Also, nachdem wir überprüfen, ob wir Telefon diesen Benutzer haben, so ist dies bereit, zu den Benutzern Objekt auf Speicher hier zurückzukehren. Dann werde ich sehen, und ich werde nur, anstatt eine if-Anweisung zu schreiben, werde ich nur wie ein ternärer Operator schreiben, um Benutzer nicht gleich null zu sagen. Und so überprüfen Sie einfach. Dies ist nicht das Turner-Schema und das ist nur eine logische Aussage. Also zurück, wenn der Benutzer nicht gleich null ist. Benutzer-Manager Punktprüfung Kennwort asynchron. Ich sage immer User dot Passwort. Entschuldigung, nicht Benutzer, Benutzerdetails. Weil wir den Passwort-Hash nicht kennen. So Benutzer dto Dot Passwörter, so ist dies automatisch. Gehen Sie in, um zu sehen, ob dieses Kennwort für den Benutzer gültig ist, der überprüft wird. Wenn wir also jemanden mit einem Benutzernamen zurückgeben und das Passwort gültig ist, wird dies basierend auf dem alten Kamm true oder false zurückgeben, all das. Und was wir hier vermissen, ist alles, was wir brauchen, um unsere Objekte zu benutzen. Also brauche ich Benutzer como, Benutzer muss nachgeben Summer, los. Also wird es das Passwort überprüfen, sehen, ob es gültig und unangeordnet ist. Sie hätten etwas , wenn dieser Benutzername existiert und dann würden wir wissen, dass es ein gültiges Benutzerelement ist. Lassen Sie uns herausfinden, was in der Create Tolkien Operation passiert. Also hier wollen wir ein Objekt für die Zuweisung von Anmeldeinformationen erstellen. Und ich werde weitermachen, was wir Ansprüche nennen werden. Und ich denke, ich muss ihre Freunde einbeziehen. In Ordnung, so weiter, erstellen Sie Tolkien-Teil oder wir möchten ein paar Dinge tun um einige Anmeldeinformationen zu erstellen, um Ansprüche zu erhalten, und dann wollen wir sie der Token-Option hinzufügen. Also werde ich sie nur Zeile für Zeile schreiben. Holen Sie sich die Unterschrift, holen Sie sich die Anmeldeinformationen, holen Sie Kanadier, und erstellen Sie dann Tolkien-Optionen, okay, wo ich sein werde, wir müssen diese Methoden schaffen , die so entzückend sind, dass es Länder gibt, richtig? Nein. Aber dann am Ende der Operation werde ich sagen, neue JWT-Sicherheit zurückzugeben. Und mehr als das braucht etwas, so hat OUT-Sicherheitstoken-Handler, das ist, also müssen wir dieses Identitätsmodell, Tolkiens Punkt JWT, das, und das ist eine Methode oder eine Klasse oder nicht. Richtig? Tolkien, die auch eine Methode ist, aber es nimmt die Token-Optionen. Also, was immer wir hier zurück bekommen basiert auf dem, was wir hier zurück bekommen und BSL würde aber da kommen. In Ordnung, also fangen wir mit diesem an. Also werde ich einfach darüber schweben und die Methode dafür generieren. Und es kann privat sein, so dass Sie es nicht brauchen, um irgendwelche öffentlichen Operationen zu haben. Also bekommen wir die Schleif-Anmeldeinformationen. Das erste, was ich tun muss, ist den Schlüssel zu bekommen. In Ordnung? Und wir werden eine ähnliche Operation durchführen wir in den Service-Erweiterungen getan haben, um den Schlüssel zu erhalten. Also ging es einfach rüber und kopierte und fügte diese beiden Zeilen ein. Der Schlüssel wird von der Umgebungsvariablen erhalten und dann haben wir verschlüsselt, um Geheimnisse zu erhalten. Und dann ist das nächste, was wir tun werden, nur neue vernünftige Signaturdaten zurückzugeben . Und das wird die Geheimnisse haben. Also geheim wäre hier die codierte Version oder ihr geheimes Komma. Und dann lassen wir es wissen, dass der Sicherheitsalgorithmus dafür der H M sah Zahn 5-6 war. Na gut, da gehen wir. Das kümmert sich also um absteigende Referenzen, richtig? Nein, lass uns die Ansprüche machen. Also werde ich nur über diesen zu bewegen, das gleiche erzeugt Methodenstub dafür. Ordnung? Und dann habe ich gerade bemerkt, dass dies vom Typ Objekt ist, also werde ich es sehr explizit machen, dass es Anmeldeinformationen signiert. Das ist der Rückgabetyp, richtig? Ich bin mir sicher, dass Objekt funktioniert hätte, was ich nur möchte, um sicherzustellen, dass alles stark getippt ist. Also dieser hier, lass mich einfach weitermachen und es zu einer Spüle machen. Und es muss eine Aufgabe sein, die eine Liste von Ansprüchen zurückgeben wird. Okay, der Grund, warum wir das alles durchmachen müssen, ist unsere Behauptung, nicht Ansprüche. Es gibt eine, die wir durch all das gehen müssen. Die Angeklagten Typen, die wir sagten var für explizite oben hier oben, dann würde es abgeleitet haben, welche Rückgabetypen die Häfen, Boote. Weil wir Var gesagt haben, es weiß nicht, also ist es nur sehr vage. Okay, also gehen wir weiter und holen uns die Ansprüche. Also werde ich eine neue Liste deklarieren. Var Ansprüche sind gleich einer neuen Liste von Typansprüchen. Und wir werden einen neuen Namen hinzufügen. Und dann würde die Sache behaupten, dass diese, das sind die Bits und Stücke von Informationen, die wirklich sagen, wer sind, was Sie tun können, oder? Also behaupte ich, dies werden behauptet, in der Lage zu sein, das zu tun. Das sind also die Dinge, die wir sicherstellen möchten, dass sie in unserer Anwendung oder in unserem Toolkit enthalten sind . Also das erste Thema, das ich hinzufügen wollte, sind die Anspruchstypen dot. Ich ging zu suchen, es gibt eine Reihe von 0s und ich bin so das sind alle Anspruchstypen, die da sind. Siehe Rolle ist es, Sie können mehrere Regeln hinzufügen, E-Mail, all diese wunderbaren Dinge, richtig? Jemand, der Nim sehen will. Nim bedeutet in der Regel Benutzername, E-Mail, selbsterklärend, usw. Also, wenn ich sagte, ich wollte es entweder sauberen Typnamen, den Namen des Benutzers, der gerade validiert wurde, welche jemand hier etwas ändern will. Also halte ich die Benutzer-Ortsansässigen des Gültigkeitsbenutzers, was bedeutet, dann müsste ich versuchen, das weiterzugeben. Also, was ich hier tun werde, erstellen Sie eine andere Variable vom Typ APA Benutzer, und ich werde es Benutzer nennen. Und dann, anstatt Benutzer in ungültig zu lokalisieren, werde ich das einfach so weiter tun. Wo im Kontext dieser Klasse, werden wir Zugriff auf die Benutzerdaten haben. Das ist seine Idee, richtig? Also lasst uns weitermachen. Also Name ist Lynn, um vom Benutzer dot zu kommen und wir werden einfach verwenden, na ja, wir können Benutzernamen verwenden, oder? Wie aus Mangel. In einer Situation, in der Sie die E-Mail nicht als Benutzername verwenden würden, haben Sie den Benutzernamen, der als benanntes sauber und Minimum verwendet werden soll. Das würdest du haben wollen, oder? Dann können wir var Zeilen sagen. Und dann können wir unsere Gewichte. Und verwenden Sie den Benutzer-Manager, um die Rollen für die Benutzer zu erhalten. Also gibt es eine Spüle. Da gehen wir. Ich würde einfach in US übergehen, da es automatisch alle Regeln für diesen Benutzer abrufen und sie in Form einer Liste zurückgeben wird. Da gehen wir und listen auf. Und dann für jeden von denen, die hinzufügen möchten, dann möchten wir für jede Regel in Rollen diesen Anspruch hinzufügen. So kann ich Ansprüche Punkt sehen. Und dann werde ich einfach neue Behauptung sagen, wie wir es hier getan haben. Und sagen Sie einfach Ansprüche, die neue saubere hinzufügen, aber dann klicken Sie auf Typ wäre Rolle. Und dann würde die Regel, die wieder in Ordnung kommt oder hinzugefügt wird, von unserer Schleife ausgeschlossen werden. Alles klar, und dann nach all dem, und wir bauen es auf und wieder, basierend auf den Behauptungen, die Sie einbringen möchten, können Sie hier alle möglichen Ansprüche sehen. Du kannst so viele einpacken, wie du willst, oder? Sobald sie fertig sind, können Sie einfach Ansprüche zurückgeben. Also das ist Troodon und noch eins, richtig? Also werde ich nur diese Methode generieren, immer noch wissen, welche die Schleif-Anmeldeinformationen und die Ansprüche kombinieren und die tatsächlichen Tolkien erstellen, die dem Benutzer ausgegeben werden. Alles klar, hier wäre der Rückgabetyp vom Typ JWT-Sicherheit. Tolkien schreibt, JWT Sicherheit Tolkien, aber, so dass wir sehr explizit sind, was es sein sollte. Jetzt statt dieser Methode. Wir werden diese Var sehen. Also muss ich die Sitzungen holen. Var JWT-Einstellungen sind gleich, und ich möchte das wirklich nicht erneut eingeben. Mal sehen, ob ich das schnell hier kriege. Ich hätte wohl zurückhaltend sein können, aber das ist in Ordnung. Var Einstellungen ist, dass, obwohl wir sagen, var Optionen Tolkien Optionen sind gleich neue JWT Sicherheit Tolkien. Und dann müssen wir diesen Konstruktor verwenden. So dämmerte es ihm natürlich zu einem. Also werden wir bestimmte Parameter eingeben. Also ging ich zu spezifizieren, dass der Aussteller, den ich will, aus dem JWT-Einstellungen Abschnitt für die gültige Sie erleichtern Ihre genau wie das, was wir hier hatten, das ist das Problem, das wir wollen. Also stellen wir das als ein Problem dar. Gibt es die nächste wären die Ansprüche. Und dann würden die Ansprüche von unserer Liste kommen. Forderungen, Auszahlungen, Bossdarlehen in den Parametern hier, richtig? Und dann wollen wir das Ablaufdatum auf. Sagen Sie Ablauf ist immer gut zu sitzen. Es fragt Sie also tatsächlich nach einem Ablaufwert. Jetzt könnten Sie 15 einstellen, setzen Sie zehn, mg, und es könnte das tun. Oder Sie können einfach die Einstellungsdatei ändern und den Wert dort einstellen, richtig, da dort alle meine fest codierten Werte gehen, werde ich es einfach einheitlich halten. Und so werde ich nur sagen, dass Sie diesen Wert aus der Einstellungsdatei erhalten. Es ist in der Sektion Lebenszeit genannt. Das bedeutet also, dass dieser Wert, dieser Tolkien einmal erstellt, nur für 15 Minuten gültig ist. Das ist richtig. Und dann wären die Schleif-Anmeldeinformationen, die wir bereits festgelegt oder tatsächlich weitergegeben haben, hier. Sobald das alles erledigt ist, gehen wir weiter und kehren zurück. Unsere Optionen sind, lassen Sie mich das mehr nennen, angemessener. Dies ist das Zeichen, weil dies die Schöpfung des Tolkiens ist oder in Tolkien zurückgekehrt ist. Und dann ist das Tolkien, richtig? Dann serialisieren wir es in eine Zeichenfolge und geben diese Zeichenfolge null zurück. Wir haben hier ziemlich viel Arbeit geleistet. Und die eine Sache, die wir wahrscheinlich danach tun müssen , ist sicherzustellen, dass wir und es mir leid, ich sehe nur einen Fehler hier mit der Konfiguration. Es war ihr eigenes. Und stellen Sie sicher, dass ich den richtigen Blob gebaut habe. Also werde ich sagen und dass wir hier einiges getan haben, um unsere Tolkien-Sachen zum Laufen zu bringen. Also, was wir tun wollen, ist, es tut mir leid, also ist das gut. Also wegen ihrer eigenen Konfiguration, habe ich nicht sehen, dass dieser Pfeil abläuft sollte. Habe ich. Und ich habe nur 15 Minuten. Also lassen Sie mich, lassen Sie mich wiederholen, dass jemand var Erfahrung SHA-1 zu speichern ist gleich, ich sehe nicht wirklich passieren sollte, ist, dass wir Datetime Punkte null sagen. Wann wurde ein Tolkien gefragt, lassen Sie uns ein paar Minuten hinzufügen. Was auch immer es ist, welche Schwelle Sie wollen. Also, wenn es de Minuten überhaupt ist, war man nur sagen, dass entsprechende, es ist seltsam Minuten. Und dann würden wir in den Wert setzen. Und der Wert hier ist String. Das bedeutet, dass ich so etwas wie ein int konvertiertes Dots Tool tun muss. Und wie ich in 32 sagte, oder erfordert das Doppelte? Ich denke, das erfordert Doppelte. Also lassen Sie mich tun, ich werde zu w statt Bremsleitung konvertieren und das schließen. Also würde ich Minuten Konvertite zu Bobo. Es tut mir leid. Ja. Da gehen wir. Also tun wir, dass konvertiert ein doppeltes Ende abläuft den Wert aus der Exploration, nicht wahr? An diesem Punkt wissen wir, wann die Tolkien nicht mehr gültig wären , und ich vermisse hier ein Semikolon und lass mich einen Build machen. Und wir haben keine Pfeile. Also werde ich singen, wenn wir zurückkommen, wir werden die ganze Authentifizierung erkunden. Eigentlich unsere Autorisierung tatsächlich gewonnen verhindert den Zugriff auf unsere Ressourcen und dann wie wir tatsächlich den Endpunkt einrichten, um den Benutzer zu authentifizieren und einfach zu sprechen und dementsprechend. 30. Endpunkte schützen: Na gut, Jungs, willkommen Dollar. Wenn Sie also unseren Authentifizierungsmanager einrichten , um ein Problem zu lösen, generiert dies ein Problem. Die Token, was wir tun wollen, sind tatsächlich unsere Login-Endpunkte zu beenden und wo wir tatsächlich die Tolkien validieren und jedem Zugriff erlauben oder verweigern, der in diesem Token passiert, richtig? Das erste, was wir tun wollten, ist, unseren neu erstellten Off-Manager-Dienst zu injizieren , so dass wir wissen, wie die Injektionsbereiche zu tun. Sie können einfach voran gehen und Pause drücken und fortfahren und diesen Injektionsoperator abschließen. Sobald Sie also die neuen drei Zeilen hinzugefügt haben, eine für die private Eigenschaft, eine in den Konstruktor und die Up-Initialisierung. Dann können wir über das Erstellen oder Anmelden Endpunkt gehen. Sie hätten also bereits den Anmeldeendpunkt kommentiert. Sie können es entfernen und ich werde bereits die überarbeitete Version davon auf dem Bildschirm haben. Also lasst uns es einfach zusammen durchgehen. Also, was wir tun wollen, ist loggen Sie sich ein, um unsere angeforderten oder die Daten im Detail zu validieren. Dann werde ich sagen, wenn der Off-Manager den Benutzer validieren, wenn nicht Thread, so dass es leicht lesen könnte, sagt er gleich falsch incase, Sie müssen C scharf. Wenn nicht, setzen Sie einfach den Ausrufe-Sensor. Dies bedeutet, wenn es nicht ein gültiger Benutzer als Rückkehr auf Autor ist, weil, na ja, wenn Sie versuchen, sich anzumelden und Sie kein gültiger Benutzer sind, dann sind Sie nicht berechtigt, weiter zu gehen, oder? Andernfalls werden wir zurückkehren akzeptiert sind okay. Was auch immer es ist, ich sehe akzeptiert, akzeptiert, neue und ein neues Objekt mit, mit einem Ausdruck namens Tolkien. Und es wird den Wert des Tokens nehmen, der erstellt wird. Also sagen wir, ein Gewicht auf der Partitur off Manager Punkte erstellen Tolkien. Denken Sie daran, dass, das ist, was wir in unserem Auth Manager eingerichtet haben. Nur null erstellen Tolkien durchläuft, generiert alle diese Bits und Teile von Daten und gibt dann die Tolkien zurück. Das ist also, was diese Nutzlast haben wird, also weiter, um diese Funktionalität zu testen. Lassen Sie uns also unseren Login-Endpunkt nochmals besuchen. Ich werde nur Fußball für diese Teile seiner verwenden sind die striatal es und setzen in einem Benutzer, der nein, Ich erstellt und ist bereits registriert. Und dann werde ich auf Ausführen klicken. Und mal sehen, was passiert. Oder es ist, und wir bekommen eine Token-Antwort. So sehen Sie diese große Zeichenfolge, tolkien, das ist aufgrund der Experten und wir werden in ein benutzerdefiniertes Objekt setzen. Und der übergebene Wert ist das Token, das hier ist. Wenn ich also dieses Token gemacht habe und auf unsere Website gehe, schau dir an, was in Token ist. Fügen Sie es ein. Dann werden wir hier sehen, dass wir den Algorithmus haben, wir haben Traviata example.com. Das ist der Anspruch für den Benutzer. Nun, die Rolle. In Ordnung, und wir haben die Ablaufzeit. Und wenn Sie mit dem Mauszeiger fahren, wird Ihnen genau die Zeit angezeigt, ab der es ausgestellt wird und der Aussteller. Ordnung. Und dann, wenn wir so weit wie ihre Freundin betrügen wollten, so könnten wir das tun, aber schon den Mechanismus haben, um das intern zu tun, also brauchen wir das hier nicht zu tun. Jetzt möchte ich also experimentieren, damit jemand den Zugriff auf unsere Endpunkte verhindert. Also werde ich unser Hotel benutzen. Zum Controller für diese Übung. Also lassen Sie uns sagen, dass die Fähigkeit, die Liste der Hotels zu bekommen, jeder sollte in der Lage sein, das zu tun. Wir sollten in der Lage sein, es ohne Authentifizierung zu nennen, was wir bis auf null getan haben. Wir möchten jedoch eine autorisierte Überschwemmung oder Anmerkungen zum Anruf hinzufügen , um zu einem Hotel Details zu gelangen. Also haben wir nur Autorisieren angezogen. Und tatsächlich könnten Sie die, die Annotation hier für das HTTP GET erweitern und direkt dort autorisieren. Okay, also könntest du es so oder so machen. Also, wenn du das hier hast, brauchst du das nicht. Persönlich möchte ich sie trennen. Also von der HTTP GET autorisieren und tatsächlich mögen oder bevorzugen es, es an die Spitze zu setzen. So wie ich es sehe, weiß ich, dass es sich um autorisierte Endpunkte handelt. Also, was wir tun wollen, ist, unseren Anruf zu testen. Also dieser Endpunkt nicht autorisiert und autorisieren. Also dieses Ziel. Und für diese Aktivität werde ich Postbote verwenden, jemand hatte zuerst die, die wir nicht autorisiert haben, nur um sicherzustellen, dass es immer noch funktioniert. Ordnung. Es gibt eine Liste von Fotos, drei Hotels. Gut. Jetzt werde ich diejenige mit dem Endpunkt testen, der einen ID-Wert erfordert, richtig? Also, wenn ich auf Senden klicke, wird es sagen 401 unautorisiert. Es sagt nicht 401 auf Autor, weil ich mich nicht angemeldet habe oder was auch immer, weil ich meine, dies ist bereits autorisiert und kürzlich das Standardschema zu C, ich muss ein Tolkien sehen, um zu autorisieren sind nicht solide. Das geschieht automatisch. Wenn wir einen alten Tolkien drin haben, was ich tue, ist das ein Token, das vor mehr als 15 Minuten ausgegeben wurde. Dann wird es automatisch auch den Zugriff verweigern. Wenn also ein Tolkien ausgegeben wird, und dann dauert es Spitzen, es die Besitzer des Clients, die Anwendung aufrufen und bedauern, ein neues Toolkit zu holen, was bedeutet, geht durch den Login-Prozess wieder, ruft ein neues Token ab und komm dann zurück und versuche, auf diese Endpunkte zuzugreifen. Ordnung? Also in Postman, was wir tun wollen, ist in die Autorisierung gehen und Träger Token aus dieser Dropdown-Liste wählen. Dann liefern wir das Token, das wir haben, das ist das frische Tolkien. Und dann, wenn wir das tun, und ich bekomme immer noch eine 401 unautorisiert, also bedeutet das, dass es eine Konfiguration gibt, die fehlt. Und lassen Sie mich mehr als wahrscheinlich gehen, dass es im Startup-Punkt cs ist. Und ich glaube, ich habe eine der Middleware aufgehört, also muss ich das addieren. Verwenden Sie die Authentifizierung direkt hier. Ordnung? Stellen Sie sicher, dass Sie das haben. Verwenden Sie Authentifizierung und Reihenfolge Angelegenheiten in diesen Situationen, Authentifizierung, dann Autorisierung und all das, bevor sie oben sind, nicht NVC. Die anderen.NET Core-Versionen können unterschiedliche Middlewares enthalten sein. Solange du das allgemeine Thema bekommst, solltest du gut sein. Also lasst uns die gleiche Anfrage noch einmal versuchen. Und wir haben viel besseren Erfolg. In Ordnung, wir bekommen uns den Status 200 OK. Und wir sehen das einzige Hotel, das wir angefordert haben. Also wissen Sie, dass wir gerade unseren Endpunkt geschützt, denn wenn ich das entfernen und sagen In allen und Interessen und wieder, Ich bekomme eine 401 unautorisiert, sobald ich die Birra Tolkien einschließe, bekomme ich den Status 200. Wenn ich diesen Geist modifiziere, Tolkien, dann ist es nicht autorisiert, weil die Tolkien nicht gegen die Entzündung validiert werden konnten , wurde codiert und ursprünglich eingelegt. So können Sie voran gehen und Ihre API härten. Und noch einmal ist diese JWT-Methode sehr sicher, weil diese Nutzlast, ja, sie kann dekodiert werden, aber sie wollte keine Informationen enthalten, die zu sensibel sind und Informationen, die sie enthält, sollten Informationen, dass, wenn Sie es sehen, es ist aus. Keine wesentlichen Konsequenzen für die API und die zugrunde liegende Infrastruktur. Es genügt mir, zu überprüfen, wer Sie sind und dass ich derjenige bin, der Ihnen Zugang zum System gegeben hat. 31. Änderungen in GitHub überprüfen und hinzufügen: Willkommen zurück Jungs, wo es ein weiterer wichtiger Kontrollpunkt ist. Und jedes Mal, wenn wir zu wichtigen Kontrollpunkten kommen, gehen wir voran und überprüfen unseren Code, damit Sie einfach voran gehen und Ihre Check-in-Nachricht schreiben und dann alles übernehmen und synchronisieren können. Und sobald das abgeschlossen ist, werden wir zu unserer nächsten spannenden Aktivität übergehen. 32. POST erstellen: Willkommen zurück Jungs. In dieser Lektion beschäftigen wir uns mit der HTTP-Post-Methode oder dem Verb, dem wir Ressourcen oder neue Datensätze in unserer Datenbank erstellen können. Obwohl wir zuvor mit Post gearbeitet haben, als wir unsere Login-Funktionalität in unserem Controller saßen , haben wir irgendwie mit der Post experimentiert und wir haben die Tatsache untersucht, dass wir tatsächlich Daten in Form des Körpers übergeben können, sind eine benachbarte Objekte, die in das Objekt deserialisiert werden würden , das wir dafür gesorgt haben. Und auf diese Weise müssen keine sensiblen Informationen in einer URL RNA sichtbar gehen. Was wir also tun werden, ist die Einrichtung der Post-Funktionalität für unser Hotel. So dass, wenn wir ein Hotel erstellen, können wir den Benutzer bitten, über alle Details Boden Hotel in Form eines JSON-Objekts zu senden und dann geben wir es an die Datenbank. Also habe ich bereits die Methoden, den Web- oder Verb-HTTP-Post vorbereitet . Und wir werden Status 400 Status-Tool eins sowie Status 500 zurückgeben. Beachten Sie nun, dass dies 2l eins und nicht 200 ist, weil 2-1 Mittel erstellt. Wir geben also zwei an, die aufrufende Anwendung oder den Client, dass ja, was auch immer Sie angefordert werden, erstellt wurde. Lassen Sie uns also beginnen und jetzt ist das erste, was ich tun möchte, bevor ich etwas erstelle oder Daten in meine Datenbank überbringe , zu überprüfen, ob die übergehenden Daten gültig sind. Also, was ich tun wollte, ist in eine if-Anweisung hier zu sagen, wenn nicht, Modellzustand ist gültig. Also haben wir so etwas gemacht. Ich glaube, wenn wir das Login machen, wo wir gesagt haben, ist der Modellzustand gültig, was bedeutet, dass alles, was ich gesagt habe, erforderlich ist. Ist es da? Wenn nicht, haben wir den Butter-Twist zurückgegeben. Also werden wir das Gleiche tun, diesen Schritt hier replizieren. Aber ich sehe, ob es nicht gültig ist, dann wirst du die Luft lieben und sagen, dass es einen ungültigen Post-Versuch in dieser Methode gab , richtig? Und wir geben die schlechte Anfrage zurück. Sonst wollen wir versuchen und Operationen. Also haben wir unseren Versuch fangen. Und die Gleichmäßigkeit unseres Kodex ist so, dass wir diese wirklich alt nehmen können. Also fängst du an zu sehen, dass wir irgendwie die Gewissheit wiederholen, weil all diese Dinge, was wäre, wenn wir eine Botschaft ändern wollten? Sie müssten es hier ändern, geändert in dieser Methode GnG Tier. Und dann, wenn wir expandieren, müssen wir mehr Berührungspunkte haben. Also später werden wir am ganzen Wochenende sehen, all diese Wiederholung abstrahieren. Aber im Moment möchte ich nur sicherstellen, dass wir die Konzepte von timed verstehen. Okay, also gehen wir einfach weiter und ändern die Fehlermeldung und wissen, dass Sie versuchen oder operieren können. Was wollen wir jetzt versuchen? Das erste, was ich tun möchte, ist, das Dto zu nehmen. Und wenn wir nur dieses Detail überprüfen, hat es Namen, Adresse, Aufruhr, und es erwartet eine entgegengesetzte ID. Und dann haben wir Hotel dto, das ID und Land hat. Der Grund, warum wir keine Hoteldetails verwenden, ist, dass wir den ID-Wert nicht benötigen, der mit dem Erstellungsversuch übertrifft. Deshalb haben wir nur die Felder, für die wir unbedingt Werte benötigen, die innerhalb der Create-Version dieses dto beschrieben sind. Jetzt, wenn ich das Detail habe, möchte ich es kartieren. Jemand sagt einfach var Hotel ist gleich mapper dot map in ein Objekt vom Typ hotel, das ein Datenobjekt ist, und die Zuordnung der Inhalte des Hotels. Beim nächsten Stopp rufen wir unsere Einheit aus der Arbeit an. Also werde ich Unterstrich Einheit der Arbeit sehen, Punkte, Hotels, Punkt. Und dann habe ich in cert was auch immer mein Objekt vom Typ Hotel einfügen. Denn bis zu der Zeit, die es hier ankommt Sie, welche Validierungen Sie einlegen müssen. Also hier validiere ich nur ein Molekülzustände, wenn Sie andere Dinge hatten, die Sie benötigen, um sicherzustellen, dass sie an Ort und Stelle sind, bevor es uns Feuer als Versuch, es einzufügen, stellen Sie sicher, dass Sie alle diese Kontrollen und Waagen tun und die Batterie zurückgeben Quest oder was auch immer, Aristoteles, noch ein Kunde, bevor Sie tatsächlich in einfügen starten. Und selbst wenn Sie den Einsatz machen, wenn es eine Ausnahme gibt, wir immer noch etwas zurückgeben, außer es wird FIFO Hunderte sein , da das Gebiet wahrscheinlich auf unserer Seite ist. Nachdem wir den Einsatz aufgerufen haben, ist das nächste, was wir tun müssen, das Speichern aufzurufen. Beachten Sie. Als wir gerade abrufen, konnten wir einfach ein Warten machen, dass es keine Rettung gibt. Bei dieser Gelegenheit ändern wir jedoch die Datenbank, so dass wir die Änderung, die wir danach vornehmen, übernehmen müssen. Deshalb müssen wir das Save nennen. Nach all dem müssen wir etwas Schönes zurückgeben. Also, was kehre ich zurück? Ness, ich werde sagen, Create, Ted, Nein, ich habe genug geschaffen, bei Aktion direkt dort geschaffen, tatsächlich auch unerschaffen bei root. Also haben sie alle die 201 zurückgegeben. Es ist nur so, dass, wenn Sie sagen, erstellt, es ist nur 201. Es kann jedoch gesagt werden, dass erstellt wird, um den Endpunkt aufzurufen und ihn aufzurufen, mit der erforderlichen ID mitgeteilt zu werden, sagen wir, dass tatsächlich zurückkehrt, sie haben Objekte an den Client erstellt, was ich für nützlich halte. Also werde ich mit erstellt bei root gehen. Dann muss ich den Namen der Route angeben. In diesem Fall habe ich gesagt, ich wollte das Hotel holen. Und danach muss ich angeben, welche Parameterwerte dieser Endpunkt benötigt. Also, wenn ich zurückblicke, Ich komme nach Hause, um IT benötigt eine ID weicher ein neues Objekt angeben. Und es wird ein Feld namens ID haben, und es wird gleich Hotelpunkt-ID sein. Beachten Sie, dass Hotel jetzt insgesamt dto, Hotel ETO hat keinen ID-Wert. Nach diesem Vorgang wird dieses Objekt jedoch mit seiner ID aktualisiert. Und dann werden wir das vorbeigehen. Also lassen Sie uns das hier für eine Spin nehmen. Aber kurz bevor wir das tun, bevor ich mich selbst abhauen kann, müssen wir diese Regel zulassen, noch dass sie diesen Namen hat, oder? Also, obwohl es den Namen hat, müssen wir es wissen lassen, dass es eine Operation bekommt, die unter diesem Namen geht, nicht unbedingt Wurzeln Buch mit diesem Namen, richtig. Ich kann einfach hier anhängen und sagen, Name ist gleich. Das ist also wie eine kleine interne Spitznamennotiz zu sehen. Das ist dein Name, wenn jemand bei deinen Geschwistern ist, ein anderer Axon anruft. Also lassen Sie uns versuchen, das ist noch einmal. In Ordnung, also werden wir das hier in Postman testen. Und ich habe hier bereits ein Objekt, also habe ich dieses Objekt tatsächlich aus unserem vorherigen GetText kopiert. So haben wir bereits festgestellt, dass die ID nicht erforderlich ist. Aber einfach rüber zu Slugger, nur um dir zu zeigen, was Swagger ein Boot heilen wird. Wenn wir uns die Post für das Hotel ansehen, zeigt es uns, dass das alles ist, was es schrecklich sein wird. Selbst wenn wir zusätzliche Informationen senden, wird es ignoriert. Also gut, so muss unser Objekt aussehen, um in unsere Posten zu gehen. Also mit Postboten werde ich es tatsächlich mit der ID testen und mal sehen, was passiert. Also werde ich klicken, senden Sie mich. Dieser Axon ist auf dem Posten. Wir haben unseren Endpunkt und klicken Sie dann auf Senden. Und wir bekommen diese Ära sowohl System ungültig Betrieb Nauru, viel wird Werte geliefert. Das bedeutet, dass wir den Code oder auf einem CreateDat r2 neu strukturieren müssen. Gehen Sie zurück zum Code, lassen Sie mich einfach sehen, was Überladungen da sind. Und wir haben den String-Root-Namen, wo der objektive Wert, glaube ich, dass ich das eigentliche Objekt vermisse. Da gehen wir. Also Komma und Hotels oder Übergabe der ID und des tatsächlichen Objekts angezeigt werden. Also lasst uns das noch mal versuchen. Also die gleichen Tests, die einen Fehler geben, werde ich es erneut versuchen. Und da gehen wir. Also schauen Sie sich den Unterschied zwischen den beiden Nutzlasten an, wo wir unser Hotelobjekt mit dem ID-Wert von sechs oder x zurückbekommen, sogar die fünf sind hier 5, es ist fünf hier, richtig? Nur um Ihnen zu zeigen, dass dies für nichts konstant war, dank uns, dass es ihnen nicht erlaubt, diese Daten zu übermitteln. Das ist also ein weiterer Grund. Es ist eine gute Idee, Details zu verwenden, um zu bereinigen, was in Ihre API kommen kann. Jetzt zusätzlich zur Anzeige der neu erstellten benötigten einen weiteren Vorteil, diejenigen, die bei Rutan erstellt wurden, die auf den Endpunkt zeigen, wären, dass wir in den Headern tatsächlich den Ort zurückgeben, an den sie gehen können und diesen Datensatz abrufen können. Also sehen Sie, es hatte einen bestimmten Zweck, wenn ich nur, wissen Sie, den Client hätte , wenn sie in den Headern schauen und einfach den Standort erhalten nachdem ich die Daten zurückgegeben habe, die sie tatsächlich nur verwenden können und ein get -Operation und ihren Datensatz abrufen. Aber natürlich bin ich nicht autorisiert. Also weißt du, der ganze Shebang schon, der durchmachen muss und das alles tun muss. dass es schädlich ist, Ich glaube nicht,dass es schädlich ist,jemandem zu erlauben, ein Hotel nach Ausweis abzurufen, oder? Also haben wir es zunächst autorisiert, weil wir getestet haben. In der Praktikabilität denke ich jedoch nicht, dass wir autorisieren müssen, um gesagt zu werden. Wenn wir ihnen erlauben, den Zuhörer zu bekommen, sollte. Eines, aber ich denke, dass es gut wäre, zu autorisieren, wer schaffen kann. In Ordnung, also liegt es an Ihnen mit Geschäftsregeln und Ihre Anforderungen werden bestimmen, wo Sie den Autor als Haussicherheit stellen, Sie erzwingen unsere eigenen Jahresendpunkte und -vorgänge. Also in dieser Situation werde ich erstellen Hotels autorisieren, so dass Sie autorisiert werden müssen. Und für mich ist es viel schlimmer, wenn Sie nicht in der Rolle des Admins sind, dann sollten Sie das nicht tun können. Um regelbasierte Autorisierung zu erzwingen, kann ich Rollen gleich sehen und dann so viele Regeln auflisten, wie ich unterstützen möchte. Also, wenn ich sage autorisieren Regeln, Administrator, das bedeutet, wenn Sie autorisieren, bekommt es Tolkien, aber Sie sind ein Benutzer, kein Administrator, dann können Sie nichts ausführen, was Sie immer noch nicht autorisiert sind. Wenn Sie jedoch Administrator sind, können Sie direkt voran gehen. Das ist also wieder dieses Ganze, du kannst einen durchsetzen. Welchen Endpunkt haben Sie der Öffentlichkeit von John gegenüber einem Autor, authentifizierten Benutzer ausgesetzt? Und dann durch Erweiterung, wie erweitern Sie diese Funktionalitäten auf die autorisierte Gruppe von Benutzern, die basierend auf Richtlinien und Regeln autorisieren können. Und es gibt einige Möglichkeiten, die Ihnen zur Verfügung stehen. Wenn Sie Komma drücken, sehen Sie, dass Sie das Authentifizierungsschema haben. Wir könnten ein JWT machen, ein anderes Passwort aus, et cetera, et cetera. Sie können eine Richtlinie erzwingen und sie nach Rollen einschränken. Dafür gibt es also einige Möglichkeiten. Also, richtig, nein, ich werde dich noch einmal herausfordern, was wir gerade mit „Hotel erstellen“ gemacht haben. Ich ermutige Sie, es mit dem Land zu tun. Stellen Sie sicher, dass Sie es testen und dass Sie Ihr Land erfolgreich zurückbekommen. Und wir werden Notizen vergleichen. Und wir sind wieder da. Ich hoffe, du hast angehalten und es versucht. Wenn nicht, dann mach weiter und pausiere. Nein, aber ich werde dich durch das führen, was ich getan habe. Und wirklich und wirklich werden Sie feststellen, dass der Code fast identisch ist. Eine, in der wir im Land Controller die gleichen Genehmigungsmaßnahmen haben. Wieder einmal kann sich Ihr Kontext von meinem unterscheiden, aber wir möchten nur sicherstellen, dass wir die Endpunkte entsprechend sichern. Wir machen einen HTTP-Post wird ähnliche Rückgabetypen haben, wie wir mit dem Hotel gemacht haben, außer für die Aktion, die ich nennen werde, erstellen Sie Kontur in der entsprechenden dto übergeben. Wir validieren zunächst den Modellzustand. Und dann gehen wir weiter und fügen nur auf die gleiche Weise hinzu. Und dann haben wir bei root erstellt bekommen entgegengesetzt möglich das Objekt. Und wir haben dafür gesorgt, diesen Namen hier hinzuzufügen. Also sehen Sie, wenn Sie die Sache haben, es sei denn, Sie haben einige extreme Umstände, müssen wir zusätzliche Berechnungen und Berechnungen durchführen. Und selbst dann wäre es nur eine Frage der Mapping über r. Nun, ja, Sie würden wahrscheinlich nicht die berechneten Werte durch das Detail bekommen. Sie ordnen es also dem Objekttyp zu. Und dann machen Sie alle Ihre Berechnungen, und dann fügen Sie ein und speichern Sie. Es gibt also wirklich nicht so viel, um Ressourcen in Ihrer API zu erstellen. 33. Construct konstruieren: Willkommen zurück Jungs. Wir setzen unsere API-Entwicklung fort und untersuchen das PUT-Verb. Dieser Reifen. Jetzt ist Put ähnlich wie der Post, außer es wird hauptsächlich verwendet, um entweder kreativ zu sein, es existiert nicht, oder zu aktualisieren, wenn es nicht existiert. Also lasst uns anfangen. Und wenn wir Sie getestet haben, wird das ein bisschen mehr Sinn für Sie machen. Das erste, was ich tun möchte, ist, die Art von Beschränkung zu replizieren , wer auf den Put zu mir zugreifen kann. Wenn Sie nicht schaffen können, sollte die Nische nicht in der Lage sein, zu aktualisieren, oder? Noch einmal, Kontexte, Regeln, aber ich werde nur genehmigen. Und ich werde nur genehmigen. Ich werde es nicht einmal regiert machen. Richtig. So kann der Administrator mehr als einmal erstellen, wenn er autorisiert ist. Sie können voran gehen und erstellen Sie ein Sie können voran gehen und aktualisieren, sorry, in Bezug auf Self-Care-Regel. In Ordnung, also wäre der nächste HTTP-Port, und das ist unser neues Verb. Und mehr oder weniger werden die gleichen Rückgabecodes haben , außer BY etwas anderes für diesen zu tun. Also lassen Sie mich einfach diese einen Knoten kommentieren und wenn wir dort sind und dann werden wir es anpassen. Also haben wir die Aufgabe unserer Methode. Und ich werde es nur kopieren. So kann es sich schnell mit der Vorbereitung dieser Methode Stub bewegen, oder? Und dieser hier wird Update Hotel sein. Jetzt in Bezug auf die Details, die für Updates Hotel verwendet werden. Nun, erstens brauchen wir den Parameter für die ID. Weißt du, es gibt zwei Denkschulen oder vielleicht drei Denkschulen in dieser Angelegenheit. Aber sagen wir zwei Denkschulen. Nummer eins ist, dass ich die ID in der URL haben muss, genau wie alles, was wir hatten, war, dass sie richtig sind. Also muss ich, ich brauche Sie, um die ID mit der URL übergeben. Aber dann würde eine Denkschule sagen, dass das Detail auch den Ausweis haben muss. Das bedeutet also, dass der Client die ID mit der URL und positiv im Textkörper der zu aktualisierenden Daten übergeben muss. Nun, das ist ein potenzieller Validierungspunkt, an dem Sie überprüfen, ob die ID, die in der URL gesendet wurde , mit der zentralen ID übereinstimmt, wobei die Nutzlast oder die dto. Und wenn es ein Missverhältnis gibt, dann gibst du mir die Butteranfrage zurück. Okay, das ist also eine Methode, es zu tun, und ich rede nur durch, bevor ich es tatsächlich mache. Die andere wäre, dass das Detail die ID nicht haben muss, da die ID in der URL sein wird. Also erwarte ich, dass ich die URL mit der ID des Datensatzes übergebe, den Sie aktualisieren möchten. Und dann übergebst du mir einfach die aktualisierten Informationen und ich wende sie entsprechend an. Nun, das ist auch ein akzeptabler Stuhl genug Gedanken, sie sind beide akzeptabel. einmal, Kontextregeln. So werden sich einige von euch mit dem Doppelcheck wohler fühlen, indem sie die ID in der URL und im Körper haben. Und dann überprüfen Sie, und wenn sie nicht übereinstimmen, dann lehnt Ihr den Versuch ab. Manche Leute haben nichts dagegen, dass es einen Ort unterstreicht zusammen mit der Operation. Also werden wir den Ansatz nehmen, wo wir es haben einen Ort und nicht in der dto. diesem Grund konnte ich es. Verwenden Sie das create hotel dto. Aber dann würde das für mich irgendwie gegen die einzige Verantwortungsregel verstoßen , die ich irgendwie gefördert habe. Denn wenn Sie sagen, erstellen Sie Hotel De Jiao, es sagt jedem, der den Code liest, dass dies für die Schöpfung ist. Warum ist es im Update enthalten? Und jetzt haben Sie zwei Möglichkeiten. Auch hier könnten Sie dies entweder in etwas wie Upsert umbenennen, wo dieses Detail einen doppelten Zweck dient, unser Einfügen und Aktualisieren zu erstellen und zu aktualisieren, daher das Portmanteau upsert, richtig? Aber dann noch einmal hängt die einzige Verantwortung davon ab, wie streng Sie sein wollen. Sie könnten auch erkennen, dass Sie unterschiedliche Felder in den 2D-Abschlüssen haben könnten, weil das, was Sie für die Erstellung akzeptieren würden, Sie möglicherweise nicht all das für Potenzial davon verfügbar machen. Also willst du all diese Dinge in Betracht ziehen. Also, was ich tun würde, ist tatsächlich ein zweites Detail zu erstellen. Also habe ich ein anderes erstellt, ich nenne es Update Hotel VT0. In diesem Zusammenhang ist alles, was hier für die Kreation ist faires Spiel für Updates. Okay, also werde ich nicht weitermachen und überhaupt noch einen erschaffen. Ich habe nur geerbt. Also mache ich das nur wegen des Konzepts der einzigen Verantwortung, das ich im Sinn habe. Ich tue Assuan, um sicherzustellen, dass, wenn Sie Update Gesamt Detail sehen, Sie wissen, was es weit ist. Andernfalls möchten Sie wahrscheinlich nur spezifischer mit den Feldern sein , die Sie in der Aktualisierung dto verfügbar machen. Und wir haben schon gesehen, wo das bei einer gewissen Kontrolle helfen kann. Also werde ich einfach mit dieser Ebene der Vererbung fortfahren. Noch einmal, das liegt an dir. Und wir wollten nur sauberen Code schreiben und sicherstellen, dass er am Ende des Tages lesbar ist, oder? Also nehme ich die ID im Parameter und dann nehme ich die Felder für das Update im Hauptteil der Anfrage. Also werde ich mit meinen Validierungsprüfungen beginnen und wann ich sagen soll wenn nicht Modellstatus, dot gültig ist, wenn er nicht gültig ist, oder wenn der übergesendete ID-Wert kleiner als eins ist, meine ich, dass es mindestens eins sein sollte. Schreiben Sie es, um 0 zu sein, sind negativ. In beiden Situationen möchte ich nur Batterieanfragen protokollieren und zurückgeben, dass etwas mit Ihrem Versuch nicht stimmt. Ordnung? Und dann können wir zu unserem Versuch weitermachen und fangen. Und dann wissen wir, dass wir für den Kinderbereich den Fehler protokollieren und den Status 500 zurückgeben werden. Okay, also lasst uns sehen, was wir versuchen werden. Um es zu versuchen, brauche ich den ursprünglichen Datensatz, der aktualisiert werden muss. Also, was ich tun muss, ist tatsächlich speichern var Hotel gleich Einheit 04, Tomatoes dot, holen Sie mich. Direct Cards, setzt meinen Filter ein, wo die ID der ID entspricht, die durch den Parameter eingeht, oder? Dann kann ich noch einen Scheck machen. Ich kann sehen, ob Hotel gleich null ist. Also hätte ich keine Suche machen können. Vielleicht, dass Boston, die ID zehn unser Leben, sechs Hotels und ein Pass in zehn mit etwas zu aktualisieren. Ich werde versuchen, es zu finden, aber ich muss sicherstellen, dass ich es richtig fand. Dann würde ich es wahrscheinlich. Bud Anfragen. Also lassen Sie uns sagen, ich mache das Gleiche hier, aber in der Butterquest-Abteilung. Und wir werden sehen, eingereicht getan ist ungültig. Ordnung, also gibt es keinen Modellstatus, also etwas außerhalb des Datensatzes mit dieser ID Xist nicht. Und Sie könnten sogar nur die Einheit der Arbeit erweitern, um das Existente zu tun. Aber was ich tue, ist, es nur einmal zu bekommen. Wenn es null ist, dann beenden wir es. Wenn es jedoch nicht null ist, dann können wir voran gehen und versuchen, unseren Teil zu tun. Jetzt werde ich schnell das Werkzeug gleichzusetzen wäre, den Mapper Dot Mob zu verwenden. Und dann kann ich an dieser Stelle sehen, was die Quelle ist, so die Quellserie Hotel. Und dann werde ich sagen, ich will, dass es normal ist, sorry, die Quelle wäre das Wasser dto. Meine Entschuldigung. Ein Hotel dto ist also die neue Quelle, weil das Hotel dto die neuesten Informationen hat. Und dann werde ich das Hotel auf der rechten Seite sehen. Wenn wir also diese Mapper-Überladung betrachten, braucht es zwei Dinge, die Quelle und ein Ziel. Und dann, was es tun wird, ist einfach zu wischen, was in der Quelle ist , um das bestehende Ziel. Also effektiv haben wir nur gesagt, was auch immer darin ist, setzen Sie es in, dass, wenn es zwei Felder gibt, die nicht gleich sind, dann aktualisieren Sie bitte das alles mit den Feldern, die aus dem Detail kommen, richtig? Und dann können wir wissen, Einheit 04 zu sehen. Kein Problem ist, dass wir kein Tracking durchgeführt haben. Wenn wir also Trucks machen, hätten wir einfach sagen können, Boote retten. Wir transportieren keine Sachen, um Updates zu sehen. Und dann im Hotel vorbei. Richtig? Und dann sind wir, weißt du, es sind alles vier. Also nur eine zusätzliche Codezeile, nicht zu schlecht. Also die Sache ist, ich erinnere mich, dass ich erklärt wurde, dass mit der Update-Methode, was wir getan haben, zu sehen, bitte achten Sie auf alle Entitäten hier, berühren Sie es und ändern Sie seinen Zustand, um es zu ändern, so dass es ein modifiziertes ist. Also, wenn wir speichern, wird es irgendwie im Register gespeichert oder aktualisiert werden, oder? Wenn wir nicht r hätten, hätten wir das Tracking optional gemacht, dann hätten wir nicht diesen zusätzlichen Schritt machen müssen, um Updates zu sagen. Wir hätten gerade die Änderung vornehmen können und sehen, ob die weil Trucking tatsächlich standardmäßig ist. Also erkläre ich nur dieses kleine bisschen auch, weil ich es nicht erwähnt habe. Also lassen Sie uns, nachdem wir speichern, können wir null Inhalt zurückgeben. Also ein alter Inhalt scheint wie eine Butter gelten, aber es ist wirklich ein Werkzeug, für das etwas in 200 ist, was gut ist, oder? Also das ist gut, weil ich dir nichts sagen will, okay, du hast ein Update geschickt. Ok, es gibt nichts mehr zu tun. Du bist gut zu gehen, oder? Das ist also, was der keine Inhalte wirklich weit ist. also zu dem zurückkommen, den wir es gelehrt haben, sagen sie allen vier Status. Lassen Sie uns das testen. Also, nur um Ihre Aufmerksamkeit auf das zu lenken, was Swagger tut, werden Sie sehen, dass jeder Typ schön farblich codiert ist. Also, wenn das Wort nicht genug war, dann sehen Sie, dass der Farbcode gesetzt ist schön dort angegeben. Und da ist unser Dto mit den Feldern, und es erwartet einen ID-Wert in den Parametern. Okay, also lasst uns Postbote benutzen. Und ich werde bis zur letzten Summe gehen, die wir geschaffen haben. Das war also unser erfolgreicher Post-Versuch und wir haben es zurückbekommen. Der ID-Wert ist also sechs. Also werde ich sagen, Put ist mein Verb und ich übergebe sucht als ID-Wert, und dann werde ich ein Komma setzen. Das war falsch geschrieben. Es ist eine winzige Veränderung sie, aber wie wir sehen werden, das Komma Underwriting nicht wirklich fünf, aber es ist 4.84 Mondpiloten Jamaika Grand Resort. Und während die Länder Jamaika. Lasst uns das also lassen. Also lasst uns voran gehen und senden und sehen, was passiert. Richtig. Methode ist nicht zulässig. Und oh, ich glaube, ich weiß, warum wir nicht auf die Parameter allein Antwort auf den Hafen gesetzt haben. die gleiche Weise, wie wir dies auf dem HTTP GET haben, nachdem Sie auf dem Put angegeben haben, dass es diesen Parameter nehmen sollte. Also war das Geschäft damit. Und versuchen wir es noch einmal. Also Buckskin Postman, ich denke, das sollte den 401 bekommen, diesen Dimer. Das ist besser. Die nicht erlaubte 405-Methode bedeutet also, dass entweder Sie etwas falsch mit ihrer Anfrage haben oder Ihr Endpunkt zu viel repariert werden muss. Halter Quest sollte aussehen. Also weiß nur, dass es das ist, worauf wir stoßen. Wir hatten die Anfrage richtig, aber dann fehlte der Endpunkt. Gut, also ist es gut, diese kleinen Dinge auf dem Weg zu sehen , damit Sie, wenn sie passieren, die Kontrolle über die Situation übernehmen können. Also, was wir tun müssen, ist ein Tolkien zu bekommen. Und ich glaube, ich habe immer noch meine Benutzeranfrage hier drüben. So ist es wirklich cool mit beiden Geld kann immer zurück und erhalten vorherige Anfragen. Also lass mich einfach mein Tolkien schnappen, komm hierher zurück, füge es dem Autorisierungs-Header und versuche es dann noch einmal. Und es trifft meine sitzt einen Haltepunkt dort. In Ordnung, also lasst uns weitermachen. Und da ist es Werkzeug für keinen Inhalt, so dass es erfolgreich die Anfragen verarbeitet hat. Was gibt keine Inhalte zurück? Nun, kein Inhalt, aber noch einmal, ein Werkzeug für ist ein guter Rückgabetyp. Also lasst uns jetzt zu unserem vorherigen Git gehen und sehen, was passiert. Ein Tolkien. Also lass mich einfach voran gehen und dieses Tolkien hierher bringen und das Get machen. Und dann werden wir sehen, es gibt R Komma und es gibt 18 Chance für 4.8. Soweit es uns betrifft, funktioniert das Putt? Nein, nur auf dem aufbauen, was setzen tut und nicht. Tun Sie. Siehst du, ob du etwas vermisst? Mal sehen. Sie haben einige Felder, die nicht erforderlich sind. In Ordnung? Richtig. Nein, es ist schwer zu testen, was ich vorangehen werde und das Dto modifizieren werde. Also lassen Sie mich gehen, um Bedürfnisse Sie zu erstellen, und ich werde sagen, dass das Adressfeld nicht erforderlich ist. Ordnung. Ich ging, um neu zu starten. Also warum dieser Neustart und lassen Sie mich einfach erklären, was tragbar zu tun ist. Der Put wird immer die Daten ersetzen. Das einzige, was es tut, ist, dass es die ID ziemlich richtig ersetzt? Jedes Mal, wenn Sie einen Putt machen, müssen Sie sich bewusst sein, dass, was auch immer Daten vorhanden sind, es verwenden wird, um sie zu ersetzen, sagen wir, wenn ich keine Adresse zur Verfügung stelle, sagen wir, um all diese Nutzlast zu adressieren, Es ist nicht mehr erforderlich. Ich gebe keine Adresse an. Was mache ich den Putt, den ich mache, oder? Gleiches Hotel und ich mache das Update, das ich sende. Okay, also bekomme ich ein Tool ohne Inhalt, aber sieh dir an, was mit meinen Daten passiert. Also beachten Sie, dass wir nicht adressierte Volumen hatten. Keine Adresse ist null, sagen wir die Hälfte. Um vorsichtig zu sein, wenn Sie diese Art von Objekten verwenden , sind zumindest zu setzen, weil es es immer wird, um es durch die Daten zu ersetzen, die er bekommen hat. Es liegt also an Ihnen, sicherzustellen, dass Ihre Validierungen die Datenqualität darstellen, die Sie wirklich von Ihrer Client-Anwendung wünschen, unabhängig davon, ob Sie eine Anlage bauen oder es sich um einen Drittanbieter handelt, der den Client erstellt. Die API gehört Ihnen und Sie müssen diesen Standard setzen, weil es nicht erforderlich ist, lade ich einen Nullwert, um dort zu sein. Wissen Sie noch einmal, das könnte gut oder schlecht sein, basierend auf Ihrer Situation, aber so wird der Einsatz funktionieren. Also werde ich Ihre Netzhaut ermutigen, anzuhalten, den Put-Endpunkt für den Controller des Landes zu replizieren. Und dann werden wir uns etwas anderes ansehen, wie es braucht, um den Einsatz und wie wir ein bisschen mehr Bedürfnisse des Januars allein jetzt eingeben können. In Ordnung. Also sind wir zurück und ich hoffe, Sie haben angehalten und es selbst versucht, aber ich habe bereits das aktualisierte Land gemacht und ich werde Sie einfach schnell durch. Hier ist nichts, das ist alles. Im Vergleich zu den Hotels ist es ungewöhnlich. Alles ist ziemlich Standard. Wir haben die Schaffung gegenteiliger Details, die ich aktualisieren muss. Da gehen wir. Es ist gut, dass ich diese Rezension mache. Okay, also aktualisieren wir Widerspruch, um Ihnen zu widersprechen. Und alles andere sieht genauso aus. Nein. Eine Sache, die ich mit dem Update widersprechen Sie darauf hinweisen möchte , ist, dass ich diese Eigenschaft, die eine Liste von Hotels ist, aufgenommen habe. Okay, also ja, wohl könnte ich es hier setzen und es dann von diesem entfernen und dann das Land von der Aktualisierung erben lassen , widersprechen, um all diese und die Liste zu sensibilisieren. Das würde also alles bekommen. könntest du tun. Aber dann ist dies nur die Fahrt nach Hause der Punkt, dass Sie wirklich wollen, um Ihre Details so einzigartig wie möglich zu halten. Denn dann, wissen Sie, Sie können geteilt haben fühlt sich Ufer, aber dann können Sie einzigartige Felder auch auf dem Weg haben. Nun ist die Relevanz dieser Liste von Hotels ist, dass ich tatsächlich meine Put verwenden, um zu aktualisieren, begleiten und fügen Sie auch neue Hotels sind verwandte Hotels, weil denken Sie daran, dass Hotels, Dies bedeutet, dass ein Land hat eine Liste von Hotels, richtig? Man kontrastiert viele Hotels, weshalb wir sie hier nach Liste referenzieren können. Okay, also lasst uns untersuchen, wie das aussehen würde. Wenn ich also zu meiner Swagger-Dokumentation gehe und dann die potenzielle Nutzlast ansehe , sehen Sie hier, wo sie mir zeigen, dass ich den Namen, den Kurznamen und dann eine Reihe von Hotels eintragen kann . Und dann kann ich Details für das Hotel eintragen. Und natürlich hat das Hotel, aber dann werden Details für das Land. Und das meinten sie wirklich, als sie sagten, es könnte zyklisch werden, weil es nur eine große Sache nach dem anderen ist, nach dem anderen. Aber wir werden das ausprobieren. Wir legen ein neues Hotel ein. Es tut uns leid, ein neues Land mit neuen Hotels. Also werde ich nur diese post-sekundäre Clique duplizieren, sagen Duplicate tab, da ich es bereits dort habe. Bevor ich das mache, lassen Sie mich alle Länder sehen, die ich betreffe. Ich habe keine Tests mit dem Land. Also lassen Sie mich alle meine Länder holen, damit ich meine Optionen sehen kann. Also habe ich Jamaika, Bahamas und Cayman Islands und sehe, ob wir Cayman Islands wegen Cayman Island aktualisieren müssen, es sollte Island Zoo Kosmetik sein, aber lassen Sie uns weitermachen und das aktualisieren. Also lasse ich mich einfach meine Haltung holen. Also werde ich die Nutzlast von der Probe nehmen sind von unserem Swagger. Und dann tut es dem Land leid, die ID des Landes, dass ich es will. Ich versuche nur zu finden, wo die bewusste ID drei ist. Der Name wird also Kaimaninseln sein. Der Con, der Endpunkt wäre Land Schrägstrich drei. Okay, der Kurzname ist immer noch CI. Also noch einmal, müssen Sie den Wert angeben, den Sie erwarten, dass sie danach haben. In Ordnung. Und dann werde ich in den Hotelbereich gehen, alles entfernen, was ich wirklich nicht will. Okay, wie fast alle Tatsache, lassen Sie mich zum Detail zurückgehen. Ich habe gerade bemerkt, dass ich hier altes Hotel dto auflisten, also habe ich nicht gesagt, was Materialien konsolidieren könnte, ist ein guter Grund, dass ich nicht konsolidieren werde. Ich sagte, Hotel dto. Hotel dto legt dann die ID ein. Aber wenn ich eine Insert aktualisiere Cayman Islands, während ich ein neues Hotel automatisch einfügen möchte, was bedeutet, dass ich den ID-Wert nicht brauche. Also ist dieses Detail tatsächlich falsch. Was ich hier haben sollte, ist kreieren. Hotel VT0, was eine bessere Darstellung der Daten ist, die ich erheben möchte. Und das würde auch loswerden der Überschuss fühlt sich wie das Land und die erweiterte Liste der Fotos. Also lasst uns das noch mal versuchen. Ordnung, also jetzt, wenn ich in Swagger schaue und ich mir das Schema ansehe, das viel besser aussieht. So können Sie sehen, Details sind sehr wichtig. Was benötigen Sie von Ihrem Benutzer? Stellt sicher, dass Sie nur das enthüllen. Also werde ich diese korrigierte Nutzlast nehmen, zurück zu Postman und das wird viel weniger verwirrend für mich sein, richtig? Also lasst uns das noch einmal versuchen. Das werden Kaimaninseln mit i Hauptstadt I sein, richtig? Der kurze Name ist immer noch CI Ich muss das zur Verfügung stellen. Und dann in der Hotel-Bereich, Ich kann tatsächlich alle Hotels sind Objekte des Hotels. Diese eckige Klammer bedeutet also Fläche. Dann kapselt die geschweifte Klammer alle Objekteigenschaften, als ich Komma sagen kann und zweites OSU-Komma auflisten und sie weiterhin einfügen kann, richtig? Also hier werde ich das Ritz-Carlton und seine Adressen setzen, Grand Cayman, es hat eine Bewertung von 4,5 und nicht auf dem lokalen Hotel. Also diese sind tatsächlich halten die in Grand Kim und er kann, wenn Sie das überprüfen möchten, aber ich werde nicht die Container-ID angeben. Okay, also werde ich die Clincher-ID entfernen, aber dann habe ich sie wie nötig, also werde ich sie in der Nutzlast entfernen. Und was ich tun werde, ist mir die Änderung im Code selbst für das dto. Lassen Sie uns einfach dorthin gehen und machen es nicht erforderlich, diese nur für dieses Experiment. Und lassen Sie uns das versuchen. So ändern Mitte würde die Liste der Fotos haben. Sie beziehen sich im Moment auf kein Land. Allerdings sind sie unter der Nutzlast des Landes, wo die gegenteiligen Ideen drei, so lassen Sie uns senden. Und ich bekomme ein Werkzeug ohne Inhalt. Also lass mich gehen und nachsehen. Also lassen Sie mich die Liste der Hotels und die sehen, was Kim Bug. Na gut, los geht's. So haben wir das lokale Hotel zurück mit einem idealen Sullivan und dem Ritz-Carlton kommen mit einem Ausweis von acht zurück. Und beide sind Teile von Land drei sind Schlüssel im Kopf. So sehen Sie, so können Sie tatsächlich den Putt verwenden. Also gesagt, wir werden sehen, existiert dieses Ding? Wenn nicht, werde ich es schaffen. Und der einzige Weg, wie er weiß, dass es existiert, ist, wenn der ID-Wert bereitgestellt wird. Also, wenn es keinen ID-Wert gibt, wird sagen, dass dies keine ID hat. Also werde ich voran gehen und es erschaffen. Aufgrund unserer Einschränkungen, die wir auf unseren Endpunkt setzen, erlauben wir den Leuten nicht, einfach den Put zu verwenden, um zu erstellen weil wir überprüfen, ob ein ID-Wert vorhanden sein muss, ein vernünftiger ID-Wert vorhanden sein muss, bevor wir uns bewegen auf. Das sind also die beiden Einschränkungen, die Sie verwenden können um sicherzustellen, dass der Put funktioniert, wie Sie es wünschen , für wen auch immer es globale Operation ist sehr vielseitig. 34. DELETE Endpoint gestalten: Willkommen zurück Jungs. In dieser Lektion werden wir untersuchen, wie wir Daten über unsere API löschen. Also habe ich diese Aktion bereits erstellt. Wenn Sie erneut möchten, pausieren Sie und aktivieren Sie. Also gebe ich Ihnen eine Sneak-Vorschau hat immer noch, wie es aussehen muss, zumindest anfangs ist das Verb HTTP delete. Wir müssen es wissen lassen, dass es einige Parameter in Form von Ideen und Integer erwarten sollte , die wir es autorisieren. Dies ist eine andere, die Sie wahrscheinlich eine Rolle für den Administrator erzwingen möchten , da wir löschen. Andernfalls können Sie es einfach als autorisieren lassen. Und wir wissen, dass die Antwortcodes hier 4024500 sein würden. So können Sie pausieren und versuchen, und dann können wir Notizen vergleichen. Also, was ich in diesem Delete Hotel Axon habe , ist eine Validierung, um sicherzustellen, dass der ID-Wert Sinn macht. Das ist die Nummer eins. Also tun wir das und dann haben wir abgelehnt macht eine Batterieanforderung. Wenn es keinen Sinn ergibt, dann versuche ich, seine Kunst beim Loggen zu fangen und uns Statuscode zurückzugeben, sorry, von 500. Aber wenn es versucht, den Betrieb zu betreiben, versucht es das Hotel mit der ID, die übergeben wurde, erneut. Wir überprüfen, ob das Hotel existiert. Ansonsten sehen wir wieder eine schlechte Anfrage und protokollieren den Fehler. Andernfalls löschen wir das Hotel und speichern unsere Änderungen geben dann keine Inhalte zurück. Sie sehen also, dass es nicht wirklich viel war, das Hotel zu löschen. Das Gleiche gilt also für das Land. Es ist ziemlich die gleiche Methode haben wir das Löschland, wir haben den gleichen Status ist, wenn Sie die gleichen Berechtigungen entsprechend erweitern möchten. Und wir gehen durch, wir bekommen die ID, wir überprüfen, ob das Volumen Sinn macht. Und dann versuchen wir die Operation, das Land zu bekommen und zu bestätigen, dass es sich nicht um eine gefälschte Nummer handelt. Und dann geht es weiter und löscht es, wenn er so weit kommt, geben wir einen Nullinhalt von zwei oder vier zurück. Was wir also tun wollen, ist zu testen, ein Hotel zu löschen oder einen Vertrag zu löschen. Und Sie werden sehen, warum ich die Betonung auf diese beiden Tests lege. Mit der Einführung des Löschendpunkts wird Fußball ein bisschen mehr Spule voll. Hier wird das Löschen angezeigt, das hier heraufgestuft wird Und was wir tun werden, ist Postbote zu benutzen und versuchen, unsere Löschung zu versuchen. Sie haben also den Endpunkt. Wissen Sie, wir brauchen das ID-Volume in der URL. Wir werden unser Verb als Löschen wählen. In Ordnung? Und was ich tun werde, ist ein Foto zu wählen, das ich wirklich nicht will, oder? Also denke ich, dieser hier war nur ein zufälliger Test. Sie sehen, dass es immer noch string sagt, string hat gerade geführt, die Standardwerte sind im Payload-Beispiel vorhanden. Also werde ich das Hotel mit der ID Nummer fünf löschen. Also in meinem Löschvorgang. Anfrage, die ich in den URL-Schrägstrich x5 einfügen und dann senden. Natürlich muss ich es genehmigen. Also lassen Sie mich ein wenig zurückverfolgen und Trend bringen Tolkien ihr Ziel. Okay, hier ist ein Tolkien. Schnappen Sie sich den Vortrag und John Pullover, Autorisierung Träger Token. Da gehen wir. Und wir bekommen unsere keine Inhalte. Wenn ich also auf die Liste zurückschaue, sollte ich das Hotel nicht mit ID fünf sehen. Da ist es. Es geht vier und sechs. Also fünf sind weg. Jetzt ist das Loch. Wir würden ein Hotel löschen. Nein, die Sache mit den Ländern, in denen das Land Hotels hat. Es ist also etwas riskanter, wenn wir ein Land löschen , das wir tatsächlich auch die Hotels entfernen müssen. Mal sehen, wie das aussieht. Also werde ich „Land“ sagen. Und im Rückblick sehe ich, dass wir in Cayman V1 in Bahamas haben müssen. Also lasst uns versuchen, das Gegenteil von Bahamas zu löschen. Es hat nur ein Hotel, also werden wir nur, durch das Bulletin ein Opfer von Punkt E1 oder E2 gemacht. Wir können es später immer zusammenfassen. Also, was ich tun werde, ist Land mit der ID3 zu sehen und hier rüber zu gehen. Stellen Sie das da hin. In Ordnung, ich würde e3 und dann schicken. Und wir sehen, wo immer eine keine zufriedene Seele. Wenn ich mir die Liste der Länder anschaue, die wir uns die Liste der Länder ansehen sollten, die ich nicht sehen sollte. Oh, ich habe k-Moll gelöscht. Das ist in Ordnung. Also brauchte ich nicht, dass Kamen, also werden wir NF2 Länder 12, Ich dachte Haus löschen Bahamas, Entschuldigung. Das bedeutet also, dass keines der Hotels, die ID-Wert drei haben , da sein sollte, so dass wir senden, und da ist es. Also haben wir einen Vertrag mit der ID ein Land mit ID zwei, Land mit id1, eins, et cetera. Kein Land mit ID3 bleibt übrig. Und das liegt daran, in unserer Migration, als wir die Datenbank erstellt haben. So können Sie zur ersten Migrationsdatei gehen, ich nenne es die erstellte Datenbank. Sie werden in der Konfiguration sehen, dass die Einschränkung für den Fremdschlüssel war, dass es die referenzierende Auktion Punkt Kaskade. Also Kaskade bedeutet, dass, wenn Sie eine Änderung am Elternteil, dh Land, Boden, Sie haben im Gegensatz zu Eltern und Hotels sind genug bewusst. Da sind die Kinder bei Wachen. Wenn Sie irgendwelche Änderungen an der gegenteiligen Vereinbarung vornehmen, würde es auf das Hotel geschleudert. In diesem Fall sind die Gene, die wir herstellen, dass wir den erforderlichen Elternteil löschen. Also beim Löschen möchte ich kaskadieren, was bedeutet, was immer Sie mit dem Elternteil tun, diese Aktion im gesamten Kind replizieren. Das kann also tatsächlich geändert werden. Nun, dann müssten Sie die Änderung in der Kontextdatei erfüllen und dann eine weitere Migration ausführen , damit sie wissen kann, dass Sie Auktionskunst kennen oder einschränken möchten. Das bedeutet. Und ich schränke normalerweise ein, denn wenn es untergeordnete Datensätze gibt, möchte ich die Eltern nicht löschen. Das heißt, wenn es sich um Hotels handelt, die mit diesem Land verbunden sind, können Sie nicht löschen. Das Land schränkt Holz nicht ein. Schreiben Sie jedoch Notizen auf Cascade, und wie Sie sehen, wenn Sie diesen Peer in Record machen, wird es über alle Hotels kaskadieren. Also musst du vorsichtig damit sein. Stellen Sie sicher, dass, wenn diese Konfiguration in Ihrer API abgerufen wird, es absichtlich ist, so dass Sie es funktionieren möchten. Aber das ist etwas, das zu massiven Datenverlust führen kann, wenn es ungebunden ist . 35. Änderungen in GitHub überprüfen und hinzufügen: Okay, Leute, wir sind wieder einmal, das ist ein weiterer Meilenstein, während wir tun werden, ist unsere Veränderungen zu schütteln. Also haben wir alle fehlenden Endpunkte für den Beitrag PUT hinzugefügt und Anfragen für Hotels und Länder gelöscht. Und die Konzepte, die Sie auf dem Weg gelernt haben, können auch so oft angewendet werden , wie Sie sie benötigen, so viele Endpunkte, wie Sie erleichtern müssen, können Sie sie auch anwenden. Also gehen wir einfach voran und gehen, um Änderungen zu erhalten, fügen Sie unsere Nachricht hinzu. Und dann, was ich tun werde, ist, alles zu begehen und zu sinken. Und wenn das abgeschlossen ist, dann können Sie für das nächste Abenteuer bleiben. 36. Value – Abschnitt Übersicht: He, Jungs. Wir beginnen also einen neuen Abschnitt unserer API-Entwicklung. Und wirklich tatsächlich ist dies nur eine Kugel Mehrwert Funktionen. Wir haben ziemlich viel Arbeit geleistet. Wir haben bereits eine funktionierende API mit einer netten, sauberen Architektur, die leicht erweitert werden kann. Allerdings gibt es bestimmte Dinge, die wir nutzen wollen, wenn es darum geht, den Kern zu dominieren. Und diese Funktionen sind, diese Zertifikate ermöglichen es uns, einige der wiederholten Code zu reduzieren , die wir während unserer Anwendung haben. Also sagen wir zum Beispiel, eins, wir wiederholen weiter, versuchen, fangen. Jedes Mal, wenn wir eine Operation machen, haben wir das Trike noch, also werden wir nach Code suchen, um das zu reduzieren und Pfeile global zu behandeln. Da wir wirklich das gleiche tun fast jedes Mal, alle Dinge würden betrachten, wird es sein, unsere Notwendigkeit für die Überprüfung bestimmter, tun bestimmte Kontrollen, bevor wir eine Operation abgeschlossen zu reduzieren . In-Action-Filter setzen also auch Mechanismen ein, um den Abruf bei der Verarbeitung von Daten wie Caching, Paging zu beschleunigen. Also werden wir uns all diese Dinge ansehen und beginnen mit der Implementierung von Paging. Also bleib dran. 37. Paging implementieren: In Ordnung, also lasst uns in dieser Lektion auf das Paging schauen. NULL. Eine kleine Beule stöhnte uns zu Fuß Paging ist, und warum wir es brauchen. Paging spricht von beiden Segmentierung der Daten, die zurückgegeben werden. Im Moment machen wir also eine BigQuery, die alle Werte in einer bestimmten Tabelle auf einmal erhält. Und zwar kann es gut aussehen, weil wir nur drei Länder und fünf Hotels haben. Wenn Sie diese API für die internationale Nutzung bereitstellen. Und Sie speichern Hotels in 200 Ländern auf der ganzen Welt, Sie werden erkennen, dass Ihre Daten exponentiell wachsen werden. Und dann müssen Sie auf jeden Fall einen Prädiktor selbst auf Ihrem System vor zu vielen Anfragen und der Belastung , so viele Daten auf einmal für potenziell viele Clients zu liefern, sowie die Clients davor zu schützen, sich zu entwickeln Möglichkeiten, die Daten intern zu segmentieren, da sie zu viel auf einmal bekommen. Paging ist also eine nette, effektive und effiziente Möglichkeit, die Daten zu segmentieren, so dass der Client sehen kann, ich möchte so viele Datensätze. Und dann kehren wir einfach nach dem zurück, was sie wollten. Es begann mit Boltzmann auf dem Bildschirm, denn was wir von unserem Kunden wollen ist, dass sie, wenn sie diesen Service-Aufruf tätigen, Parameter übergeben würden, um so etwas wie die Seitengröße zu sagen, die sie wollen. Also Seite sagt würde bedeuten, wie viele Datensätze. Sagen wir mal, sie sagen zehn. Und dann würden sie sagen und ich würde gerne die Seitenzahl. Das ist also eine Seitenzahl. Also kann ich entweder eingeben, die Link-Bestellungen vorgeben, legen Sie es hier in den params Chanzeaux Seitenzahl gleich so etwas wie ein oder zwei sein würde. Also müssen wir Implementierungscode wissen, um zu sagen, dass, wenn sie nach einer Seitengröße von zehn fragen, das bedeutet, dass sie zehn Datensätze wollten. Was sie nach Seite 3 fragen oder etwas, das nicht Seite eins ist. Das bedeutet, dass es die benötigten 30 bis zum erforderlichen 40. Richtig. So etwas. Damit wir, wenn sie zu dieser Zeit zehn Hotels auf ihren Doktoranden anzeigen, wenn sie auf die nächste Seite gehen, auf der nächsten Seite, würden sie dies einfach erhöhen und sie wissen nicht, dass wir 40 bis 50 bekommen, dann 50 zu 60 usw. Wenn wir also 500 Hotels haben, würde irgendwann jemand alle 500 bekommen, würden sie keine Brocken von 50 bekommen oder was auch immer sie verlangen. Natürlich können wir das Maximum begrenzen. Also, was wir tun müssen, ist beginnen, indem wir ein neues Modell erstellen, jemand, der diese Modellanfrage aufruft. Params ist nur eine Klasse und es wird nur ein Modell oder Futter sein. Die Einschränkungen sind die Parameternamen, die es eine Menge Leidenschaft gibt, oder? Also, bevor ich etwas tue, wollte ich initiieren oder erklären maximale Pizza ist von 50, so dass niemand mehr als 50 Datensätze zu der Zeit anfordern kann. Natürlich ist das meins oder deins. Also, wenn Sie es auf zehn beschränken möchten, möchten Sie auf eine 100 öffnen. Das liegt ganz an dir. Tun Sie, was am besten für Ihr System ist. Also setzen wir das auf 50, schreiben null. Und dann haben wir eine andere Eigenschaft, die wir nennen es Seitenzahl. Und noch eine, diese hier ist privat, die wir nennen es schlägt Seiten. In Ordnung, also die, diese sind nur Standard. Also sehe ich, dass die Standardseitennummerierung Fall Nano angegeben wurde. Die Standardseitenzahl ist eins und die Standardseitengröße ist zehn, oder? Aber dann werde ich die Seitengröße der öffentlichen Version der Seitengröße machen, wo ich manuell git sagen werde. Und hier werde ich Unterstrich Seitengröße zurückgeben. Aber dann können wir auch den Wert für die Seitengröße gleich setzen. Und ich wollte sagen, dass das Volumen größer als die maximale Gebotsgröße ist. Das ist also eine Frage. Ich würde nur einen ternären Operator verwenden, um zu sehen, ob er größer als die maximale Gebotsgröße ist, dann senden wir die Perlengröße. Deshalb würde ich es brauchen, richtig. Also, wenn sie mehr als zehn, mehr als 50 Datensätze angefordert haben, so ist der Standard zehn, oder? Dort, forderte mehr als 50, dann schicken wir einfach 50 zurück. Andernfalls senden wir Werte. Also Wert hier ist ein Schlüsselwort, wie Sie sehen, in blau markiert, genau wie es für die Rückkehr ist. Also Wert wäre, welcher Wert auch immer hier sitzt. In Ordnung, also hier haben wir nur einen Standard, der unsere Initialisierung auf eins gesetzt wird. Es gibt also keine wirklichen Einschränkungen, weil wir nicht wissen, auf welcher Seite sie sind. Jedoch, oder was diese, wo sehen immer die Periodengröße zurück. Wenn Sie also die Rückkehr erhalten, ist das, wenn Sie es sitzen, wenn die angeforderte Seitengröße größer als 50 ist oder welchen Wert Sie dort setzen, dann geben wir dieses Maximum zurück. Andernfalls können wir voran gehen und diesen Wert zurückgeben. Jetzt möchte ich das nächste, was ich tun möchte, ist, den Controller zu ändern. Also an diesem Punkt werde ich einfach ändern, um Bewusstsein zu bekommen, weil der Kerl sagte, dass ich das keinen Punkt will. Jemand, der in der Lage ist, alle Aufzeichnungen auf einmal zu bekommen, das wäre problematisch für meine Hilfe. Also, was ich tun werde, ist zu ändern, Länder zu holen. Also dieser Endpunkt ist nicht mehr bekommen alle Länder. Was jetzt werden wir von Query sehen. Wirst du also die Eingabe hier aus dem Körper sehen? Ich glaube, wenn wir den Posten machen, würdest du von der Leiche sehen. Damit Anfragen die Daten im Körper haben, richtig? Also hätten wir das getan. Lassen Sie mich sehen, ob ich solche mit der Leiche finden kann. Da gehen wir. Also, das ist der von Körper, den es von dem, wer auch immer von der Abfrage nimmt. Wir werden innerhalb der Abfragezeichenfolge suchen, die für die Parameter möglich ist. Deshalb habe ich es genannt, um Piraten zu verlangen, sind Parameter, oder? Also von Params, wo nach Feldern gesucht werden, die den Namen entsprechen, wie in unserem RequestModel beschrieben. Okay, also ist es die gleiche Art von Konzept wie die Dto Schreibanfragen Schusswaffen. Also werde ich nur diese Anfragen Feuerwaffen Values Award params nennen, das ist ein Schlüsselwort. Also nirgends auf der Suche nach unserer Abfrage. Abfragezeichenfolge, leider, dass wir in Feldern für die Gebotsgröße und die Seitenzahl haben. Die nächste Entwicklung wird also die Weitergabe dieser Informationen beinhalten. Erhalten Sie nicht alle Befehle. Also denken Sie daran, dass in unseren Einheiten Gabel oder Gitarre Sie sehen, oh, geben Sie einfach alles zurück, richtig? Also, was ich tun werde, ist, die Abfrageparameter nicht zu den Aussteigen zu pausieren und natürlich wird das eine Überschreibung erfordern. In Ordnung. Ich will den Ursprung nicht loswerden. Ich werde es vielleicht irgendeinen Zweck dienen, sonst. Also werde ich nur noch einen erschaffen, oder? Also gehen wir zurück zu unserer Einheit 04 Einheiten über Art des generischen Repositorys und wir haben alles, wie es ist. Also, was ich tun werde, ist eine brandneue Deklaration zu erstellen. Ich merke, dass ich diesen neuen Datentyp hier habe ich ph-Liste. Sie werden mehr darüber in einem Treibstoff sehen. Also habe ich Aufgabe bekommt alles und ich bekomme nur die Includes sowie die Anforderungsparameter. Also werde ich ihnen nicht einmal erlauben, die Filterung und all das Zeug zu machen , weil wir nicht wirklich daran interessiert sind, was wir jetzt alle bekommen, aber wir wollen die PGA erleichtern. Lassen Sie mich also einfach voran gehen und einschließen was ich einschließen kann, wer auch immer diesen Datentyp deklariert hat, damit wir das in Ruhe lassen können. Und da das die Schnittstelle kennt, muss ich das generische Repository aktualisieren, damit er es implementieren kann. Also, jetzt, wo es da ist, welchen Akkord setze ich ein? Also lesen Sie Andrew, dass sie alles tun, was ich hier mache. Nun, vielleicht nicht jede einzelne Sache, weil abnormal OrderBy, aber ich werde nur diesen Code nehmen, einfügen, nicht hören und die Rückkehr. Okay, also werde ich nur langsam gehen, damit wir genau sehen können, was passiert. Es gibt also keinen Ausdruck. Ich kann den ganzen Ausdruck nehmen. Wir haben Einrichtungen für die Include, aber wir haben keine Bestellung BY, also werde ich diese Notizen machen. Ich weiß, was ich hinzufügen muss, ist eine Möglichkeit, unseren Peak genau das zu filtern , was ich von der Abfrage will, weil dies immer noch alles zurückgibt. An diesem Punkt werde ich mich einfach um diesen Fehler kümmern, der die IP-Edge-Liste ist. Und wenn man sich die Vorschläge anschaut, ist die Bibliothek, die ich will, nicht da. Also werde ich zu New get gehen und ihr Geld holen oder diese. So verwalten Sie neue AND GET-Pakete. Gautam Bezirke. Und dann werde ich nach Eiern Punkt Auslagerungslisten suchen. Dies ist also eine sehr prominente Bibliothek, die beim Paging hilft. Also sagen wir einfach Expansionist, MVC-Kern. Installieren Sie das und wissen Sie, dass es installiert ist. Wir können zurückgehen und versuchen, uns um diese Fehler zu kümmern. Das ist also generisches Repository. Nein, ich kann sagen, X-Pot-Seitenlisten zu verwenden, also gehe ich voran und mache das. Das ist also sehr möglich, das Geschäft zu machen. Aber warum tun Sie das dann, wenn es eine Bibliothek gibt, richtig? Also geh zum Generikum. Lassen Sie uns alle fehlenden Referenzen einschließen. Okay, und dann ist das coole Ding, dass nicht hören, es beschwert sich, weil wir IP haben ist, dass dies Tab zurückkehrt oder tut, um hier aufzulisten. Also ich Seite Liste gibt uns Erweiterungsfunktion, die uns zu sagen, Seitenliste ist sinken erlaubt. Und dann wird die zweiseitige Nist zwei Parameter annehmen. Es will eine Seitenzahl und die Seitengröße. Woher werden wir das von unseren Anfrageparams bekommen, okay, also bin ich eigentlich gegangen, um das Null davon zu nehmen, und ehrlich gesagt werde ich die Eindringlinge abnehmen. Lassen Sie mich einfach einen kleinen Refactor machen, denn jetzt denke ich darüber nach, wann immer es die ganze Nacht in Pij ist, wenn sie die Daten paging, sie müssen wahrscheinlich nichts über das Land oder irgendetwas anderes enthalten, richtig? Weil sie nur Erwachsene auflisten, wenn Sie die Details von etwas bekommen, dann möchten Sie wahrscheinlich einschließen. Also meine ich, das liegt an dir. Vielleicht werde ich die Includes verlassen, weil ich Wert in seiner frühen der enthält Kugeln sehen und Schusswaffen anfordern konnte . Wir wollen definitiv, dass das für diese Version obligatorisch ist. Also lass mich das an die Front stellen. Ich glaube, deshalb ist diese rote Linie da. Denn jedes Mal, wenn Sie die Wohnung haben, macht diese Studie, müssen Sie die NULL-will bis zum Ende haben. Also gehen wir hin. Also fordert params. Aber zu der Aufgabe, die auf Abfragepunkten ist, da keine Tracking-Nummer 2 ph nist und sie wurden Abfrageparams Punkt übergeben, den sie zuerst die pH-Nummer sitzen. Also ist es wichtig, immer alle Anforderungen zu betrachten und sicherzustellen, dass Sie das richtige Volumen übergeben und dann wollten sie Seitengröße und ja, ich habe irgendwo, von dem Sie das bekommen können. In Ordnung. Und dann denke ich, dass diese Bereiche da sind, weil wir ein C sein müssen . Also nein, wir können eine Seitenliste von allem bekommen, was wir in unserer Datenbank haben, und ich muss gehen und mein Repository korrigieren, wo ich dies nicht nullable kann. Und natürlich muss ich es nach vorne schieben. Ordnung? So sehen Sie, wie Sie auf Ihrem EPA bauen, winzigen G und Design auf dem Weg gemacht, sie sind tatsächlich erforderlich, aber, wissen Sie, sobald Sie wissen, was Sie tun, ja, in der Nähe bekommen Sie oben drauf. Also lassen Sie mich einfach einen Build machen und sicherstellen, dass ich nichts anderes verpasst habe, was ich hier sehe. Okay, also sehen sie, dass das alles bekommt. Es gibt keine. Ok, also dieser Fehler liegt daran, dass ich immer noch die Funktion verwende, um Dawes zu erhalten. Also richtig wissen, dass wir Funktionen aussteigen müssen, um zwischen den beiden von ihnen zu unterscheiden. Was ich liebe, ist genau die Parameter zu übergeben, die die 1e Nein, ich will, oder? Also, nun, eigentlich funktioniert das nicht, denn obwohl man immer noch mehr als einen braucht, ist es immer noch verwirrt darüber, mit welchem ich es zu tun habe. Also, was ich tun werde, hätte das wahrscheinlich von Anfang an tun müssen. Ich werde einfach den Namen ändern und. Machen Sie eine neue oder es eines Tages versuchten sie generisch zu sein. Janet Mock feuert. Also lassen Sie mich einfach anrufen, das wird ausgespiegelt. Zumindest. Ich denke, das ist klar genug. Also würde ich generisches Repository, wir tun das in einem generischen Repository. Wir haben diese Änderung vorgenommen, sobald ich sie dort finde, gehen wir und gehen los. Also lasst uns diesen Waldspin nehmen. So nur getan dies die Länder. Und die Tatsache ist, dass wir es an einem Ort gemacht haben, und es ist so einfach, zu einem anderen Controller zu gehen und diese Änderung vorgenommen, weil die harte Arbeit bereits getan wurde. In Ordnung, also ist das einer der Vorteile des Pumps Clean Architecture und haben einen Fehler hier und nicht entstanden uns verrückt, aber das tut auch behoben. Okay, also versuchen wir es nochmal. Und wenn wir zu diesem Punkt kommen und versuchen, den Doppelpunkt mit Gebotsgröße 50 und Seite Nummer fünf zurück zu bringen , werde ich hier tatsächlich einen Haltepunkt setzen, damit wir die Parameter sehen können, die hereinkommen oder vielleicht Gliedmaße und einfach löschte es aus und 39. Na gut, lassen Sie uns das versuchen. Also senden, okay, also heizt es die Haltepunkte. Das bedeutet also, dass die Anfrage erkannt wurde. Sehen Sie, um die Anfragen params dort zu bekommen, bekommen wir 515. Ordnung. Und sie werden weitermachen. Und wir wissen, dass wir alle unsere Länder kriegen werden. Die Anfrage ist für eine PID sagt ein Abgrund, aber das existiert nicht nur von zwei Hotels. So gut zu den Ländern, tut mir leid, so dass man der erste Hinweis darauf ist, dass dies funktioniert. Also lasst uns das noch einmal versuchen. Ich möchte Seite Nummer eins mit P, seine Größe zwei. Ich werde zwei Länder haben, die von einem gelöscht werden, oder? Lassen Sie uns das versuchen. Also, wenn wir schicken, bekommen wir nur das Werkzeug, richtig. Wenn ich Seite eins mit nur einer angefordert habe , bekomme ich nur eine zurück, wenn ich pH zehn angefordert habe, was bedeutet, zu den zehnten Aufzeichnungen zu überspringen. Was unsere Bibliothek zweckdienliche Liste tat, war, dass sie die Abfrage automatisch mit take and skip modifizierte. Lass mich einfach da rüber springen. In Link oder Entity Framework können Sie also eher etwas wie Abfrage sagen. Und du kannst ein Häkchen machen. Also nehmen Sie diese Zahl, rechts, gibt eine bestimmte Anzahl von zusammenhängenden Elementen zurück, und dann können Sie sehen, wo, wo es sagt umgehen eine Zahl. Das ist also wirklich das, was es tut. Also, wenn wir die Gebotsgröße senden oder sagen wir eine Seitenzahl zehn, bedeutet, zehn Datensätze zu überspringen oder bei unserem Überspringen zehnmal diese Zahl anzubieten und dann diese Mini zurückzubringen, so etwas wie das, richtig? Also all das, es klang verwirrend, ist wirklich nicht so schwer zu schreiben. Ich bin wahrscheinlich ich hasst EINE schwieriger als es wirklich ist, was die Realitäten, die wir nicht einmal all das tun mussten, weil unsere Bibliothek das für uns tut. Wörter ist 2pi aufgeführt ist, tut das automatisch, und deshalb braucht es Abfrageparameter vielleicht. Okay, ich gehe irgendwie in die Klasse dahinter. Also, das ist in Ordnung. Also ja, so implementieren wir Paging. Offensichtlich siehst du wahrscheinlich nicht die volle Macht davon, weil ich nur sehr wenige Rekorde habe. Allerdings, wenn wir sehen, dass vielleicht 50 Hotels in diese Datenbank und dann sagten wir , wir wollen Seite fünf und nur zehn Datensätze. Dann würde es sagen, Gib mir das. Ich glaube, meine Mathematik ist da draußen, aber ich hoffe, du bekommst das Wesentliche. Also richtig, und alles, was wir Paging in unserer API aktiviert haben. Und wieder einmal, das ist sowohl Sie als auch die anfragende Anwendung. Und wenn diese Parameter nicht angegeben wurden, haben wir standardmäßig der Anforderungsparams-Klasse mitgeteilt , dass Devalues standardmäßig auf Seite Nummer eins und maximal 50. 38. Globale Fehlerbehandlung: Hey Leute, willkommen zurück. In dieser Lektion werden wir also über die globale Fehlerbehandlung sprechen. Also fange ich im Controller für die Länder an. Und wir hatten bereits erwähnt, dass wir die Notwendigkeit reduzieren wollen, diesen Try-Fang zu wiederholen. Also jedes Mal tragbar, um eine Operation zu tun, während es sehr wichtig ist, wird es im Laufe der Zeit wiederholt, weil wir vier Funktionen haben in denen wir weiterhin versuchen fangen, versucht, niederländische Try-Catch zu schreiben. Und für alle anderen Telefone wäre es wichtig. In. Was wir also tun wollen, ist eine globale Methode zu implementieren, um Ausnahmen zu behandeln und die Notwendigkeit für die sich wiederholenden try-catch-Anweisungen zu reduzieren. Was wir also tun wollen, ist zu standardisieren, was passiert, wenn wir einen Fehler fangen. Denn wenn wir aufpassen, machen wir das Gleiche. Das einzige, was irgendwie dynamisch ist, wäre der Teil, wo wir den Ort sehen , der für mich eigentlich irgendwie optional ist und wahrscheinlich nicht unbedingt den Funken machen muss. Aber der Punkt ist, dass die Nachricht relativ gleich ist und wir geben immer diesen 500-Antwortcode. Was wir also tun wollen, ist eine Standardmethode zu haben, um ein Aerosol und Modelle darzustellen. Ich werde nur eine neue Klasse erstellen und ich werde es nennen. Und dann werden wir irrtümlich drei Felder haben. Also werden wir einen Statuscode haben. Wir werden Nachricht I haben dann werden wir eine dritte haben, wo wir die Nachricht als serialisierte JSON-Objekte bereitstellen. Also für diesen haben wir Newton JSON, Neutron weich, sorry, dot JSON. Also, das ist seine ganze oder Fehlerklasse wird sich darum kümmern. Was ich tun wollte, ist unsere Startup-Pipeline zu erweitern, aber ich werde die Service-Erweiterungen wie das verwenden , was wir in den letzten paar Malen gemacht haben. Und ich werde eine neue haben, und wir rufen diese neue Funktion konfigurieren Ausnahme-Handler. Und dieses Mal bekommt die Middleware-Pipeline. Also, ursprünglich würde es in Dienste kommen, diese Stunde kommt in den Anwendungsgenerator. Ordnung. Also in diesem gehen wir voran und wir sagen, Punkt, Verwenden Sie Ausnahme-Handler. Alles klar, so dass der Punkt macht Kernanwendung in und aus sich selbst seine eigene Ausnahme hat. Also machen wir irgendwie wie eine Überschreibung, um zu sehen, dass dies wirklich so ist, wie wir wollen, dass Sie operieren. Verwenden Sie also Exception-Handler und dass wir unser kleines Tolkien oder Lambda suchen Tolkien brauchen. Und dann hier drin öffnen und schließen wir geschweifte Klammern Semikolon am Ende. Also innerhalb dieses Blocks, und wenn man sagt, dass Fehlerdoktrinen das hatten, bin ich nicht, dass ich die Costal-Middleware namens null hinzufüge. Und ich werde async und mein Tolkien-Expertenwissen sehen , wann ich Kontext aufrufen soll und dann mein Lambda R1. Also nochmal, für ein anderes Objekt, in Ordnung, also was ich tue, ist jedes Mal, wenn ich eine dieser Kanten mache, zeigt ich sowohl das Semikolon am Ende des Briefs sind, die Klammern sind da draußen, also vergesse ich es später nicht. Ordnung. Also, dann werden wir sehen, stellen einige. Etwas Konstante. Ich setze den Kontext dot response.status-Code so ein, dass er den Statuscodes dot 500 entspricht. Also die gleichen 500, die wir jedes Mal zurückgeben, wenn es einen Fehler gibt, wir setzen das nur als Konstante, so dass wir es nicht immer und über es tippen müssen. Also, wo war es mir leid. So zitiert Status Punktstatus 500 Interner Serverfehler. Und dann setze ich den Inhaltstyp auf Anwendungs-JSON. Dann werde ich sagen, var Kontextfunktion ist gleich zwei Kontexte Punkt-Features erhalten Exception-Handler-Funktion, die Sie möglicherweise importieren müssen Habe ich Datentyp für diesen fehlt, so können Sie voran gehen und das tun. Also, was wir sagen, nein ist, wenn die Kontext-Funktion nicht gleich null ist, dann wollen wir Log Dot und dann Login-Fehler sagen. Denken Sie daran, dass jedes Mal, wenn etwas versagt, wir das tatsächlich tun. Wir haben unseren Logger und dann melden wir uns Fehler an, wo wir übergeben, was falsch ist, oder? Also werde ich sagen, wenn etwas schief gelaufen ist, werde ich diese Grundlagen hier drüben kopieren, etwas ist schief gelaufen. Aber anstelle des Namens, oft Länder zu bekommen. Dies werde ich sagen, Kontext-Feature-Punkt-Fehler. Das gibt uns also einen Hinweis darauf, was schief gelaufen ist, oder? Also nicht Fehler, Kontext, Feature-Punkt-Fehler. Dann gehen wir weiter zu sagen, ich warte, Kontexte bringt uns MCT asynchrone Programmierung Notizen ist, dass dieser kleine Pfeil hier ist grün auf der Szene , dass wir sehen, ein Symbol jemals erwartet etwas. Also, wenn ich sage, dass wir es, das sind, ist nicht alle zufrieden mit n gleich o a oder sorry, das async-Schlüsselwort ist nicht alle zufrieden. Das Land verschwindet. Also werde ich sagen, erwarten Sie Kontext-Punkt-Antwort. Also werden wir sagen, senden Sie eine Antwort auf die aufrufenden Kontexte des Kontextes hier wirklich den Controller, der die Informationen weitergibt. Ordnung? Lucio, das funktioniert in ein paar. Also schreibe asynchron, okay? Und dann wollen wir sagen, dass wir einen neuen Fehler wollen. Also neuer Fehler, und ich werde einfach voran gehen und dieses Modell initialisieren. Da gehen wir. Also wollen wir einen neuen Fehler, bei dem unser Statuscode gleich dem Status quo sein wird, den wir gerade hier oben gesagt haben. Also ich meine, wir hätten leicht sagen können, dass es hier in Ordnung ist. Aber das wollen wir. Und wir wollen auch, dass unsere Botschaft etwas Konsistentes entspricht. Also ich denke, hier haben wir gerade Interner Server gesagt. Diese Drachen, ich denke, das ist es, was wir jedes Mal gesagt haben. Also nur die Nachricht ist gleich dieser sehr konsistenten Nachricht. Und dann wollen wir all das in String konvertieren. Dann haben wir ein Semikolon. In Ordnung, also lasst uns das ein bisschen überprüfen. Wir sehen also, dass wir unseren Standard-Exception-Handler überschreiben möchten. Und die Art und Weise, wie wir wollen, dass die Ausnahmebehandlung stattfindet, ist so, dass wir, wenn eines passiert, das Protokoll schreiben und dann ein Fehlermodell mit dem Statuscode und der Nachricht generieren . Alles klar, das würde unser Bedürfnis eliminieren das jedes Mal manuell zu tun. Nun, nachdem wir diesen Code-Middleware-Code geschrieben haben, müssen wir zum Startup gehen und ich werde diesen direkt unter den Swagger setzen. Also werden wir es sagen, dot configure Exception-Handler, und das sollte es sein. Also, was ich als Proof of Concept tun werde , ist das Fach entfernt, weil versuchen wirklich bedeutet, dies zu tun. Also mit all den Triaden bereit zu versuchen, es zu tun, der einzige wirkliche Zweck sind das Spiel ändern Aspekte der versuchen fangen ist, dass es sehen, versuchen Sie diese Operation und behandelt die Pfeile, die auftreten. Wenn ich also globale Fehlerbehandlung habe, muss ich nichts eingeben, um es manuell zu handhaben, wenn etwas passiert. Also werde ich versuchen, Schmuggel-ID zu bekommen. Das ist in Ordnung. Also werden wir einige Tests mit diesem als Proof of Concept durchführen. Und was ich auch tun werde, ist , okay, wir schauen uns einfach an, wie es funktioniert. Also werde ich anfangen und ich werde unsere Anfrage für API-Schrägstrich Länder Schrägstrich eins ausführen. Und dann bekommen wir Land Nummer eins, das Jamaika mit dem Hotel ist. Also funktioniert alles gut. Das ist es, was wir erwarten würden. Ordnung? Nein, es ist schwer für mich, sonst einen Fehler einzuführen. Also, was ich tun werde, ist, das Geld einzuführen. Nun, hier im Code, was ich tun werde, ist eine neue Ausnahme zu werfen weil der Haken dort ist, um eine Ausnahme zu fangen. Wenn ich also selbst eine Ausnahme auslöse, dann würde passieren, dass der Code tatsächlich aufhören würde, an diesem Punkt auszuführen. Ich komme nie da runter. Jetzt möchte ich sehen, welche Antwort ich erhalten würde, wenn diese Ausnahme ausgelöst wird. Also gehen wir weiter und führen dieselben Postman-Anfragen aus, die nur erfolgreich waren, und ich werde die Wurfausnahme einführen. Und wenn wir das tun, sehen wir, dass wir Buck-Status-Code und -Nachricht bekommen. Und diese beiden Felder sind die gleichen zwei Felder, die wir gerade in unserem Fehlermodell definiert haben. Okay, was hier passiert, ist, dass der Ausnahme-Handler tatsächlich global beobachtet, wann immer eine Ausnahme abgefangen wird, dann tut es, was wir gebeten haben, den Fehler zu protokollieren und zu sagen, dass hier etwas schief gelaufen ist. Also lassen Sie uns sehen, was im Protokoll ist und das Protokoll m meine Ausnahme hier sehen. Also System außer SON System.Out Simpson war durch und ich hätte es spezifischere Ausnahme dieser Datenpunkt machen können. Aber dann, wenn Sie nach unten schauen, sehen Sie die ganze Pipeline, wo sie hingegangen ist. Was passiert, ist, dass es an den Controller ging. Der Controller warf eine Ausnahme und dann behandeln sie den Hand-Handler, den wir überschrieben haben, heizen unseren benutzerdefinierten Code. Und dann sagte es, okay, was soll ich tun? Nun, die Statistiken werden bewertet ist 500, der Antwort-Typ ist JSON. Ich werde den Fehler protokollieren und dann werde ich Bach in unserer Antwort schreiben , dass dies aufgetreten ist. Auf diese Weise können wir tatsächlich sicher und sicher, nachdem wir das getan haben, alle anderen Versuchsfänge von irgendwo anderem im Code entfernen. Denn wieder einmal waren diese Versuchsfänge da, um sicherzustellen , dass wir alle Fehler anmutig behandeln, so anmutig wie möglich sind. Jetzt, wo wir es global gemacht haben, Sie wollen, können Sie tun, ist nur tun, was Sie sehen, wie Sie mich tun, und gehen Sie einfach durch und nehmen Sie alle Track-Fänge auf jeder Menge, die Sie erwarten, ausgeführt werden. Gehen Sie einfach voran und führen Sie das aus. Und was Sie erkennen, ist, dass aus diesem Grund die Entfernung dieser Abhängigkeit vom Try-Catch überall in jeder Option ist. Wenn Sie Ihre ABS-Funktionalität erweitern und erweitern, sehen Sie vierteljährlich viel sauberer aus, denn dann können Sie und Ihr Team so den Code schreiben Wissen, dass Ihre Ausnahmebehandlung auf globaler Ebene geschieht. Also habe ich das mit dem Land gemacht. Sie können voran gehen und bereinigen den Hotel-Controller sowie NLL-Controller, die Sie haben können. 39. API implementieren: Hey Leute, willkommen zurück. In dieser Lektion werden wir über die Versionierung unserer API sprechen, obwohl der Grund dafür sind, dass wir APIs versionieren möchten, dass sich im Laufe der Zeit mehr Funktionalität dort entwickeln wird wenn wir das Verhalten unserer Endpunkte, Gene ändern können , einige Verben sind die Art und Weise, wie die Nutzlast strukturiert ist, all diese Dinge. Aber dann willst du das nicht einfach machen. Und dann wachen alle Ihre Kunden eines Tages auf und erkennen, dass ich Ihre gesamte Codebasis ändern müsste , weil Sie eine Änderung in der Nähe der API implementiert haben. Versionierung der API ermöglicht es Ihnen, parallel zwischen der alten Art und Weise zu laufen , Dinge zu tun und die neue Art, Dinge zu tun. Und dann können Sie schließlich den Rasenpunkt auslaufen, den alle Kunden haben. Natürlich, nach adäquater Warnung und Ausbildung, besitzen wir den neuen defacto Standard, den Sie einführen. Also Retinal will über Versionierung sprechen und unsere Reise wird hier beginnen, in New get, wo wir bekommen, dass Microsoft im Kern MVC-Versionierungsbibliotheken ist. Sie können voran gehen und danach suchen und installieren. Und dann, nachdem Sie das getan haben, werden wir mit den Service-Erweiterungen gehen und wir werden eine neue Funktion hinzufügen. Und wir nennen diese Konfigurationsversionierung. Natürlich können Sie es nennen, was auch immer Sie sich wohl fühlen. Aber im Moment nennen wir es konfigurieren Versionierung. Und dann innerhalb dieser Funktion werden wir Code Geruch zu haben, so dass wir sehen Dienste, API-Versionierung. Und dann werden wir eine Option Initialisierung, wo wir einen Bericht API-Versionen sehen, echte SWOT Bericht es Umleitungen bedeutet, dass es einen Header in unserer Antwort zu sehen ist dies die Version, die Sie verwenden. Also, wenn unsere Kunden mit der API sprechen, werden wir in der Antwort sehen, ja, Sie würden nur diese API-Version heizen. Wir gehen, um die Standardversion zu übernehmen, wenn nicht angegeben. Also, wenn wir 123 API-Versionen und das Client-Feld, um anzugeben, dass sie Version 13 verwenden möchten, usw. Dann werden wir nur einen Standardwert verwenden, den wir vorangegangen und unten angegeben haben. Wir sagten, die Standard-API-Version wird API-Version eins sein. So können Sie voran gehen und in 2D alle fehlenden oder zum Beispiel, wie üblich. Und dann, nachdem Sie all das getan haben, können wir zum Start gehen und wir können Betriebssystemdienste registrieren. Also werde ich das hier unten setzen. Ordnung. Nun, was wir tun werden, ist ein neuer Controller zu erstellen. Also werde ich nur zu Add gehen. Controller wählt eine API und ich lasse sie einfach leer. Und dann zum Beispiel Sake, ich werde dieses Schwanenland v2 nennen. In Ordnung? So Land V2 Controller. Also haben wir einen neuen Controller. Und ich werde es nur mit einigen der Dinge vom ursprünglichen Country-Controller initialisieren . Also werde ich nur all diese Dinge kopieren. Also bin ich nur, ich will nur einen Endpunkt nur für Testzwecke. Der einzige Endpunkt, mit dem wir es zu tun haben, wird sein, so gehen Sie voran und fügen Sie alle fehlenden Bezugnahmen. Nun, eigentlich werde ich die Art und Weise ändern, wie dieser auf Daten zugreift. Anstatt es die Arbeitseinheit zu verwenden, werde ich es erlauben, den DB-Kontext direkt zu implementieren. Das ist also. Datenbankkontext. Also natürlich denken Sie daran, dass das tabu ist. Sie möchten das nicht wirklich tun, während es funktioniert, es ist nicht empfehlenswert, die APA direkt auf die Daten zu schauen. Aber für dieses Beispiel werde ich das einfach tun, damit wir einen anderen Rückgabetyp zwischen den beiden Controllern haben. Also werde ich das so schnell wie möglich initialisieren. Und dann, wenn das erledigt ist, sobald das injiziert wird, und das ist Ihr V zwei Controller. Ordnung? So können wir die Route hier angeben, um die gleiche Sache wie der Ursprung zu sein. Ich beschwöre die Kontrolle, denn denken Sie daran, dass sie zum Khan-Controller gehen, richtig? Das wäre also api Schrägstrich Land. Dies wäre jedoch standardmäßig api Schrägstrich Land V2. Aber was, wenn ich sage, dass ich den Controller-Namen nicht will. Ich wollte derselbe Endpunkt sein. Wenn es nun derselbe Endpunkt ist, würde die API standardmäßig nicht wissen, wohin sie gehen soll, weil sie diesen mit dem Root sehen wird und diesen mit der gleichen Route sieht und nicht weiß, wohin sie gehen soll. Jetzt kann ich angeben, dass diese API-Version ist, und dann angeben, dass diese 2 ist. Alles klar, das sollte ein String sein. Also API-Version 2, was passieren würde, ist, dass der Client angeben muss , welchen Endpunkt es ist, den sie erhitzen wollen. In Ordnung, also werde ich sie einfach aufräumen und das aufräumen, in dieser Situation einen Anforderungsparameter einreichen. Und ich habe den Rest einfach aufgeräumt. Also wollte ich dich nicht mit meiner Aufräumung langweilen, aber das ist alles, was wir tun. Wir sehen nur Länder holen. Und es wird Kontexte Punkt Länder zurückgeben, die nur die Liste der Löschungen in die Datenbank bekommen und das zurückgeben wird. Alles klar, der Rückgabetyp hier unterscheidet sich vom dto Rückgabetyp unseres ursprünglichen Endpunkts. Okay, also lassen Sie uns das für eine Probefahrt nehmen und sehen, wie das funktioniert. Nun, wenn Sie sich in unserer Konfiguration erinnern, hatten wir gesagt, dass wir die Standardversion übernehmen sollten, wenn nicht spezifiziert. Also, was wir hier getan haben, war nur, den gleichen Anruf zu wiederholen, den das Rad auf unsere Endpunkte zurückzuführen ist. Du hast gerade API-Schrägstrich Land gesagt. Und wir kriegen Maco, unser Land. Aber dann nein, wenn Sie in den Header-Abschnitt schauen, werden Sie sehen, dass die API unterstützte Versionen 1 Do Recall , dass unsere Konfiguration 1 als unsere Standard gesetzt hätte. In Ordnung, damit das funktioniert, erkennt, dass es Versionen gibt, die die Ergebnismenge von der Standardeinstellung zurückgeben. Wissen Sie, wie wir unseren Kunden dazu bringen, zu wissen, welche Version er will? Es gibt ein paar Möglichkeiten, dies zu tun. Nummer eins, können wir von einer Abfragezeichenfolge angefordert werden, so dass wir sehen können ob die andere, die Sie in einer Abfragezeichenfolge übergeben, über param sind. Lassen Sie es uns einfach in die param APA Dash-Version. Und dann würden wir 2 sehen. Und dann senden sie, Sie würden sehen, dass wir wieder eine 200 OK, und die unterstützende Version ist 2. Lassen Sie mich das in ein bisschen mehr Kontext stellen, damit wir es visualisieren können. Wir wissen also, dass wir zwei Controller haben. Haben Controller Quadrature v zwei, die die gleiche Wurzel wie die ursprünglichen hat. Ich wollte Breakpoints auf ihre jeweiligen Funktionen setzen. Und dann werden wir sehen, welche Wärme bekommt, um estan zu sein, was verlangt. Also werde ich nur die Anfrage für Version 2 wiederholen. Und dann, wenn Visual Studio Seife leuchtet, sehen Sie, dass es den neuen Controller trifft, den wir mit dem gleichen Endpunkt eingerichtet haben, außer wir übergeben die Abfragezeichenfolge, die wir Version zwei wollen. Okay, damit ich fortfahren kann, es trifft die Datenbank und es gibt die Daten entsprechend zurück, und das ist in Ordnung. Aber wenn ich den Parameter nicht einschließe und dann die gleichen Anfragen mache, beachte, dass es unsere Ursprünge trifft. Das war's also. So können wir mehr als einen Controller mit der gleichen Route haben, außer es gibt verschiedene Versionen. Das ist also eine schnelle Möglichkeit für den Client, anzugeben, dass ich Version zwei möchte. Wenn sie nicht angeben, dann werden wir sie auf Version auf eins senden. Jetzt noch eine Möglichkeit, das zu tun, und ich werde das jetzt beenden. Eine andere Möglichkeit, dass wir angeben können, welche Version niedrig ist. Der Client wird angeben, welche Version der Stamm geändert werden soll. Also kann ich tatsächlich irgendwie super hier zwischen dem Wort API und dem Endpunktnamen auferlegen . Und sehen Sie, dass ich möchte, dass Sie v Doppelpunkt und die API-Version übergeben. Ordnung? Also, wenn wir das tun und sie an sind, werde ich irgendwie den ursprünglichen Endpunkt oder die Quests ändern. Also hatten wir zunächst API Schrägstrich, Land Schrägstrich. Wir setzen die Abfragezeichenfolge ein, um Version 2 zu erhalten, aber dann nein, ich ändere die Wurzel, also sollte ich in der Lage sein, es zu zeigen oder direkt hier in der URL, richtig? So APIs Schrägstrich 2 Schrägstrich Land. Und habe ich noch den Breakpoint CSI dual? Also mal sehen, ob es getroffen wird und es wird getroffen. Sie sehen also, dass dies eine andere Möglichkeit ist, dass der Client angeben kann , welche Version der API er will und welche Endpunkte er hat. Also Version 2.0. Sie geben 2 an, so dass es die entsprechenden Endpunkte erwärmt. Nein, es könnte eine Situation geben, in der Sie nicht unbedingt die URL erweitern möchten , weil im Moment alles, was wir brauchen, um unsere zu erweitern, wir zwingen die Clients, dass sie ihre BS-URLs ändern müssen, in Ordnung, also müssen sie die Schrägstrich API Schrägstrich 2 Endpunkt oder passen Sie Boston als Abfragezeichenfolge an. Eine andere Möglichkeit, dass wir die Versionierung zum Laufen bringen können und mich den Fehler einfach stoppen lassen , besteht darin, eine Konfiguration hinzuzufügen, die Service Extension für die Versionierung riss, wo wir die Option dot API Version oder entweder sehen. Und wenn wir nur ein wenig schauen, was das tut, um es zu sehen. Es wird verwendet, um den API-Dienst zu lesen, wenn er von Clients angegeben wird. Ordnung, so dann können wir in neuen Header API Versionsleser sehen. Also, was ist es, ein Boot, die eingehende Anfrage, die wir lesen wollen, oder? Also sagen wir, wir wollen den Header-API-Versionsleser und wir suchen nach einem Header mit dem Namen der API-Version. Dies ermöglicht es uns, einen zu erhalten, nicht nur unsere Wurzeln so zu halten, wie wir es vorher hatten, sondern es dem Client ermöglichen, einfach einen Header hinzuzufügen, anstatt seine gesamte URL ändern zu müssen. Also lassen Sie uns das versuchen. Also Buckskin Postbote, ich werde nur die 2.0. von unserer URL entfernen. Und dann, was ich tun werde, ist in den Header-Abschnitten anzugeben , die Sie heterocyclic API Dash-Version haben. Also, das ist ein neuer Header, der ich über 2.2 übergeben wollte. Und wenn ich das schicke, trafen wir unseren Haltepunkt in unserer Version 2.0. Controller. In Ordnung, also einige Möglichkeiten, wie Sie verschiedene Telefonpersönlichkeiten oder verschiedene Methoden haben , Dinge zu tun anstatt zu viele Änderungen in der Codebasis einzuführen , die alle bereits abonniert haben, Sie können eine neue Phase einbauen und es einfach Version nennen, diese Version, die, und sie in den Header für die entsprechende Version übergeben, wenn nötig. Keine weitere Sache, die ich Ihnen zu diesem Thema zeigen werde ist, wie Sie angeben können, dass etwas veraltet ist. Also in Stille auf jetzt und ich werde nur weiter mit diesem hier, weil dies Experiment ist. Nehmen wir an, dass ein Vers auf Drei-Punkt-Werkzeug. Daher ist keine Version 2 veraltet oder es ist nicht mehr die bevorzugte Version. Sie können also der Anmerkung hier hinzufügen , dass der veraltete Wert dieser API-Version wahr ist. Was also passieren würde, ist, dass, wenn es den Header für unsere Antwort sendet und wir das hier testen können. Das war also eine vorherige Anfrage, also werde ich weitere Anfragen ausführen, den Haltepunkt treffen, fortfahren, aber dann schauen Sie es sich an. Dies ist eine veraltete API-Version 2. Also nein, es sagt nicht mehr, oh, Sie heizen die API-Version lässt Sie wissen , dass diese nicht mehr die bevorzugte ist. Okay, es ist wahrscheinlich nahe am Ende des Lebens, was auch immer es ist. sind also Möglichkeiten, wie Sie tatsächlich die Versionierung in Ihrer API implementieren können , um die Kontrolle von Hall-YOU-Gebühren in Ihren Änderungen zu unterstützen, während Sie weitergehen. 40. Implementing implementieren: Hey Leute, willkommen zurück. In dieser Lektion werden wir uns mit der Implementierung von Caching auf unserer API beschäftigen. Jetzt kann das Caching die Leistung der API erheblich verbessern. Denken Sie nur darüber nach, wenn wir Hunderte haben, vielleicht Tausende von Kunden, die die API abonnieren, sie alle versuchen, alle erzählten Länder und wahrscheinlich sogar beide zur gleichen Zeit zu finden . Und ich kann wirklich eine Maut auf die Leistung der API basierend auf der gesamten Infrastruktur und einen Fuß nehmen , ich muss die Datenbank mit jeder Anfrage treffen. Caching führt also eine Art Schnellzugriffsebene über dem realen Datenspeicher ein. Und es wird deutlich reduzieren, wie oft wir die Datenbank abrufen müssen. Was wir also implementieren werden, ist ein Caching. Wir würden auf die Implementierung einer Expertenerfahrung in Bezug auf Mechanismus suchen, um das Ganze zu reduzieren, oft müssen wir zur Datenbank gehen. Wir würden uns mit der Implementierung eines Validierungsmechanismus befassen, um die Netzwerkbandbreite zu reduzieren. Und am Ende dieser Lektion wollen wir nur ein allgemeines Gefühl von Caching, warum wir es haben und wie es implementiert werden kann. Jetzt gibt es drei Arten von Caching und ich wollte euch nur geben, und es ist gefürchtet, bevor wir in die ganze Code-Angelegenheit kommen. Der Client-Cache lebt also im Browser. Es ist also ein privater Cache, weil es, wissen Sie, Sie müssen einen einzelnen RNA bestimmten Client. In Ordnung, wir haben den Gateway-Cache, der auf dem Server lebt und ein gemeinsamer Cache ist. Also würden die Gateway-Bereitstellungen, denke ich, und alle Clients, die das Gateway oder zu einem beliebigen Zeitpunkt treffen und alle Clients, die das Gateway oder zu einem beliebigen Zeitpunkt treffen, dieses Geld heizen. Und sie, wir haben unseren Proxy-Cache, der auch ein gemeinsamer Cache ist. Was ist es nicht auf dem Server leben, es lebt im Netzwerk. Um mit dem Caching oder der Ressource zu beginnen, ist es ziemlich einfach. Was wir tun müssen, ist die Response-Cache-Attribute hinzuzufügen und festzulegen, wie lange der Cache leben soll. Vier, richtig, so über jede Kontrolle, über jeden Endpunkt. Und ich fange einfach mit Ländern an. Weißt du, wir würden einfach zwischen den beiden experimentieren. Also werde ich nur das Attribut hinzufügen, das Antwort-Cache sagt. Und dann ist die Dauer gleich 60. Also 60 bedeutet, wenn Barnes. Okay, also richten wir die Cache-Kontrolle mit einem Maximalalter von 60 Sekunden ein. Wenn Sie sich die Dauer ansehen, sehen Sie, dass dies das maximale Alter im Cache-Control-Header festlegt. Wenn also ein Client vom Endpunkt nach Nieto abfragt, wird ein Header enthalten sein, der besagt, dass dies die Lebensdauer des Bargelds ist , das Sie erhalten, sind zwischengespeicherte Daten, die Sie nicht gut sind. Lassen Sie uns also in den Debug-Modus gehen und einen schnellen Test durchführen. Im Post-Modell, was Sie tun möchten, ist nur sicherzustellen, dass Ihre aufgestiegene keine Cache-Header-Option deaktiviert ist. So können Sie tun, ist gehen Sie zu Dateieinstellungen und unter Allgemein freut sich, dass Sitzen trifft oder es ist aus. Andernfalls können Sie fortfahren. So wissen wir bereits, dass wir alle Header betrachten können, die zurückkommen. Und ich werde schicken. Und wenn wir die Antwort erhalten, sehen wir, dass unser Cache-Control-Header zurückgeht und er das maximale Alter von 60 hat. Okay, jetzt ist das wirklich nur der Header, also ändern wir noch nichts. Dies bedeutet nur, dass der Client wissen lässt, dass, während die Daten zwischengespeichert werden, was natürlich ist, wir tatsächlich die Daten zwischenspeichern müssen. Also werden wir einige unserer Konfigurationen in unserem Start ändern müssen , wo ich angefangen habe. In unserem Startup dot cs werden wir diese neue Dienstregistrierung in der Funktion „Dienste konfigurieren“ hinzufügen. Und dass ich hier nur Brot hinlegen werde. Also Dienste, die Antwort-Caching hinzufügen. Und danach müssen wir unsere Middleware registrieren, was ich direkt über der Routing-Middleware machen werde, die app.use Response-Caching sagt. So können Sie einfach voran gehen und diese beiden Zeilen hinzufügen. Und dann machen wir noch zehn weitere. Und wenn ich diese Anfrage ausführe, sehen wir einen neuen Header. Und das ist, es gibt die Anzahl der Sekunden an, die das Objekt in einem Proxy-Cache war. In Ordnung, also dachten wir nur an die verschiedenen Arten des Cachings. Also nirgends Implementieren unseres Proxy-Cache und sehen Sie, dass der Wert hier neun ist. Also, wenn ich noch einen verdiene und du siehst, ist es null 32 Sekunden bis zum Maximalalter von sechs. So ziemlich innerhalb der Lebensdauer, wenn wir weiter ziehen, wird es weiterhin einen anderen Wert für die ID erhalten. Wenn ich das mache, siehst du, dass das Alter weg ist, weil wir den 60-Sekunden-Boden überschritten haben , wo ich diesmal tatsächlich zur Datenbank ging, zurückkam und kein Alter ist. Aber wenn ich es wieder ziehe, sagt es mir jetzt, dass es zehn Sekunden alt ist. Es ist 14 Sekunden alt, et cetera. Es ist NORM.DIST gehen zurück zu meinem Start weg wirklich schnell und wir werden das ganze Wochenende zu erkunden wahrscheinlich inter implementiert, sorry, ein globaler gültiger, weil richtig wissen, ich müsste dies manuell über jede Option sitzen oder jeden Endpunkt. Und dann, wenn wir es von 60 auf 120 ändern, um zu bezeichnen, um durch jeden zu gehen. Was wir beim Start tun können, wird der Konfiguration für Add-Controller hinzugefügt. Also setze ich einfach meinen Lambda-Ausdruck ein. Die Tolkien und Web R0 und andere, die die geschweiften Klammern setzen, verursachen, wissen Sie, wenn wir mehr als eine Zeile zu konfigurieren haben, das macht es einfacher. Nun, was ich hinzufügen werde, ist eine Konfiguration, um Cash-Profile dot hinzufügen zu sehen. Und wir wollen die 120 Sekunden Dauer. Also hier können wir Art definieren bis Cash-Profil, das dann wir verwenden und wiederverwenden können. Also brauche ich, lass mich sehen, was ich hier brauche. Ich brauche ein Semikolon am Ende. Na gut, da gehen wir. So config Punkt Cash Profile Punkt hinzufügen. Wir geben ihm einen Namen, weißt du, innerhalb der Vernunft. Und dann neue Cash-Profil Dauer. Und Sie können andere Eigenschaften zu dem Profil Position Verb einen Header Ionia hinzufügen , zu kompliziert. Aber was wir wissen, ist, anstatt die Dauer hier in diesem Header anzugeben. Ich kann Profil sehen, gut, gosh, Profilname ist gleich und dann setzen wir diesen Namen, den wir gerade in diesem Slot angegeben haben. Wenn Sie also voran gehen und es testen wollten, werde ich es nicht noch einmal testen, weil wir die gerade von den Kopfzeilen bekommen , die auf das Alter zurückkommen. Also nein, wir haben es auf Indianer über jeden Endpunkt erhöht , den wir dieses Geld haben wollen. Und mehr als wahrscheinlich würden Sie über diejenigen sprechen wollen, die lesen. Die get-Profile wären diejenigen, die dieses Caching-Profil haben. Sie würden das nicht unbedingt über die Erstellungs- und andere Operationen benötigen. Okay, also reden wir über eine Situation, in der unsere Daten veraltet werden könnten. Wie gesagt, mit dem Geld dauert es wie eine schnelle Kopie der Datenschicht und es gibt diese Daten zurück, solange wir es gesagt haben. Also in diesem Fall sind es zwei Minuten. Nun, lassen Sie uns das auf zehn Minuten verlängern. Und dann, wenn der Client zum ersten Mal versucht, Daten zu erhalten, dann wird er betrügen und eine zwischengespeicherte Version danach erhalten. Aber was ist dann, wenn fünf Minuten in diese zehn Minuten oder zwei Minuten in diese zehn Minuten Zeit, ein Update tatsächlich stattfand. Also wurde ein neues Land hinzugefügt, oder? Und dann erhalten sie immer noch veraltete Daten, solange die Caches live sind. Also wollen wir das nicht. Wir wollen das nicht, wenn sich die Daten darunter ändern, sie immer noch alte Daten erhalten. Also weiter, um dies hinzuzufügen, ist eine Validierung. Alles klar, um eine Validierung durchzuführen oder Header für die Validierung und Erfahrung bei Prüfungen hinzuzufügen, werden wir eine neue Bibliothek einschließen. Und es wird diese Bibliothek namens Marvin Dot Cache-Header sein. In Ordnung, so ist Geschwindigkeit auf einer Kern-Middleware, die HTTP-Cache-Header zu Antworten hinzufügt. Und Sie sehen die verschiedenen Header, die Cache-Control abläuft, etag und Last-Modified. In Ordnung, also implementiert es Cache, Ablaufdatum und Validierung. Also kannst du weitermachen und das kriegen. Und ich werde umgestalten oder Viertel-Bit. Also in den Service-Erweiterungen auf, wann eine neue Funktion hinzugefügt werden soll, wo wir öffentliche statische sehen, void konfigurieren HTTP-Cache-Header und wir kennen den Drill-Boss in der Service-Sammlung. Und dann nehme ich die erste Zeile, die wir Dienste hinzugefügt haben, dot Antwort gushing sowie Dienste hinzufügen HTTP-Cache-Header. Also nehmen wir die beiden. Und dann, was wir tun werden, ist nur und ich verweise auf den Start, also wo ich das Original hatte Und ich werde nur einen Verweis auf diese Funktion hinzufügen , die diese beiden Dienstaufrufe richtig initialisieren wird? Nach dieser Änderung werden wir die Middleware hinzufügen. Also nach dem US-Antwort-Caching auf, wann Punkt addiert werden soll, verwenden Sie HTTP-Cache-Header. Und bevor wir noch Änderungen vornehmen, nur um sicherzustellen, dass alles in Ordnung ist, werden wir nur einen schnellen Test machen und wir werden eine brandneue Anfrage senden. Und wenn wir uns die Liste der Header, die von diesen Anfragen zurückkommen, schauen Sie sich abläuft Last-Modified an, wir haben ein ETag. Identifiziert eine bestimmte Ressourcenversionen. Es ist also wie ein kleiner Hash, der besagt, dass dies die Version des Details ist, die sehr und andere Dinge bekommen. Wir sehen also, dass wir auf dem Weg ein paar neue Header zurückbekommen, richtig? Sie würden auch bemerken, dass das maximale Alter irgendwie auf 60 zurückgegangen ist. Also ja, es war 12V Sets in 12 in, aber es ist bis zu 60. Wir werden also erforschen, wie wir dieses maximale Alter anpassen können. Und die Art und Weise, wie wir das tun, ist, gehen Sie zurück zu unseren Service-Erweiterungen und fügen Sie den folgenden Code auf dem Dienstpunkt hinzu, fügen Sie HTTP-Cache-Header hinzu. Also werden wir ein Tolkien definieren, es Erfahrung auf Opsin Lambda Pfeil nennen. Und wir werden sagen Erfahrung auf Option max, Alter 65120, was immer es ist, was wir wollen, wir können die Erfahrung auf Upshot Cache-Standort sehen. Wir wollen, dass es privat ist, oder wir wollen, dass es eine öffentliche Predigt ist, aber ich habe öffentlich oder privat gesehen. Sagen wir mal, wir wollten es privat. Und dann die Validierungsoption, sehen Sie die meisten Revalidate gleich wahr, was bedeutet, wenn sich die Betas ändern, müssen wir diesen Prozess durchlaufen. Ich bekomme keine nach diesen Änderungen, wir können den Header tatsächlich aus der Ressource entfernen. In Ordnung, also lasst uns einfach noch einen Test machen. Und wir werden sehen, dass die Modifikation tatsächlich global ist. Okay, also auch ohne die Ressource R zu setzen, tut mir leid, das Attribut direkt über der Ressource, sehen wir, dass wir immer noch über die gleichen Header bekommen und ich bin einfach weg und sie leben im ganzen Leben der 1-20. Okay, das nächste, was ich Ihnen zeigen möchte, sind die organischen Stoffe. Dinge, die ich Ihnen zeigen wollte, wären die benutzerdefinierten Attribute, die Sie tatsächlich direkt über dem potenziellen Endpunkt hinzufügen können , den Sie eine andere Einstellung für uns wünschen. Also ja, wir sagten, die globale Sitzung im Startup oder sorry, in der Service-Konfiguration. Aber dann über den Endpunkt können Sie das tatsächlich überschreiben. So können Sie einfach die fehlenden Referenzen hinzufügen. So HTTP-Cache, Ablaufdatum und AUC Yolanda unterschiedlichen Standort. Sie wollen, dass es öffentlich ist, und dieser sollte 60 sein. Sie können die globalen Einstellungen direkt hier überschreiben. Und dann können Sie diesem sagen, dass es nicht erneut validieren muss. Also nur springen zurück zu den Headern kommen aber wissen, dass wir Caching implementiert haben, nur um sie noch einmal durchzugehen, dieser Schlepper repräsentiert tatsächlich das Einzigartige, wie ich einzigartig gehascht zu sagen, dies ist die Version der Daten, die UIC. Wenn sich innerhalb der Lebensdauer des Cache etwas ändert, dann wird sich dieses Tag tatsächlich ändern und dann würden Sie ein neues Tag erhalten. Aber solange sich der Datenspeicher nicht ändert, ist das, was wir tun, es nur zwischenzuspeichern, so dass wir nicht die Datenbank treffen müssen, um jedes Mal, wenn jemand will, die gleichen Daten herbeizuführen. Es ist mindestens zwei Minuten, wenn wir eine bekommen, das sind Anfragen. Wir müssen nicht unbedingt in die Datenbank für die SIM oder Daten gehen. Das ist also der Vorteil, dass Sie Ihrer API Caching hinzufügen. Natürlich können Sie von Fall zu Fall anpassen, wie bestimmte Endpunkte die Daten im Vergleich zu anderen bereitstellen. Möglicherweise benötigen Sie auch nicht einmal Caching basierend auf der Anwendung oder es ist möglicherweise nicht für den Typ des Vorgangs geeignet, für den Sie die API bereitstellen. Also das ist nur eine andere Sache, die ich denke, es ist gut für Sie zu wissen, und Sie können es verwenden, um es in Ihrem Arsenal zu haben, für wenn nötig. 41. Die Rate und Drohnen: Hey Leute, willkommen zurück. In dieser Lektion werden wir über die Ratenbegrenzung sprechen. Jetzt, Ratenbegrenzung oder Drosselung, wie es auch genannt wird, ist eine Technik, mit der wir bestimmte Grenzen im Ganzen auferlegen. Oft kann jemand unseren Endpunkt treffen und tatsächlich meine Beta bekommen. Also natürlich, wenn jemand kommt und den Endpunkt so viel bombardiert wie wir Caching und all diese Dinge haben. Tatsache ist, dass der Endpunkt tatsächlich als Denial-of-Service-oder DDoS-Angriff nachgewiesen wird. Und was wir tun wollen, ist irgendwie einen Mechanismus darin einzusetzen, dass, wenn wir zu viele Anfragen aus einer Quelle erkennen, wir sie irgendwie blockieren und sagen können, hey, hier, übertreiben es. Außerhalb des potenziellen DDoS-Angriffs hilft es uns tatsächlich, eine Art Meter WHO oft jeder Client auf Daten und viele sehr beliebte APIs oder deren Google zugreift. Und ich werde nur Google sagen, aber all diese großen Spieler mit APIs und SDKs, sie alle haben eine Form der Drosselung. Wenn Sie die Anforderungen und die Nutzungsbedingungen ihrer APIs lesen, sie haben etwas, um zu sehen, können Sie anfordern 100 pro Minitaur, 100 pro Stunde Zeug Leiter. Heute werden wir es in unserer API einrichten, nur um ein Gefühl davon zu bekommen, wie es gemacht wird. Und wir werden die Bibliothek verwenden, ist Speed.NET Core Raten Limits. Also können wir einfach weitermachen und das installieren. Und sobald das installiert ist, ist das nächste, was wir tun möchten, zu einem Start gehen und alo oder einer Anwendung, um den Speicher-Cache zu verwenden, weil es Speichercache zu verwenden, um eine Art Speicher zu verwenden und den Überblick darüber zu behalten , wer Watt und wie oft haben sie es im Timing angefordert, richtig? Also wieder, sie werden Dienste sagen, die Speichercache direkt dort in den Konfigurationsdiensten hinzufügen . Dann haben wir einige Änderungen an Service Extension vornehmen. Also habe ich das Zitat hier schon. Und diese Methode nennt man die Ratenbegrenzung konfigurieren. Und wir wissen bereits, dass die Servicesammlung und was wir hier tun, eine Reihe von Regeln einrichten , so dass Sie einfach voran gehen und den Code kopieren und fehlende Referenzen einschließen können , während Sie weitergehen. Also vari, Limit-Regeln gleich neue Liste, wirklich einschränken Regeln. Sie können mehrere Regeln haben. Also müssen wir ein neues Regelobjekt initialisieren uns erlaubt , die bestimmten Endpunkte zu spezifizieren. Oder in diesem Fall sehe ich Star, was bedeutet, dass jeder einzelne Endpunkt diese Regel einhält. Basierend auf dieser Struktur kann ich tatsächlich mehrere Wurzeln haben. Ich kann Komma sagen und eine neue Regel machen. In Ordnung, lassen Sie mich einfach kopieren und einfügen. Ich kann eine neue Regel ausführen, einen bestimmten Endpunkt angeben und dann die Grenzwerte ändern. Das ist also, dass Sie auf einen Anruf pro Sekunde beschränkt sind. Ordnung? Das ist irgendwie kurz. Ich meine, wir können zehn Sekunden sagen, ein Anruf alle zehn Sekunden. Ich sehe einen Anruf alle zehn Minuten oder 100, weil es an dir liegt. Sie können es erneut nach unten konfigurieren Wenn Sie unterschiedliche Regeln pro Endpunkt haben, können Sie diese Regeln hinzufügen und die bestimmten Endpunkte angeben, für die sie gelten. Im Moment werde ich nur eine globale Regel setzen. Also werde ich nur alle Endpunkte sagen und ich werde es auf etwas setzen , das sehr klein ist, damit wir es in Tests sehen können, richtig? Ich werde also innerhalb von fünf Sekunden sehen, dass Sie nur einen Anruf an jedem Endpunkt haben. Dann gehen wir voran und wir sagen, Dienste dot konfigurieren. Ich werde in die IP Lese-Limit-Optionen setzen und wir sagen nur Optionen, nicht allgemeine Regeln gleich den Rate Limit-Regeln, die wir gerade definiert. Außerhalb dessen müssen wir diese Singleton-Dienste in Form von I rate limit counter store hinzufügen . Und das wird mit Speicher-Cache-Limit Counterspeicher verbunden sein. All dies sind also nur Code-Bits, die ich benötigt habe, um die Bibliothek zu unterstützen, die wir importieren. Eine andere Bibliothek könnte es also anders implementieren. Aber das ist der Code, der für diese spezielle Bibliothek benötigt wird, sagen Sie Candace, drücken Sie Pause, schreiben Sie sie ab. An diesem Punkt, Intellisense, füllen wir sie aus, weil Sie eines der Pakete sind. Jetzt Nachwort nicht in-service-Erweiterungen gehen einfach zurück zu starten, und wir werden diese beiden Zeilen hinzufügen, Dienste Punkt konfigurieren Sie es einschränken, was die Methode ist, die wir gerade konfiguriert haben, und die Dienste, die HTTP hinzufügen -Kontext-Accessor. Dies gibt uns also Zugriff auf die eigentliche Steuerung und deren innere Funktionsweise, wenn nötig. Und dann schließlich werden wir die Middleware hinzufügen, wo Ethanol Routing. Also werde ich Ihre Anzeigen auf jedem Caching setzen. Wir haben app.use IP Eile Limit und natürlich enthalten alle fehlenden Referenzen. Jetzt wurden verschiedene Antwortcodes verwendet wenn sie reagieren, um zu viele Anfragen zu sehen. In jüngerer Zeit wurde 429 verwendet, was buchstäblich zu viele Anfragen in der Vergangenheit bedeutet, erlebt Plattformen mit für 20, was bedeutet, hier com und andere zu verbessern. Also lasst uns das testen. Bisher Land, das ich treffen werde, senden. Und wenn wir die Header beobachten, werden wir sehen, dass wir über drei neue Header bekommen, X3, es begrenzt Röntgenstrahlen, es blieb Begrenzer Bedeutung und Limit-Reset, richtig? Es zeigt Ihnen also, dass das Limit fünf Sekunden beträgt. Sie haben nicht mehr, was bedeutet für ein 5 Sekunden Fenster und der Reset wird zu diesem Zeitpunkt Stempel sein. Also, wenn ich das mehrmals treffe, in Ordnung, ich werde einen anderen Endpunkt verwenden, weil ich denke, dass dieser durch Caching vorhergesagt wird. Daher wird es möglicherweise nicht, basierend auf meiner Caching-Konfiguration, die Drosselklappe nicht verletzen. Okay, also werde ich das Hotel benutzen, weil denken Sie daran, dass wir all diese Dinge auf dem Land und den Punkten eingerichtet haben . Also lassen Sie mich ins Hotel gehen, das ich nicht gelesen habe, dass sie so viel ändern. Also sendet bereits eine Anfrage und es zeigt mir die gleichen Header, Limits, etc., etcetera, fs und eine andere, was sich später wie Zeilen entfaltet. Es ist in Ordnung, wenn ich eine andere schicke, zu viele Anfragen, in Ordnung, also sagt es erneut versuchen, nachdem ich eine andere Anfrage nach 1 Sekunde senden sah, also kam nichts zurück, aber das Nachrichten-API-Aufrufkontingent überschritten das maximale zulässige pro fünf Sekunden, richtig? Es lässt mich wissen, dass ich in dieser Zeit einen Dollar ausprobieren muss. Und wenn ich es tue, gehen wir hin. Wenn ich es erneut versuche, versuchen Sie es nach vier Sekunden erneut, versuchen Sie es erneut. Und wenn ich das weiter mache, ändert sich das Tal weiter relativ zur Anzahl der Sekunden, die ich auf der letzten Anfrage basierend habe. So können wir Drosselung hinzufügen. Und es gibt automatisch wieder, aber das für 29 zu viele Anfragen zu sagen. Okay, und diese Nachricht, damit der Klient weiß, dass Sie die APA bombardieren. Verbessern Sie die Ruhe hören. 42. Änderungen in GitHub überprüfen und hinzufügen: In Ordnung, Jungs. Also, wo es ein weiterer Meilenstein ist, wo wir gerade gehen, um die Dinge, die wir in diesem Abschnitt implementiert zu überprüfen. Und dann neigen Gitarrenwechsel zu GitHub. Also gehen wir in der Reihenfolge der Fehler, wir haben die erste Paging sein würde. Also haben wir Einklemmen implementiert, wo wir einige Anforderungsparameter in unsere Get-Länder übergeben haben. Und wir gingen auch voran und setzten einige Standardwerte, um zu sagen, wenn sie keine bereitstellen, dann werden wir so viele Informationen im Voraus zur Verfügung stellen. Andernfalls geben wir dem Kunden die Möglichkeit zu sagen, dass er von diesem Punkt ausgehend so viele Datensätze wollen . Es werden sowohl durch die Zahl als auch den pH-Wert dargestellt, oder? Das ist also eine Sache, die wir implementiert haben. Wir haben auch globale Fehlerbehandlung implementiert, die es uns ermöglicht, unseren Code zu erstellen oder zu schreiben, ohne dass zu viele Try Catches benötigt werden. Und es ist ein bisschen sauberer als vorher, wenn wir jedes Mal versuchen, Try-Fang, Try-Fang zu sehen. In Ordnung. Eine andere Sache, die wir getan haben, war die Implementierung der Versionierung auf unserer API. Also haben wir diese Kontroverse erstellt, um nur für experimentelle Zwecke zu steuern, wo wir die API-Version angeben und erforscht haben, wie wir dem Client erlauben können, anzugeben, welche Version der API sie wollen. Und ich denke, das letzte bisschen der Konfiguration würde sie positon als Header haben. Ordnung, also haben wir in unseren Erweiterungsdiensten die Ausnahmebehandlung und die globale Ausnahmebehandlung vorbereitet , um zu sagen, wissen Sie, wenn ein Pfeil protokolliert ist und mit diesem 500 für die Versionierung zurückkehrt, haben wir gesagt, dass wollen wir die Versionierung implementieren. aus dem Header lesen, der mit der Anforderung übergeben wird, geben wir die Standard-API-Version als 1 an. Also, wenn Geld angegeben wird, dann ist es 1. Wir haben uns auch mit der Implementierung von Caching befasst. So können wir tatsächlich nur die Daten für eine bestimmte Zeit zur Verfügung stellen , bevor wir die Datenbank für die nächste Anfrage ziehen müssen. Und wir setzen auch eine Validierung ein, um sicherzustellen, dass, sobald sich die zugrunde liegenden Daten ändern, die Datenart oben im Kaschmir aktualisiert wird. Und schließlich, aber keineswegs wenigstens, wer in Drosselung auf Art von Kontrolle setzen , wie oft ein bestimmter Client basierend auf IP-Adresse, zumindest basierend auf der Art, wie wir konfiguriert haben, kann einen bestimmten Endpunkt treffen. Also richtig wissen, das Limit ist sehr klein, der Zeitraum ist klein, aber das ist nur für unseren experimentellen Zweck in einer realen Situation, wahrscheinlich können Sie andere Anbieter wie Google und so weiter betrachten. Und wenn Ihre Infrastruktur robust genug ist, können Sie ihre, ihre Werte verwenden , um Sie darüber zu informieren, wie Sie in Drosselung setzen können Was ich diese Beispielwerte verlassen, nein. Und was wir tun wollen, ist einchecken, damit wir wissen, dass wir einfach rüber gehen, um Änderungen zu bekommen. Und dann setzen wir unsere Botschaft ein. Und das ist meine Botschaft. Also, wenn ich diesen Check-in mache, gehen Sie einfach voran und begehen und sinken. Also alles, was hier gemacht wird. Und denken Sie daran, dass ich es in den Beispielen an einem Ort getan hätte und Sie ermutigen, es an der anderen Stelle zu versuchen. Aber dann können Sie immer den Quellcode überprüfen und Notizen überprüfen und vergleichen. Und sobald das alles erledigt ist, sind wir bereit, zu unserem nächsten Thema weiterzugehen. 43. Architekturwechsel – Abschnitt Übersicht: Hey, Leute, willkommen zurück. Bis zu diesem Punkt haben wir einiges getan, um unsere AICPA weiterzuentwickeln. Und ja, wir haben ein funktionierendes Produkt TSV hat eine Reihe von Funktionen, die uns helfen, Mehrwert Erfahrungen zu bringen, wenn Menschen mit unserer API interagieren. Viel in diesem Abschnitt wollen wir bestimmte architektonische Entscheidungen diskutieren, die wir wahrscheinlich treffen müssen. Wie Sie sehen können, was wir gearbeitet haben und will seine Werke. Es ist eine gute Software in Bezug auf Sie beworben dieses Feature Sets und es liefert diese Funktionen Sets. Allerdings wird es auf lange Sicht ein bisschen komplizierter wo man in neue gewollte halten muss, um gewisse Dinge getrennt zu halten. Wenn dieses Projekt Mädchen Retinol Rad und sie haben, welche Werkzeugtische und ein paar Repositories auf den Einheiten aus Arbeit und das ist in Ordnung. Aber dann, wenn das Projekt sich erweitern könnte, weil dies die einzige Phase ist, zunehmendem Wachstum müssen wir mitzunehmendem Wachstummehr Daten speichern. Wir müssen noch mehr Dinge tun. Das Projekt wird aufgebläht werden. Was wir jetzt praktizieren, ist das, was alles in einer Architektur genannt wird. Wo, wenn wir ein Projekt in Visual Studio auseinandersetzen, wie Sie sehen, bekommen wir alles, was wir brauchen, um tatsächlich über die funktionierende Anwendung alles in einem Projekt. Aber dann würden viele Leute wahrscheinlich auf diese ungefroren schauen und sagen, naja, wissen Sie, alles ist 1 Proteus und daher nicht die Praxis verpassen. Und das ist wahr. Es gibt philosophische Gründe, oder zumindest greifbare und praktische Gründe , die man irgendwie bestimmte Dinge trennen möchte. Und dann bringt das die Best Practice , die durch die Namenstrennung von Bedenken geht. Also ja, wir haben Ordner in der handeln Trennung von Bedenken bis zu einem gewissen Grad, aber ich denke, er kann ein bisschen mehr verfeinert werden. Was wir in diesem Abschnitt tun werden, ist, alte einige derwichtigsten Elemente der Haupt-API, eines Projekts zu reißen wichtigsten Elemente der Haupt-API, und Projekte zu erstellen, in denen sie live von selbst scannen. Die API wird also nur API-bezogene Dinge sein, und sie wird nur auf andere Projekte verweisen, die datenbezogene Dinge haben , die Geschäftslogik betreffen. Alles klar, das ist es, was wir für diesen Abschnitt tun werden. Also hängen Sie herum und wir werden Spaß haben, während wir mitmachen. 44. Setup einrichten: Also, unsere erste Projektänderung wird für die Datenmodelle nicht sein, also werden wir ein neues Projekt erstellen. In dieser Lösung. Das wollen wir nicht tun. Wir sind eigentlich die Lösung gehen Sie zu Add. Und wir wollen ein neues Projekt. Und dieses Projekt wird einfach eine Klassenbibliotheken sein , wenn Sie es zur Seite haben, das ist in Ordnung. Wenn nicht, können Sie immer einfach nach unserer Klassenbibliothek suchen. Und wenn Sie es gefunden haben, wollen wir eine C-Sharp-Klassenbibliothek. Also wählen wir das aus und ich werde dieses Hotel nennen, das Punktdaten auflistet. Ordnung, also machten wir es offensichtlich, dass dies das Datenprojekt ist, CMV in, in, beim Aufbau all dieser größeren Projekte mehrere Projekte haben. Sie würden wahrscheinlich möchten, dass die Anwendungsschicht Punkte, MVC oder UI oder API hat. Aber das ist nicht unbedingt notwendig und wir haben bereits den Weg eingeschlagen, es zu motivieren. Also, das ist in Ordnung. Sie wollten nur sicherstellen, dass wir repräsentieren, dass es sich bei diesem neuen Projekt um Punktdaten handelt , die repräsentieren, dass es für unsere Datenelemente und Assets ist. Also, wenn das erledigt ist, können wir Next drücken und wir wollen es bei Dotnet 5 behalten. Okay, also hätten wir uns an seinen Standard gewöhnen können, wir hätten alle von ihnen benutzen können, aber dann ist alles Dotnet fünf. Wir wollen also sicherstellen, dass wir in Dotnet 5 bleiben. Alternativ hätten wir dort Standard als Brücke zwischen den verschiedenen dotnet Core Versionen verwenden können. Dotnet Framework auch, was dotnet fünf funktioniert perfekt in dieser Situation. Also drücken wir einfach „Erstellen“. Und sobald wir diese Klassenbibliothek haben, bekommen wir das mit Klassendatei dort drin. Nun, diese Aktivität wird ein bisschen Refactoring erfordern, was einer der Gründe ist, warum Leute dazu neigen, dies vom ersten Tag an zu tun, um den Refactoring-Prozess zu vermeiden und alles, was in Bezug auf das passieren muss. So werden Sie jetzt sehen, dass wir einen neuen Namespace haben, was bedeutet, dass alles, was sich im Datenordner befindet, sicher ist, weil es bereits diese Namespace-Punktdaten haben wird , nur weil es das Hotel ist , das zuhört -Projekt und den Datenordner. Jetzt haben Sie ein neues Projekt, das den gleichen Namespace haben wird, das ist in Ordnung. Also eigentlich kann ich einfach alle diese Akten nehmen. Und ich werde gefangen, nicht kopieren, aber gefangen und auf mein neues Projekt klicken und ich werde einfügen. Also in diesem Cotinine Stück ist fertig und ich werde einfach diese Klasse 1 Nazis löschen, ich brauche es nicht, richtig? Wenn das erledigt ist, werden Sie sehen, dass alle Referenzen noch vorhanden sind, aber dann erhalten wir einige rote Linien, da es mit API-Benutzer keine Bibliotheksreferenz gibt , die uns wissen lassen, was Identitätsbenutzer ist. Das ist also eine andere Sache. Wenn wir in mehrere Projekte aufbrechen, müssen wir sicherstellen, dass wir die verschiedenen Elemente Bibliotheken oder andere darstellen , von denen jede Komponente abhängig sein kann. Also, ehrlich gesagt, dieses neue Projekt ist nichts , was in dem alten existierte, und das ist in Ordnung. Wenn ich also zu den Datenbankkontexten überspringe und ihm ein paar Sekunden gebe, siehst du, dass es mit allen Fehlern aus den fehlenden Bibliotheken aufleuchtet. Nun, einfacher Weg, um diese Kontrollpunkte zu gehen. Und dann kann ich einfach weitermachen und das fehlende Paket installieren. Also würde ich beide tatsächlichen Lastbedarf brauchen. Ich brauche eine Entität für Entity Framework Core. Wissen Sie, dass ich die lokale Version habe, die in meinem Fall 5.02 ist. Möglicherweise haben Sie eine andere Version. Ich kann auch finden und installieren, aber ich bleibe nur bei der lokalen Version. Und da gehen wir. All diese Fehler sind nicht gelöst. Aber dann habe ich immer noch dieses Problem hier mit dem Loch zum Hören, Punktkonfigurationen, nicht Entitäten. Jetzt existieren diese Konfigurationen hier in diesem Ordner, und das sind wirklich Entitätskonfigurationen. Und ich hatte Mapper-Initialisierer in diese Konfiguration aufgenommen. Also, was ich tun werde, ist, den Entitätsordner aus dem Konfigurationsordner zu schneiden und dann zum Datenprojekt zu gehen. Klicken Sie auf Hinzufügen. Ich werde einen neuen Konfigurationsordner hinzufügen. Und die Sache ist, dass wir diese Konfigurationsdateien ausschließlich zum Seeding verwenden. Was die Realität ist, dass diese Konfigurationen für alles verwendet werden können , was Sie in dieser Entität einzigartig sein möchten, wenn sie erstellt wird. Nun, wenn ich in meinem Entity Framework-Kurs ausführe , aber ich werde es leicht genug für diesen halten. Und in diesem Konfigurationsordner werde ich nur Entitäten Ordner einfügen, den wir gerade gefangen haben. Jetzt sitzen alle unsere Entitätskonfigurationen dort, wo die Entitäten sind oder die Modelle sind. Wir müssen ihnen nur ihren neuen Namespace mitteilen, nämlich Hotelliste, Punktdaten, Punktkonfigurationen, die US-Einheiten. Also haben wir nur ein paar. Ich werde das Update nur manuell machen. In einem Fall, in dem Sie mehr haben, möchten Sie wahrscheinlich unsere Kontrolle mögen, finden und aktualisieren Sie sie schneller. Aber wie Sie sehen können, passiert es an diesem Punkt ganz nahtlos. Und dann in der Datenbank-Kontext-Anmerkung, um dies mit Anweisung zu lösen, lasse ich es einfach wissen, dass ich Hotel in Punkt-Datenkonfigurationen Entitäten verwende und da gehen wir, diese Fehler sind jetzt weg. An dieser Stelle habe ich noch ein paar Bereiche, die ich nur durchklicken werde, um zu sehen was sich sonst beschwert, während wir weitermachen. EPA-Benutzer tun es also nicht. Und eine schöne Tastenkombination, wenn Sie diese Dateien bereinigen möchten, haben Sie all diese unnötigen Anweisungen. Sie können einfach Steuerungstaste und E als Ei tun. Und Sie sehen, dass es die Dateien säubert und unnötige Anweisungen entfernt. Alles klar, also lassen Sie mich einfach durchklicken und sehen, was noch vollständig fehlende Referenzen sind. Ordnung, also nein, in meinem API-Projekt beschwert es sich, dass es diesen Punktdaten-Namespace nicht finden kann und natürlich den Datenbankkontext nicht finden kann. So kann ich diesen Datenordner entfernen. Es nicht mehr, nicht mehr als eine Irrelevanz. Gut. Was wissen Sie das ganze Projekt für diese Datendateien? So kann ich das AICPA das neue Projekt veredeln lassen, indem ich zu Abhängigkeiten gehe, Projekt als Referenz hinzufüge und dann auf die Hotelliste Punktdaten klicke. Wenn ich auf OK klicke und dann einen Build ausführen. Sie werden sehen, dass ich einen erfolgreichen Build mit beiden Projekten habe, die im Build erfolgreich sind, ich habe keine Fehler mehr. Und Sie sehen, das war ein nettes, einfaches Verfahren. Es ist immer gut, dies zu tun, wie ich sagte, diese Art von Refactoring-Aktivitäten, wenn das Projekt jung ist. Aber ich werde sagen, es ist nicht so, dass du das immer tun solltest. Manchmal bestimmt Ihr Kontext, was Sie tun müssen. Für ein sehr kleines API-Projekt müsste er wahrscheinlich nicht in 34 verschiedene Projekte aufbrechen , nur weil Sie möchten, dass Ihre Modelle getrennt sind. Aber dann, wenn Sie sehen, dass dieses Budget wachsen könnte und blühen in etwas mehr, als Sie wollten, dass Überlegung früh Alt. 45. die Anwendung Kernprojekt einrichten: In Ordnung, also haben wir erfolgreich unsere datenbezogenen Assets von den Anwendungsprojekten getrennt , und das ist bisher gut. Alles klar, jetzt werden wir zur nächsten Phase unserer kleinen Operation übergehen und nicht wollen, ist irgendwie unseren Anwendungskern einzurichten. Dies würde Schlauch vielleicht wie eine Geschäftslogik und alle anwendungsspezifischen Konfigurationen. Es kann durch viele verschiedene Namen gehen. Der Name, den ich dir gebe, ist eher wie eine vorgeschlagene Nim. Diese Art von deutet darauf hin, was die Schicht ist ein Boot oder das Projekt ist ein Boot. Aber ich sage nicht unbedingt, dass es das ist, was man ständig nennen muss. So können Sie andere Leute mit ähnlich benannten Projekten mit verschiedenen Assets und Konfigurationsdateien sehen , die dort gespeichert werden, sowie vielleicht Geschäftslogik und die Details und all diese Dinge. Also lasst uns damit anfangen. Also werde ich nur noch einmal mit der rechten Maustaste auf die Lösung klicken. Und wir werden ein weiteres Projekt hinzufügen, das ähnlicher Natur sein wird , eine Klassenbibliothek. Und es wird als Hotel Listing Punkte genannt werden. Wir können es Anwendung nennen. Core würde es nur Kern nennen. Ich arbeite nur mit Kern, wo ich es einfach „Total Listing Dot Core“ nenne. Klicken Sie auf Weiter. Und dieses wird auch ein dotnet fünf Projekt sein. Und das schafft, jetzt wie üblich, beginnen wir mit der Standard-Klassen-1-Datei, die wir einfach voran gehen und löschen können. Jetzt im Setup für den Kern werde ich beginnen, indem ich alle Details nehme. Also alle Details, die derzeit im Hotel Listing-Projekt sind, werde ich sie innerhalb des Kernprojekts setzen. Also werde ich einen Ordner erstellen, in dem meine Daten von nicht an leben. In Ordnung? Und ich schneide all diese Hafer und lege sie hinein. Also, eigentlich schneide ich nicht alle ab. Und ich zeige Ihnen, warum. Das sind Details und das sind buchstäblich Modelle. Also alles, was ein Detail bedeutet, es sieht aus wie die Datenklasse und wir hatten eine Reihe von ihnen aus verschiedenen Gründen. Ich werde tatsächlich halten, dass es ihnen leid tut, ich werde die speziell nehmen. Also nehme ich keinen Fehler, ich nehme keine Anfragen param, weil diese irgendwie spezifisch für die API-Ebene waren, nicht das nicht, was die BTO-Ebene, richtig? Also werde ich diese ausschneiden und diese dann in den Detailordner einfügen. Natürlich ging ich weg, um einige Referenzen hier zu reparieren, also nein, mein Namespace hier ist Hotelliste. Punkte. Es sind keine Punkte, Kern, sorry, Punkte. Details. Keine Modelle mehr. Das ist also unser neuer Namespace für Details. Also war es dabei, dass dieser neue Namespace über sie alle zu verwenden. Also wissen sie alle, wo sie leben. In Ordnung? Und jeder sollte in der Lage sein zu sehen , dass jeder weiß, dass er sich alle im selben Namensraum befindet. Alle diese Bereiche sollten zwischen den Dateien verschwinden. Und Sie werden feststellen, dass beim Kopieren und Einfügen bestimmte Dinge einfach ziemlich schnell hinzugefügt werden. Also habe ich ein Feature in Visual Studio aktiviert. Wenn Sie zu Tools gehen, Optionen, dann Texteditor, C-Sharp Advanced, Sie werden hier eine Option sehen, die sagt Hinzufügen fehlt Anweisungen auf p. Also, wenn Sie schneiden und BCR kopieren und einfügen Code selbst wird tatsächlich nur Versuchen Sie, alle using-Anweisungen einzugeben, die möglicherweise fehlen, oder? Das könnte also den Prozess des Verschiebens von Code in der Zukunft beschleunigen. Jetzt, da wir alle unsere Details verschoben haben, wenn ich einen Build mache, weiß ich, dass ich für eine Reihe von Fehlern sein werde , weil alles, was sich auf die Details verlassen wird, nicht mehr Details sind und das ist in Ordnung. Das ist ein Teil der andere Faktor. Ich möchte auch meinen Dienstordner übergehen, also werde ich das einfach kopieren und in den Anwendungskern einfügen, richtig? Und dann noch einmal, wir müssen diesen Namespace aktualisieren. Also dieser hier ist kein Hotel, der Dot Core, Dot Services auflistet. Es wäre dasselbe für seine Schnittstelle. So können wir das Update schnell treffen. Jetzt sehen Sie all diese Kräuter, weil es nicht weiß, wo alle diese identitätsbezogenen Optionen auf diese Erweiterungskonfigurationen umzäunt werden sollen . Und einige dieser Bibliotheken sind einfach nicht in diesem Projekt. In diesem Moment. Nun, bevor ich beginne, die Projektreferenzen hinzuzufügen, hinzufüge und hinzufüge, möchte ich nur zuerst alle Schlüsseldateien übergehen. Also die nächsten sind diejenigen, die das Repository-Zeug sein würden. Also ich Repository und Repository. Wir können die schneiden. Und hier drüben basiert. Und Sie wissen, an diesem Punkt würden einige Leute tatsächlich nur zusammenführen diese Ordner sind wahrscheinlich nur einen Ordner, der Repository sagt und dann gibt es beide Schnittstellen und die Verträge und die Implementierungen. Du musst das nicht unbedingt tun, es liegt an dir. Aber ich ging, um die Ordnerstruktur zu behalten. Und das wird jetzt Dot Core I Repository leben. Und was ich tun werde, ist, das Hotel zu kopieren, bitte den Kern 100. All diese Referenzen durch und durch unsere Projekte mit dem neuen Namespace. Am Ende dieses Prozesses weiß jeder, dass er ein neues Zuhause hat. Aber wieder einmal, einige der Predict Referenzen sind immer noch für einen Spaziergang gehalten. Das ist in Ordnung. Irgendwann werden wir dorthin kommen. In Ordnung. Also eine andere Sache, die ich verschieben möchte, ist diese Service-Erweiterungen Punkt CSS Datei. Also in der Startdatei hatten wir alle diese Diensterweiterungen aktiviert, so weiter. Wie zu diesem Zeitpunkt leben sie alle innerhalb des AICPA-Projekts. Aber ich möchte sie nicht unbedingt in den API-Produkten. Also werde ich diese Service-Erweiterungen 0 nehmen und ich werde es innerhalb des Kerns platzieren. Und noch einmal werde ich es wissen lassen, dass es dem Listing Punkt gesagt wird. In Ordnung? Nun, was Sie mit dieser Art von Bewegung sehen werden, ist, dass alle diese Verweise auf alle diese Bibliotheken nicht mehr speziell im API-Projekt enthalten sind. Sie werden wissen, live innerhalb des Kernprojekts. Und dann wird die API Bridget nur einen Verweis auf das Kernprojekt machen. Wenn wir also Bibliotheken von Drittanbietern hinzufügen, möchte ich später vielleicht ein Mailingsystem hinzufügen. All diese Dinge würden wir einfach weiter zum Kern hinzufügen, weil der Kern sofort zwischen der API und der tatsächlichen Funktionalität geführt wird , die mit Anwendungen von Drittanbietern interagiert, oder? Deshalb sind sie hier Repositories, weil es mit der Datenbank oder den Diensten interagiert , direkt mit der API oder dem Identitätsdienst hier ist. Vielmehr ist das Detail da, weil es mit den Dritten Menschen interagiert sind. Also alles, was irgendwie mit Dritten verbunden ist, würde irgendwie in den Kernbereich gehen. Und wenn in der Datenbank verwandt geht innerhalb des Datenprojekts. Und dann war alles, was die Anwendung selbst ist, in unser API-Projekt eingebunden. Beachten Sie, dass wir immer noch diesen coolen Controller und das Modell haben. Also werde ich diese beiden eigentlich nur löschen, weil wir sie wirklich nicht brauchen. Aber es gab zunächst gut für Informationszwecke, zumindest, richtig? Ich denke, unsere Projekte sehen offensichtlich gut aus, abgesehen von den Pfeilen, aber so sieht unsere Lösung aus. Und wenn man hier schaut, sieht es viel kompakter aus. Es ist viel einfacher, genau zu sehen, was Sie brauchen, wenn Sie es brauchen. Wenn Sie dort nichts tun, können Sie immer zum Kern gehen und voran gehen und Änderungen auf diese anwenden. Und dann können Sie immer einfach die Liste der Projekte entsprechend erweitern, sorry, Entitäten nach lesen. Lassen Sie uns also einige der Abhängigkeiten hinzufügen, die im API-Projekt fehlen. Ich werde die Projektreferenz zum Kernprojekt hinzufügen. Und im Kernprojekt und wann die fehlende Referenz zum Datenprojekt hinzugefügt werden soll. Nun, da diese Projektreferenz gemacht wird, wenn wir zu einem unserer Controller oder irgendetwas zurückgehen, möchte ich nicht, dass jemand anfängt, eine Säuberung ist. Ich werde nur Steuerungsschlüssel tun, sorry, alle fehlenden ungenutzten Anweisungen loswerden. Und dann kann ich meinen Kontrollpunkt verwenden, um die neuen Referenzen einzubeziehen, oder? Also für all diese schmalen Linien kann ich einfach Control dot-dot die using-Anweisungen tun. Und um es für diese bestimmte Aktivität einfach zu halten, was ich tun möchte, ist nur sicherzustellen, dass ich alles, was mit einer Kontrolle gelöst werden kann. Das ist es, was ich mich überhaupt auf sie konzentrieren möchte. Also, wenn ich zur Steuerungstaste gehe, loswerden die auf US-Aussagen und dann Kontrollpunkte, um die fehlenden hinzuzufügen. Und wenn ich sehe, dass ich keine Fehler mehr habe, machen Sie weiter. Wenn ich immer noch Arizona-Symbol liebe, löse es mit den Vorschlägen aus dem Visual Studio, dann lasse ich es in Ruhe. In Ordnung, also werde ich das in Ruhe lassen, richtig? Nein. Was passiert, ist, dass Sie Pfeile sehen werden , weil bestimmte Bibliotheken fehlen. Wir kümmern uns in der nächsten Zeit um die fehlenden Bibliotheken. Also wollte ich nur diese eine Art eng halten und mich darauf konzentrieren, diese Projekte einzubeziehen. Projektreferenz wird ausgeführt. Alles klar, also gehen Sie weiter und schließen Sie die fehlenden Anweisungen ein. Und sobald all das erledigt ist, denke ich, dass die meisten unserer Fehler, die aufgehoben werden würden, innerhalb unserer Kernprojekte liegen und spezifischeren Wert anstelle der Service-Erweiterungen innerhalb des Repositorys auch. Okay, wenn wir zurückkommen, machen wir eine letzte Säuberung und führen dann einfach einen Test durch, um sicherzustellen, dass alles wie erwartet mittickt. 46. Bereite die Reinigung und Test: Alles klar, Leute, jetzt müssen wir alle Fehler aufräumen , die wir von unserer vorherigen Aktivität hinterlassen haben. Was ich jetzt offen habe, ist die Hotellisten-Anwendung. Entschuldigung, die Projektdateien des Hotels. Alles, was Sie tun müssen, ist auf die Projektdatei zu klicken. Nur ein Klick und es zeigt Ihnen alle Pakete, die innerhalb dieser Datei referenziert werden. Keine einfache Möglichkeit, diese Projekte zum Kernprojekt zu bringen , besteht darin, die Elementgruppe zu kopieren. Eigentlich werde ich einen Schnitt machen, weil diese eher wie Bibliotheken von Drittanbietern sind. Die einzigen, die wahrscheinlich hier bleiben müssten wären wie der Auto-Mapper, weil wir hier noch die automatische Konfiguration haben. Und selbst dann. Ich denke, wir könnten das bewegen. Kommen Sie, um es zu überlegen, also werde ich bewegen, dass ich weiß, dass ich sagte, es sei eine Aufräumung. Nein, ich mache tatsächlich noch eine Bewegung. Ich werde Konfigurationen schneiden und wieder unten im Gericht sein. Drittanbieter-bezogene Dinge, die Sie in diesen Ordner einfügen möchten. Und ich sage nicht unbedingt, dass dies sein muss, es sind nur drei verschiedene Projekte, sozusagen drei verschiedene Schichten. Einige Personen hätten tatsächlich den Kern, der sich von der Geschäftslogik unterscheidet. Aber dann ist das nicht wirklich unser Geschäftsmodell, weil alles generisch ist, und es ist so, dass Sie innerhalb arbeiten müssen. Wenn Sie bestimmte Repositories hätten, die die ganze Zeit wie bestimmte Operationen taten, würden Sie wahrscheinlich ein anderes Projekt haben wollen , das diese Art von Sachen speichert, richtig? Es ist also nicht unbedingt, dass es drei Projekte sein müssen. Wenn Sie meinen Kurs auf Clean Architecture machen, sehen Sie, dass Sie mit fünf oder sechs verschiedenen Projekten enden können. Und was wir nur auf Architektur nennen, aber wir gehen nicht auf all das in dieser speziellen Aktivität ein. Also nein, dass ich diesen oberen Anfangslaser überzogen habe. Wir müssen natürlich unseren neuen Namespace einrichten. Ich habe nur Steuertaste, um die Datei zu bereinigen. Und natürlich haben wir eine Reihe von Bereichen, weshalb wir hier sind. In diesem Projekt für die APIwerde ich diesen gesamten Elementgruppenabschnitt nehmen, werde ich diesen gesamten Elementgruppenabschnitt nehmen und das ist eine viel schnellere Möglichkeit all diese Referenzen in andere Projekte zu bekommen, als in neue Get und sie eins nach dem anderen, wie wir es anfangs getan haben, oder? Also werde ich sie einfach setzen. Und dann geh runter zum Kern und ich werde sie durchbohren, also werde ich sie einfach über die Artikelgruppe setzen, die da ist, und dann werde ich das speichern und einfach bauen. Und nach dem Build habe ich immer noch eine Reihe von Fehlern, aber was passiert ist, ist, dass es alle diese Referenzen wiederherstellt und registriert. Also, das ist in Ordnung. Wir können alle diese Probleme lösen. Also, wenn ich rüber gehe und zurück in das API-Projekt springe , sehen Sie, ja, wir haben eine Reihe von Fehlern darin ist der Anfang von uns. Also sind wir am Anfang dieser Falldatei unseres API-Projekts erste Aktion Steuerschlüssel. Und wenn Sie die Tastenkombination nicht mögen, können Sie tatsächlich einfach drücken, dass es ein Pinsel ist es dort. Ich hatte gerade Läufe, die bereinigen, wissen Sie, all dies sind Überschriften, die sich auf die Diensterweiterungen beziehen , die jetzt im API-Projekt fehlen. Also, wenn ich das kontrolliere und dann einen Vorschlag einführe, fügt es die using-Anweisung für das Kernprojekt hinzu. Und sieh dir das an. Die meisten von ihnen gehen weg. Jetzt sagt dieser, er möchte Herbstpapier hinzufügen, und er kann den Mapper nicht finden, den Laser initialisieren. Bevor ich das angreife , weil sie etwas Besonderes tun werden. Damit lassen Sie mich einfach voran und fügen Sie die anderen fehlenden Referenzen für die Arbeitseinheiten und unseren Eye Off Manager hinzu. Und mit all dem erledigt, haben wir die meisten, wenn nicht alle, der Fehler behoben . Ok? OK. Dies liegt daran, dass im Ziel für den Fix immer noch Fehler vorhanden sind. Also, das ist in Ordnung. Konzentrieren wir uns einfach auf den Auto-Mapper. Nein, was ich tun kann, ist tatsächlich eine Erweiterungsmethode zu erstellen, die sich automatisch registriert , da der Initialisierungslaser nicht mehr in unseren API-Projekten ist, also müssen wir uns darüber keine Sorgen machen. Was wir tun werden, ist dieses bisschen Code neu zu schreiben und Sie werden sehen, warum in ein paar. Für nein, lassen Sie uns voran gehen und fügen Sie die fehlenden using-Anweisungen für die anderen beiden Zeilen hinzu. Und dieser Fehler ist da, wahrscheinlich, weil es immer noch ungelöste Geheimnisse mit den Dateien gibt, die referenziert werden. Also, das ist in Ordnung. Konzentrieren wir uns also auf das Herbst-Obermaterial. Also, was ich tun werde, ist eine Service-Erweiterungsmethode hinzuzufügen , die Herbst oben rechts konfigurieren wird. Also haben wir schon ein paar geschrieben. Ich werde nur eine nehmen und es irgendwie duplizieren, und dieser wird sehen, Auto Mapper konfigurieren. Und in diesem, wir werden nur so etwas wie Dienstleistungen sehen, die Herbst oben und Montage hinzufügen , die Montage bekommen. Es gibt also Situationen, in denen Sie möglicherweise mehrere Mapping-Konfigurationen haben. Und versteh mich nicht falsch, wir hätten die gleiche Art von Karte verwenden oder unseren Code aus unserer Start-Up-Datei initialisieren können, ich hätte diese genaue Syntax wiederverwenden können. Richtig. Das würde funktionieren. Das ist in Ordnung, denn solange er weiß, wo der obere Initialisierungslaser ist, wäre es damit in Ordnung, wie Sie sehen können. Aber wie ich es erklärt habe, gibt es Zeiten, in denen Sie mehrere obere Anfangsstufen haben könnten, vielleicht unterschiedliche Endpunkte haben oder Sie so viele Details und Entitäten haben , dass Sie am Ende verschiedene obere anfängliche Riser mit verschiedenen Konfigurationen für verschiedene Situationen, was auch immer es am Ende sein könnte, wenn das System auf diese Größe wächst, können Sie diesen allgemeinen Ausdruck verwenden, bei dem Reflexionen tatsächlich nur ausgehen und jede Datei finden das passt zu dem, was Autumn Upper sucht, was meine obere Initialisierung oder Erben von Herbst oben rechts sein würde. Also jede dieser Zeilen würde hier perfekt funktionieren. Aber mein Punkt ist, dass wir es ausschieben und hier setzen müssen, denn dort initialisieren sich die Oberen in unserem Leben. Also am Anfang, dass CSV-Datei, Ich kann jetzt sehen konfigurieren. Herbst-Oberteil. Und das wäre ein Fall geschlossen. In Ordnung. Also ich denke, ich werde mit dem allgemeineren Ansatz vorgehen , bei dem wir nur sagen, dass Sie Assembly ausführen und Herbst entsprechend anzeigen. In Ordnung. Also habe ich nur ein bisschen nach oben gescrollt und ich sehe den Exception-Handler und dieses Fehlermodell, wir haben es nicht verschoben. Also ja, ich habe die Entscheidung getroffen, sich nicht zu bewegen, weil ich dachte, es wäre besser in der API gewesen. Offensichtlich wird es im Kurs gebraucht, also ist das kein Problem. Ich nehme nur das Fehlerobjekt und wir können. Ich will es nicht in die Details geben. Nun, es ist nicht ein wenig. Also werde ich einen neuen Ordner namens Model CSC erstellen, den ich irgendwie spezifisch oder zumindest so gut wie ich sein kann, wo ich was habe. Denn am Ende des Tages Trennung von Bedenken Ihr Projekt wachsen. Aber dann hilft es Ihnen, zielgerichteter darauf zu sein wo Sie platzieren, was ist und was Sie Ihre Dateien und Ordner benennen, richtig? Also hier habe ich den AirDots Fall, und ich lasse ihn einfach wissen, dass er jetzt innerhalb des Dot Core Dot Models Ordners lebt, und das sollte sich um den Fehler kümmern, den wir in dieser Datei sehen. In Ordnung. Noch einmal, ich muss nur meine Reinigung machen. Steuerungstaste. Befreien Sie sich von allem, was nicht verwendet wird und nicht benötigt wird und springen Sie bis zum frühesten. Wir sehen, dass wir von 50+ Pfeilen auf Nr. 40 plus. Das ist in Ordnung. Also lasst uns zum Mapper springen und wir sehen hier, dass es sich über die beschwert. Profile, wenn ich kontrolliere, dass ich Autumn Upper verwende, kümmert sich das um eine Sache, wenn ich das kontrolliere und die using-Anweisungen oder die Details hinzufüge , die sich um eine andere Sache kümmern. Und genau so sind alle Pfeile weg. Und dann wird diese Liste um etwa 15 reduziert. Also, wenn wir jetzt zur nächsten lästigen Datei springen , verteile ich harte Arbeit. Er weiß nicht, wo es ist. Also können wir einfach voran gehen und hinzufügen, dass mit Aussage und allem, was wir nicht finden können, wir kontrollieren das einfach richtig? Es kann also den Datenbankkontext nicht finden. Das ist alles. Okay, da ist es. Verwendung von Daten zum Hotelangebot. Kein Problem. Und das sollte sich um alle anderen Dateien kümmern, die es nicht finden kann. In Ordnung. Und dann haben wir ein paar Pfeile, aber die Kontrolle, die diese nicht lösen wird. Das bedeutet, dass ich lösen muss, was in diesen Dateien ist. Sie sehen also einige davon, obwohl es viele Fehler gibt, sind viele von ihnen in einer Datei enthalten. Also, indem Sie IE mit Anweisungen oder etwas reparieren , wo die Fehler sehr schnell loswerden. Also lasst uns zu den anderen Dateien springen. Dies ist der Autoren-Manager muss nur eine Anweisung dafür verwenden und nur einen Steuerungsschlüssel zum Aufräumen. Sonst noch etwas? Wenn ich zu ISPManager springen, so werden Sie feststellen, dass dies die blauen Marker hier an den Rändern sind. Diese erlauben mir also, zu den Dateien zu springen, die geerbt werden oder die ich von rechts erbe. Also kann ich immer einfach sagen, OK, welche Dateien von ISPManager erben? Und es wird mich nie dorthin bringen. Also, um das zu aktivieren? Und ich habe den Leuten das gezeigt, und es hat bei manchen nicht funktioniert. Es hat für einige funktioniert. Aber Sie können einfach zurück zu Optionen Texteditor C-sharp Advance, und am Ende werden Sie Vererbungsmarge sehen, die experimentell ist. Also, wenn es nicht funktioniert, verklagen Sie mich bitte nicht. Aber im Allgemeinen sollte es so funktionieren, wie Sie sehen es hier für mich verwendet wird, sodass ich einfach zu ispmanager springen und das mit Anweisung und Kontrolle Katie behebenkann dass ich einfach zu ispmanager springen und das mit Anweisung und Kontrolle Katie beheben , um die Fehler und die unnötigen loszuwerden. In Ordnung. Und wenn ich auf die Liste zurückgehe, kümmert sich das um einiges, wenn ich hier rüber springe. Steuertaste hier. Also Anfrage Schusswaffen ist tatsächlich vom Repository benötigt auch. Das bedeutet, an dieser Stelle habe ich keine Verwendung für den Models-Ordner. Also werde ich Anfragen params nehmen, die innerhalb von Modellen in unserem Kernprojekt platziert sind, lassen Sie es, noch sein neues Zuhause, das Dot Core Dot Modelle ist. In Ordnung. Und ich werde nur diesen nicht unnötigen Ordner aus unserem Projekt entfernen. In Ordnung. Also, wo war dieser Fehler? Also beheben wir diesen Fehler. Lass mich einfach rüber springen und ich denke, wir sind im generischen Repository. Aber während ich hier bin, lass es mich einfach kontrollieren. Sie werden einige Fehler loswerden und dann kann ich verwenden, was ich Vererbungsmarge verwenden kann , weil es einen Fehler im generischen Repository gibt. Wenn ich also zu einem generischen Repository überspringe, kann ich dies mit Anweisung für Questfeuerwaffen reparieren. Und sobald das behoben ist, sollte ich in der Lage sein, zum generischen Repository zurückzukehren und eine fehlerfreie Datei zu sehen. Wenn nicht, lassen Sie mich das einfach bei der using-Anweisung steuern. Und das ist in Ordnung. Und dann der Verwendungsaussage für West-Schusswaffen. Das ist in Ordnung, also meine ich, du wirst vielleicht nicht die gleichen Fehler in der gleichen Reihenfolge durchlaufen , die ich bin, nur weil ich gerade gerade mit mir selbst aufstand, ich merke, dass ich ein bisschen schnell bewegen könnte, aber ich hoffe, du bist Wertschätzung des Denkprozesses hinter der Reflexion über das, was auf dem Weg fixiert werden muss. In Ordnung. So können Sie immer frühestens weiter ticken. Und wie Sie sind, wenn Sie Anweisungen als Ihre Fix-Namespaces verwenden, werden Sie feststellen, dass dies früh nur unsere Reduzierungen und Reduzierungen reduziert. Also hier bin ich auf sechs Fehler hinunter. Wir haben mit 50 angefangen und ich bin auf sechs. Also fügen Sie einfach die using-Anweisung für dieses Fehlermodell hinzu, das uns auf fünf reduziert, und steuern Sie es dann, um diese Datei zu bereinigen und fügen Sie dann die Verwendung für Questfeuerwaffen hinzu. Und wir sind fast da, fast zu Hause frei. Da gehen wir. Und einfach die Steuertaste. Sehen Sie das oben und da gehen wir, fehlerfrei, lassen Sie mich einen Build machen. Und voila! So haben wir jetzt erfolgreich erstellte Projekte aufgebaut. In Ordnung. Also lassen Sie uns es für eine Spin nehmen, denn ja, das sieht schön aus. Unser API-Projekt ist jetzt viel schlanker als es war, als wir anfingen. Aber funktioniert es immer noch? Also lasst uns das für einen Spin nehmen. In Ordnung. Es wird hochgefahren, und das ist ein gutes Zeichen. In Ordnung. Also lasst uns etwas Einfaches ausprobieren. Ich werde versuchen, unsere Registrierung richtig zu machen. Also versuchen Sie es aus und ich werde als Benutzer il1r2 Beispiel registrieren mein Passwort geworden ist ein kompliziertes genug Passwort, wie wir wissen, und wir haben getestet, und ich will die Regel Benutzer. Alles andere, ich gehe einfach und klicke dann auf Ausführen, und dann bekomme ich eine totale Antwort, die darauf hindeutet, dass es erfolgreich war. Das bedeutet also, dass alles, was wir konfiguriert haben, immer noch richtig funktioniert. Alles, was wir getan haben, war, die Dateien zu verschieben, unser Projekt ein wenig sauberer zu machen und ein bisschen einfacher zu warten und sogar zu testen. Also werde ich nicht viel über Komponententests sprechen, aber einer der Hauptgründe, warum Leute neigen dazu, ihre Dateien zu trennen , die die Stabilität des Codes eins zu erhöhen und es ein bisschen modularer zu machen. Es ist also einfacher zu testen und zu sehen, was getestet wird, wenn Sie mehr über Komponententests möchten. Ich habe eine Kurstest-gesteuerte Entwicklungsgeschwindigkeit auf dem Kern, die Sie tun können um ganze Komponententests in einer ähnlichen Situation zu sehen. Mit all dem, was in der nächsten Lektion erledigt wurde, werden wir nur alle Änderungen überprüfen, die wir vorgenommen haben, den Denkprozess hinter diesen Änderungen. Und ob es wirklich notwendig ist oder nicht. 47. Review und Vorteile: Na gut, Leute, willkommen zurück. In dieser Lektion werden wir nur alle Änderungen überprüfen, die wir an unserem API-Projekt vorgenommen haben. einmal, was wir angefangen haben, wird allgemein als All-In-One-Architektur bezeichnet , denn in einem Projekt hatten wir Database Connectivity, wir hatten Geschäftslogik, wir hatten alles, okay, so genannte Konfigurationen, Drittanbieter-Referenzen, et cetera. Jetzt, wie wir gesehen und getestet und bewiesen haben, funktioniert alles wie erwartet. Was wir hier getan haben, ist nicht unbedingt, um die Funktionalität zu verbessern. Weil wir Funktionalität hatten. Was wir getan haben, ist, vielleicht Lesbarkeit, Wartbarkeit und nur das gesamte Layout des Projekts zu verbessern . Damit wir langfristig wissen, wohin wir gehen müssen, um zu finden, warum. Es gibt viele Aspekte, die Sie einem API-Projekt in Bezug auf die Architektur außerhalb des Projekts hinzufügen können . Und ich durchmache viele davon in meinem Kurs auf solide Architektur mit sodded Entity und Architektur in ASP.Net Core. So können Sie diesen Kurs überprüfen, wenn Sie sehen wollen, wie viel Sie dachten, Prozess wirklich in den Aufbau gehen gehen. Und APIs Architektur. Ich habe das Testen erwähnt. Testen ist ein bisschen mehr möglich, wenn Sie diesen Ansatz verfolgen und alles trennen. So können Sie auch meinen Kurs zum Komponententest überprüfen. Aber mein Punkt ist, dass wir an dieser Stelle das Layout der Dateien geändert haben, aber wir haben nicht weggenommen werden, um die allgemeine Funktionalität hinzugefügt. So kann Funktionalität durch alle in einer Architektur erreicht werden, wie wir in einer Kugel sehen. Wir haben dies getan, um die Wartbarkeit und Lesbarkeit unserer Dateien zu erhöhen. Lassen Sie uns also alles überprüfen, was wir von Anfang bis Ende getan haben. Das erste, was wir getan haben, war, dieses Datenprojekt zu erstellen. Und in diesen Datenprojekten setzen wir alle unsere Konfigurationen für verschiedene Entitäten sowie alle Entitäten sowie den Kontext ein. Wir hätten diese unmade einen Ordner nur für die Entitäten weiter trennen können. Die Art und Weise, wie Sie es auslegen, basiert auf Luftkontexten. Hoffe, Sie finden es am meisten lesbar für Sie. Oder das ganze Jahr Projekt. Teamkollegen sind führend, wir werden es am unleserlichsten finden. Jeder hat einen anderen Standard. Ich versuche nicht, mit meinen Anregungen vorschriftsmäßig zu sein, oder? Indem wir also die Datenobjekte von der API selbst trennten, haben wir alle Bedenken beider datenbankbezogenen Assets von der API, von der Anwendung selbst, oder? Und dann, damit es immer noch weiß, wohin er gehen und nach den datenbezogenen Objekten suchen soll. Wir setzen einfach eine Projektreferenz auf das Datenprojekt ein. In Ordnung, zusammen mit dem kam jede andere Referenz Dritter wie der Identitätskern des einen und so weiter. Jedes Mal, wenn Sie etwas einfügen, das war, wann immer Sie etwas einfügen, das eine Referenz von Drittanbietern hat, muss das Projekt selbst wissen, was diese Drittanbieter-Referenzen sind. Das zweite, was wir taten, war, die Verpflichtung auf Kern und all das allgemeine Denken hinter demKern zu schaffen die Verpflichtung auf Kern und all das allgemeine Denken hinter dem , ist, dass es mit allem interagieren muss, was seine dritte Partei ist. Sobald Sie also etwas haben, das Drittanbieter ist oder mit einer Bibliothek von Drittanbietern, unserem System, vermitteln muss , können Sie darüber nachdenken, es in den Kern zu setzen. In Kontexten haben wir also den Mapper-Initialisierer, der für Herbstoper ist. Das ist eine Bibliothek von Drittanbietern. Das ist der Deal, der dritte Teil ist, dass wir verwenden, um Daten zu übertragen. Wir haben die Repositories, diese interagieren mit der Datenschicht soleus. Sie interagieren mit der Datenbank, bei der sich um einen Drittanbieter handelt. Wir haben das da gemacht. Das könnte auch als Geschäftslogik verdoppeln, oder? Wenn wir auf dem Weg benutzerdefinierte Repositories verwenden, haben wir hier Modelle, da bestimmte Operationen diese Modelle erfordern. Und dann haben wir die Dienste, die mit der Identität in dieser Situation interagieren. Dann habe ich diese Service-Erweiterungen auch in das Kernprojekt eingefügt , denn hier registrieren wir alle Bibliotheken von Drittanbietern, auf die wir keine direkten Verweise in unserer API treffen möchten. Also lassen Sie mich zum Beispiel IT-Direktor, zu ihnen im Kernprojekt. Und dann richten wir unsere Methoden so ein, dass wir die Registrierung durchführen können. Das ist in Ordnung. Und dann legen wir all das in den Kern null für die API basierend auf der Art und Weise, wie wir sie erstellt haben. Basierend auf der Art und Weise, wie es konstruiert wurde, würden manche Leute es tatsächlich haben, dass die API und nie die Datenschicht selbst sieht, richtig? Aber wegen allem, was wir unsere Controller gebaut haben und wir verwenden die Einheit der Arbeit, Es ist irgendwie schwierig, das zu tun, weil wir sie zu einem Freund machen müssen, Derek, oder zum Beispiel, einige der Entitäten. Wenn Sie also über dünne Controller sprechen, die auch Louis in meinem sauberen Architekturkurs geworfen hat, versuche ich nicht, es ist da irgendetwas zu markieren, denn ich mache Sie nur wissen, dass Sie dorthin gehen und es sehen können. Aber wir sprechen von dünnen Controllern, bei denen wir viel weniger machen. Aber das ist besser verstanden, wenn Sie eine Grundlage haben, die mehr so aussieht. Du verstehst also, warum du bestimmte Entscheidungen treffen würdest. Also ist es gut, diesen Kurs zu machen und dann diesen zu machen. So können Sie diese Art von Aufwärtsbahn in Bezug auf Denken und Verständnis, wie APIs entwickelt werden, erhalten. Aber mein Punkt ist, dass wir auf Datenprojekt und das Kernprojekt von der API verweisen müssen, um die Referenzen zu erleichtern , die auf unsere Einheit von wo zu unseren Entitäten benötigt werden. Und in unserem Startup dot cs, alle unsere benutzerdefinierten Registrierungsdienste, die verschwunden sind. Alles klar, also spielen all diese kleinen Dinge eine große Rolle bei all dem Zusammenkommen. Und so ziemlich das ist alles, was wir tun werden, um diese Hotellisten-API zu refactorieren. Wieder einmal haben wir ein Projekt genommen, es in drei geteilt, haben mehr Dateien, haben wahrscheinlich mehr Ordner, aber raten Sie was? Langfristig wird es viel lesbarer und einfacher zu pflegen sein. Nun, bevor wir das einchecken, gibt es noch eine weitere Anpassung, die vorgenommen werden muss. Und als ich dir diesen Monolog gab, Justin, habe ich es bemerkt. Also haben wir diesen Migrationsordner, der mich eingeschlossen hat. Ich weiß nicht, warum ich es so übersehen habe, aber dieser Migrationsordner sollte nicht hier sein. Es sollte in unserem Datenprojekt , weil es alle Datenbankmigrationen darstellt, richtig? Also werde ich es zitieren und ich werde es in die Daten einfügen. Und nur aus Konsistenzgründen werde ich sicherstellen, dass jeder von ihnen den Punkt darin hat. Namespace, richtig? So können wir, es gibt ein wenig durch jeden öffnen und ihm Punktdaten geben. Ebenso wie für den Snapshot möchten Sie ihm Daten geben. Und während wir noch in Schnappschüssen sind, würde ich sehen, dass wir diese airable haben, um Identitätsspalten zu verwenden. Also denke ich, das ist unsere Referenz oder mit unseren Projektzehen, wir schließen nur den ASP NET Core Identity Entity Framework Core ein. Aber wenn ich mich nicht irre, brauchen wir auch den SQL Server. Denken Sie also daran, dass wir diese gesamte Artikelgruppe aus unserem API-Projekt genommen haben. Also brauche ich definitiv diese Bibliothek. Ich werde es nur kopieren, weil ich nicht sicher bin, Abhängig davon, aber ich werde es kopieren und in das Datenprojekt einfügen. Und wenn ich hierher zurückkomme, nachdem es seine kleinen Schecks und Ausgewogenheit gemacht hat, oder wenn ich einen Build erzwinge, sollte dieser Fehler verschwinden. Und ich sollte wissen, fehlerfreie Projekte haben, okay, ich habe immer noch einige Fehler. Und diese Fehler werden in den automatisch generierten Dateien angezeigt , die mit den Migrationen übereinstimmen. Also lassen Sie mich sehen, ob die Angabe des Namespace den Fehler lösen würde und es von dort tut. Also an diesem Punkt, weil wir nur das Auspacken hier geöffnet haben, um eine andere Aktivität zu geben. Aber ich werde an dieser Stelle nur auf Ihre Optionen hinweisen. Sie können mögen, oh, wir haben nur vielleicht vier oder fünf Migrationsdateien, die Sie durchlaufen können und all das tun und die Namespaces aktualisieren. Sie können auch einfach die Migrationen entfernen, da Migrationen wirklich nur die Historie der Änderungen der Datenbank sind. Aber dann, wenn die Datenbank dort ist, wo Sie sie haben möchten, die nächste Migration, auf der Sie sich befinden. Wenn alles frei von Migrationen ist, hätte die neueste Version der Datenbank. Jetzt ist das alles in dev. Ich sage nicht unbedingt, dass dies der Grund ist, warum Sie tun sollten, aber wieder, Kontext ist alles, wo etwas hier zu entwickeln, wir haben Seoul geliefert, lassen uns ein Experiment machen und ich werde alles hier noch Fullers tun. Nein, ich vertusche nichts. Ich möchte, dass wir genau sehen, wie das von Grund auf funktionieren würde, richtig? Also, sobald ich es gerade getan habe, war über den Migrationsordner zu verschieben weil die Migration nicht in der APA sein sollte, ist das in Ordnung. Wenn ich jedoch Migrationen durchführe und auf Löschen klicke, lösche, entferne diesen Migrationsordner, und gehe dann zu meiner Package Manager-Konsole. Nein, ich kann hier keine Migrationen durchführen, weil ich die Tools brauche. Also lass mich einfach rüber gehen. Also zeige ich dir nur alles, was wir brauchen. Wir brauchen Werkzeuge, die wir das Design brauchen. Gibt es eine andere Bibliothek, die ich brauche? Das glaube ich nicht, oder? Nein. Und ich brauche vielleicht nur den Entity Framework Core, wenn ich ihn nicht bereits habe. Also lassen Sie mich einfach diese beiden Bibliotheken graben. Aber drüben im Datenprojekt. Und ich werde einfach wieder rüber springen. Und ich werde auch Entity Framework Core nehmen und dieses Projekt einbauen. Also, wenn ich Migrationen null im Paket verwalte Nachteile, Package Manager-Konsole. Ich muss sicherstellen, dass mein Standardprojekt auf das Datenprojekt festgelegt ist , weil dort der Kontext lebt, oder? Also, wenn ich sage, fügen Sie Bindestrich Migration an diesem Punkt, sorry, Name, es wäre frisch. Mein zustimmt erschossen. In Ordnung. Und ich bekomme einen Fehler, weil ich immer noch das Design-Paket vermisse. Das war es, was ich wirklich wollte. In Ordnung, also lassen Sie uns einfach diese Design-Pakete hinzufügen. Also, ich möchte NuGet nicht verwenden und nach Microsoft dot Entity Framework Core Design suchen. Und da gehen wir. Also das gehen Sie voran und installieren Sie es. Jetzt sehen Sie, dass die Version hier viel höher ist als die Version, die ich verwende. Das ist in Ordnung. Ich werde es auf die Version auf fallen lassen , weil ich mein Projekt konsistent halten möchte. Was Sie sicherstellen, dass Sie die Version verwenden, die Sie Kunst haben. So installieren. Und sobald das erledigt ist, werde ich sagen, c wissen, dass Design hinzugefügt wird, oder? Also wollte ich zurück und es ist alles gut, weil ich die Anzeigenmigrationsbefehle durcheinander gebracht habe. Also frische Migration, drücken Sie die Eingabetaste. In Ordnung, also wiederholt sich der Fehler. Oh, es tut mir so leid. Daher sollte dieses Paket auch im Startup sein. Das Startprojekt ist die API-Projekte. Ich werde nur da rauf springen. Und ich mache das nur schnell. Also werde ich nur einen Elementgruppen-Modus erstellen, TIM-Gruppe. Und in dieser Artikelgruppe setze ich nur das Design ein, das ich gerade aus dem Projekt genommen habe. Okay, also lassen Sie uns das noch mal versuchen. Also sehen Sie, ich sagte, ich werde das von Grund auf tun, damit Sie den Prozess sehen, die Pfeile sehen und wissen, was zu erwarten ist. Jetzt sehen Sie, ich habe eine erfolgreiche Migration. Und wenn wir uns das ansehen, sehen wir, dass wir nur eine Migrationsdatei haben. Alles klar, und es geht in ihren Karten-Namespace, und der automatisch generierte Wunsch geht in den aktuellen Namespace, das ist in Ordnung. Aber wenn wir durch scrollen, würden wir tatsächlich in der Lage sein, jede einzelne Sache zu sehen , die bis zu diesem Punkt getan wurde. Die R, Sobald ich sehen sollte, ist, dass lassen Sie uns sagen, Sie hatten eine Menge von ADA-Spalte, entfernen Sie eine Spalte, ändern Sie unsere Spalte, Tun Sie dies, tun Sie das zu den Tabellen auf dem Weg, das ist ein Standard-Teile der Entwicklung. Aber Sie sind mit 20 Migrationsdateien gelandet. Also fügen wir für die Migration Fuzzy könnte mit 20 enden weil Versuch und Fehler hier und da geändert werden. Der Punkt ist also, dass, wenn Sie tatsächlich alle Migrations-PFAS entfernen und eine neue Migration durchführen, es einen Blick darauf werfen, wie die Daten aussehen, wissen, wie die Datenbankstruktur ist. Nein. Und die Migrationsdatei, mit der Sie erhalten, haben alle Änderungen wie zu diesem Zeitpunkt. So würden Sie mühelos 50, 60 Migrationsdateien in eine Migrationsdatei komprimieren 60 Migrationsdateien in , die Ihnen nur die neueste Version der Datenbank in einem Ziel bietet. Das ist wahrscheinlich etwas, das Sie auch in Zukunft in Betracht ziehen möchten. Natürlich hilft Ihnen die Migration in Schritten auch, wenn nötig zurückzusetzen. So können Sie messen, was Sie tun müssen. In Ordnung. Aber ich wollte nur zeigen, warum wir die Migrationsdatei alles aus dem Webprojekt verschieben und was die möglichen Folgen sind. Also mit all dem fertig, ich denke, ich bin tatsächlich fertig mit dieser Lektion an dieser Stelle. Wir haben unser Projekt neu gestaltet und wissen, dass alles dort ist, wo es ist, unser Alles weiß als neues Zuhause nach der Rolle, die es in unserer Anwendung spielt. 48. Host-Umgebung konfigurieren – IIS und SQL Server: Hey Leute, willkommen zurück. In dieser Lektion beginnen wir mit der Einrichtung unserer Umgebung für die lokale Bereitstellung unserer API. Und wenn wir sagen, lokale Bereitstellung, könnte dies leicht Ihre persönlichen Computer sein. In meiner Situation werde ich es also auf meinem persönlichen Computer bereitstellen. Aber es könnte auch auf einem Unternehmen matschig in unserem Server irgendwo sein, dass diese API über das Netzwerk dienen muss. Und es könnte sogar sein. Also, das Internet ist, was auch immer die Situation ist, lehrt, Sie, zeigen Ihnen kritische Schritte zur Vorbereitung dieses Computers, so dass es Ihre API hosten kann. Also beginnt unsere Reise hier, wo wir das.net zugunsten unzeitgemäßen Lord of the SDK herunterladen müssen, das wir für die Entwicklung verwendet haben. Aber wir wollen sicherstellen, dass wir die Laufzeit haben und wir können einfach dieses Hosting-Bundle für Windows bekommen. Wenn Sie das tun, starten Sie Ihr Installationsprogramm. Und dann gehen Sie weiter und durchlaufen Sicherheitskontrollen. Und diejenigen, die getan werden, können Sie das schließen. Und dann wissen wir, dass wir mit der Einrichtung von Internetinformationsdiensten fortfahren werden. Also, was wir tun wollen, ist, ich würde noch einmal sagen, geht in Ihr Startmenü und sehen Sie die Funktion. Und dann möchten Sie klicken, um Windows-Funktionen auf unsere deaktivieren. Also diejenigen, die sie ausgewählt haben, wird diese kleine Box angezeigt und Sie möchten sicherstellen , dass Sie Internetinformationsdienste auswählen. Sobald du das tust, wirst du das Quadrat bekommen. Dieses Quadrat bedeutet, dass es nicht alles ist, was angekreuzt ist, was in Ordnung ist. Sie benötigen nicht jedes einzelne Feature. Ich werde Ihnen nur die zeigen, die ich gerade installiert habe und dann kann er einfach durchgehen und sicherstellen, dass diese auch auf Ihrer Seite angekreuzt sind. Also habe ich die Management-Konsole und dann habe ich diese Bibliotheken für Anwendungsentwicklungsfunktionen. So können Sie sicherstellen, dass Sie diese abhaken. Vielleicht brauchst du sie nicht alle, aber es funktioniert für mich mit diesen, ich würde empfehlen, dass du sicherstellst, dass du die hast. Und dann für HTTP-Funktionen können Sie diese Gesundheit und Diagnose nehmen, sobald ich, na ja, Abschnitt ist tatsächlich optional, aber ich empfehle, dass Sie den Abschnitt HTTP-Protokollierung erhalten. Dann Leistungsmerkmale, grundlegende Authentifizierung und die anderen. Sobald Sie diese haben, können Sie auf OK klicken und dann kann es eine Weile dauern, um zu installieren. Ich habe ihnen bereits geholfen, damit ich nicht auf die Installation warten muss, aber sobald sie die Installation abgeschlossen haben, können Sie dieses Video fortsetzen. Wenn Sie also sicher sind, dass Sie, wie dieser Prozess abgeschlossen ist, um sicherzustellen, dass Sie S haben, können Sie einfach zu Ihrem Startmenü gehen und S eingeben, und dann sehen Sie es Pop-up. Und wenn Sie starten, erhalten Sie diese Konsole, die Ihnen Ihren Server und alle Sites zeigt , die Sie derzeit dort aufgelistet haben. Um sicherzustellen, dass es funktioniert, können Sie tatsächlich einfach auf Standard-Websites klicken und gehen Sie zu Burroughs. Und dann wird es Ihnen diese Seite zeigen, die Ihnen zeigt, dass Sie jetzt Ihren Server sehen. Ein weiterer wesentlicher Bestandteil der Einrichtung Ihrer lokalen Umgebung besteht nun darin, sicherzustellen, dass Ihr Datenbankserver installiert ist und läuft. Wenn wir also über den Datenbankserver sprechen, haben wir ein paar Optionen in einer Enterprise-Einstellung, Sie haben es wahrscheinlich bereits oder Sie sollten es haben. Sie können mit Ihrem Systemadministrator nachfragen, was Sie tun müssen. Aber Sie gehen einfach voran und stellen Sie sicher, dass Sie SQL Server auf einer persönlichen Ebene haben. Wenn Sie es noch nicht haben, müssen Sie Optionen. Sie haben entweder Entwickler oder Express. So drückt sich sehr frei aus. Keine Lizenzierung erforderlich. Und was dann hat es einige Einschränkungen auf einer persönlichen Ebene drückt gut aus. Entwickler gibt Ihnen viel mehr Funktionen und es ist tatsächlich voll ausgestattet. Es ist also ein viel größerer Download und eine viel größere Aufgabe, als es installiert zu haben , gibt Zugriff auf viele weitere Funktionen. Für diese Bereitstellung können Sie wahrscheinlich mit Express davonkommen, aber wenn Sie über Langlebigkeit nachdenken, möchten Sie wahrscheinlich nur Entwickler so bekommen, dass Sie alles haben , was Sie brauchen, damit Sie das herunterladen können. Die Installation ist ziemlich einfach und am Ende werden Sie aufgefordert, das Management Studio zu installieren. Und nur für den Fall, dass Sie diesen Schritt verpasst haben, können Sie immer nur Google SMS, die Abkürzung für SQL Server Management Studio ist. Und wenn Sie das durchgemacht haben, können Sie immer einfach nicht laden das Management Studio über dieses Medium auch, was auch eine einfache Installation ist. Um das Management Studio zu starten, nachdem es installiert ist und eine Verbindung mit Ihrem Datenbankserver hergestellt wurde, können Sie fortfahren und auf das Symbol klicken, und Sie werden diesen Startbildschirm sehen. Und um eine Verbindung mit dem Server herzustellen, müssen Sie keinen Servernamen eingeben. Also habe ich zwei Server laufen auf, ein paar Server laufen auf meinem Computer oder ich weiß, dass ich SQL Express habe, also habe ich eine Instanz von SQL Express, aber ich habe auch eine Instanz des Entwicklers. Um also zum SQL-Ausdruck gegen den Punkt Backslash SQL Express zu kommen, bedeutet das nicht wirklich lokalen Host auch. Okay, und wenn Sie mit dem Entwickler gegangen sind, dann brauchen Sie nur localhost. Du brauchst also keinen Schrägstrich sonst. Also werde ich Entwickler verwenden, sagen wir, wenn ich localhost sage und es wird sich verbinden, und ich denke, ich habe ein paar Datenbanken, nicht zu viele. So können wir jetzt fortfahren, bevor wir mit dem nächsten Schritt übergehen, ich möchte Sie nur ermutigen, sicherzustellen, dass Sie Administratorzugriff haben oder auch wenn Sie keinen Administratorzugriff haben, wenn Sie sich in einer Enterprise-Einstellung befinden, in der Sie nicht in der Lage, Administrator zu sein, dass Sie zumindest genug Zugriff haben oder Sie arbeiten mit jemandem, der Zugriff hat, um einige der Aktionen hier durchzuführen. Also viele der Probleme, die Leute und Colins sind, wenn diese Art von Bereitstellungen außerhalb der wahrscheinlich fehlenden oughta Bibliothek und nicht etwas installieren. Das nächste größte Problem sind in der Regel Berechtigungen und Autorisierungen, richtig? Es stellt also sicher, dass Sie mit jemandem arbeiten, der genug Berechtigungen hat, um herum zu gehen und die potenziellen Hindernisse. Und wenn Sie auf Luft persönliche Maschine sind nur eine Maschine, die Ihnen zu verwalten ist. Stellen Sie einfach sicher, dass Sie über Administratorrechte verfügen. 49. Anwendung in IIS und SQL Server veröffentlichen: In Ordnung Jungs, also nachdem Sie Ihre Umgebung eingerichtet haben und sicher, dass Sie besucht haben, dass alles funktioniert. Nun, was wir tun wollen, ist tatsächlich die Website zu unserer veröffentlicht, Ich weiß, bevor wir das tun, wir haben ein paar Schritte, die wir zu vervollständigen. Und eine Codeänderung insbesondere, die ich tun möchte, ist in Bezug auf die Swagger-Benutzeroberfläche. Also auf der Startseite, wo wir app.use swagger UI haben, wollte ich irgendwie ändern, dass dieser Endpunkt generiert wird. Und der Grund ist, dass ich erlebt habe, dass will es ist die Pfadregeln Art von Ketten veröffentlichen. Also, was tun wollen, ist es etwas mehr wie diese aussehen wurden Server UA oder Samen verwendet, Lambda Tolkien. Was dann haben wir die geschweiften Klammern machen es ein Objekt. Und wir werden nur den Basispfad des MIT qualifizieren, um zu sehen String-Punkt molare Leerzeichen c Punkt, root, Präfix ist. Alles klar, und dann sagen wir Punkt, Punkt, Punkt. Was passiert, ist, dass, wenn sich das Root-Präfix relativ zu ändert, wenn es in der Entwicklung ist, wie es jetzt ist, r. Wenn es veröffentlicht wird, muss der Pfad ein wenig anders aussehen. Also tun wir nur zu sehen, entweder setzen einen Punkt, zwei Punkte, und dann werden wir nur, um das unserem bestehenden Pfad voran , der vorher war, und Hotellisten-API. In Ordnung, damit du weitermachen kannst und diesen schnellen Wechsel vornehmen kannst. Und nur um zu überprüfen, dass es immer noch wieder funktioniert. Und wir sehen immer noch unsere Sagar API Dokumentation. Und Sie würden auch bemerken, dass die URL dot-dot hat. Wenn wir darauf klicken, bekommen wir das. Also, wenn wir zu diesem Link gehen könnte etwas anders aussehen, was ist, ich ging durch alles, was wir gerade getan. Ordnung? Also nicht nur bestätigen, dass er an anderen sehr wichtigen Dingen arbeitet , die wir tun wollen, ist die Datenbank zu erstellen. Also in unserem Datenbankserver, egal ob Sie SQL Express verwenden oder Entwickler verwenden, können Sie einfach zu dieser bestimmten Instanz gehen, auf der Sie hoffen, dass Sie die Datenbank der API hosten, sorry, auf. Und dann möchten Sie nur eine neue Datenbank erstellen. Sie wollen also, dass das da sein muss, wenn wir unsere Migrationen durchführen, oder? Da ich also keinen Typ möchte, doppelklicken Sie auf den Datenbanknamen von der, von den Hosts, von der App-Einstellung, sorry, und dann gehen Sie fort und verwenden Sie diesen Namen, um die Datenbank zu erstellen. Und dann können Sie fortfahren und bestätigen, dass die Datenbank da ist. Es ist leer, oder? Nodal oder zu viel darüber. Aber das ist die erste Bereitstellung, richtig? Was wir also tun wollen, ist zu veröffentlichen. So können wir weitermachen und mit der rechten Maustaste auf unsere Projekte klicken. Wir sehen Veröffentlichen, klicken Sie darauf, und dann können wir unser Ziel wählen. Also haben wir hier einige Möglichkeiten. Sie können auf eine 0 veröffentlichen, die wir später auf Docker-Ordner, FTP betrachten können. Dies wäre nützlich, wenn Sie Hosting wie auf einem GoDaddy oder einer von denen oder Sie hafta FTP auf den Server, auf dem es gehostet werden. Oder Sie können direkt zu iOS gehen oder wenn Sie andere Profile haben, können Sie einfach ein Profil importieren. Also werde ich Ordner machen und ich werde erklären, warum ich Foto mache , weil ich eine lokale Bereitstellung mache. Ich kann es lokal auf den Computer machen und dann die Dateien dorthin verschieben, wo sie zielen sollen. Dies gilt auch, wenn Sie gehen und dies ist meine Grundlage meiner Erfahrung. meiner Erfahrung habe ich Ordnerbereitstellungen gemacht, bei denen ich den Ordner direkt auf dem Server auswähle, den er wegen eines Tippfehlers in den falschen Pfad legte und ich habe es ausprobiert und versucht und es ausprobiert und nichts war Aktualisieren. Es stellte sich heraus, dass ich es auf den falschen Weg gemacht habe. Ich habe nicht bemerkt, bis ich Option gewählt, die sagte löschen alles auf dem Foto. Und dann habe ich am Ende einige andere entfernen könnte abhaken, nur um meine kleine Website zu bekommen. Also meine vorsichtige Natur, nein, das ist, was ich durch Erfahrung gelernt habe, fordert mich auf, immer unsere Bereitstellung auf meinem Computer und dann die Dateien zu machen und sie auf den Zielcomputer zu verschieben. Und so mache ich es. Deshalb ist es, ich werde Ihnen zeigen, basierend auf der Erfahrung, können Sie wählen, ob Sie es auf meine Art machen oder nicht, oder Sie nur Schulstraßen sind die Zielmaschine, dass, wenn es keinen richtigen oder falschen Weg gibt, Es ist nur eine Angelegenheit aus. Erfahrene lehren mich Weisheit. In Ordnung, also werde ich einen lokalen Ordner Bereitstellungen auswählen. Also geht es in den bin-Ordner freigegeben.net fünf veröffentlicht. Okay, wir können auf „Fertig stellen“ klicken und dann können wir es bearbeiten. Es gibt also gewisse Dinge, die wir tun wollen. So können wir diesen Punkt hinzufügen ändert die Zielposition, wenn Sie möchten. Aber wenn wir dann zu Einstellungen gehen, können wir andere kleine Konfigurationen wählen. Ich möchte die Dateiveröffentlichungsoptionen. Dies ist also der optionale Strumpf auf Booten. Löschen Sie alle vorhandenen 5p. Was also getan hat, ist weiß, bevor man die neuen Dateien lernt. Und wenn Sie das nicht wählen, wird es wahrscheinlich nur überschreiben, was da ist oder was ohnehin gemeinsam ist. Das kann also riskant sein, denn wenn es der falsche Ordner ist, wie gesagt, wird es kritische Dateien entfernen. Wir können die Datenbanken auswählen. Datenbanken verwenden Sie diese Verbindungszeichenfolge zur Laufzeit. Und ich werde das nehmen und ich werde seine Verbindungen zu ihm ändern , weil ich nicht möchte, dass es Loca, DBMS, SQL lokale DB verwendet . Ich wollte meinen lokalen Host oder localhost Slash SQL Express verwenden, egal wie der Servername ist. Du steckst das da hin. Ich werde den gleichen Datenbanknamen und jede andere Option behalten. Und dann das Dampfboot, die Migrationen. Also werde ich sagen, diese Migration anwenden. Und was dies tun wird, ist ein Skript basierend auf der aktuellen Situation der Datenbank und den Migrationen und allem zu generieren , richtig? Also können wir einfach weitermachen und das tun. Klicken Sie auf Speichern und dann auf Veröffentlichen. Hier haben Sie also den Zielort und das ist, wo es auf meinem Computer gehen wird, Veröffentlichen. Und sobald die Veröffentlichung abgeschlossen ist, werden sie Ihnen zeigen, wenn Sie so wollen. Boden oder nicht, was es in meinem Fall war, und Degeneration des Skripts wurde erfolgreich abgeschlossen. also nur die erste Bereitstellung sind, ist dieser Schritt zur Geißelgenerierung sehr wichtig denn wenn Sie unser wie ein Update bereitstellen, es sich bereits in der Produktion bei Ihrer Aktualisierung etwas Amy-Datenbankänderungen, neue Migrationen usw. Sie werden dieses Skript an die Datenbank-Administratoren sind der Senior Entwickler zur Verfügung stellen möchten . Ich meine, wenn Sie ein leitender Entwickler sind, dann gut. Nun, Sie wollen dieses Skript, um mehr zu haben, haben mehr Kontrolle über die Datenbankänderungen. Sie wollen nicht, dass jemand einfach sagt, oh, ich migriere Daten Anzahl der Spins oder mache ich Migration auf die Taten fettleibig? Denn in der Entwicklung haben wir weniger Bedenken hinsichtlich der tatsächlichen Daten und Integrität als in der Produktion. Du willst also vorsichtig sein. Und lasst uns vorwärts gehen. So kann ich Click steuern und direkt zu dem Dateisystem gehen, in dem dies veröffentlicht wurde. Und ich kann diese Dateien nehmen und sobald ich tun werde, ist in S, Also lassen Sie mich einfach an anderer Stelle auf der Standard-Website bringen, wir wissen das. Wir werden mit der rechten Maustaste klicken. Und dann werde ich einfach gehen, um zu erkunden. Das bringt es jetzt in den Ionic Ordner, in dem ich WW Root-Ordner bin , in dem alle Web-Apps verlassen müssen. Nein. Nehmen wir einfach an, dass dies ein Server ist, auf dem mehrere Anwendungen ausgeführt werden. Also alle von ihnen laufen über den Servernamen Schrägstrich der Web-App. Mmm. Also, was wir tun werden, ist erstellen die API hat eine Web up, so erhalten wir den Servernamen oder den Computername Schrägstrich die APIs und Punkte. Okay, also werde ich einen Ordner erstellen. Ich werde es nur eine totale Unterstrich-API nennen. Und dann werde ich in diesem Ordner alle Dateien ablegen. Wenn Sie also eine Kopie und über ein Netzwerk sind, würde ich empfehlen, dass Sie sie archivieren, damit es einfacher ist, sie quer zu kopieren. Aber da es nur für entfaltet sich die Falte auf der gleichen Maschine hier. Es war eine unruhige Operation. Dann möchte ich die SQL-Skripte ausführen. Also werde ich nur in E f gehen, sorry, ich würde irgendwie schnell EFS Kiemen-Skripte öffnen, diese Skriptdatei öffnen. Und dann werden Sie hier sehen, dass alles, was in den Migrationen war , genau hier in netten verständlichen SQL ist. In Ordnung, also selbst die Migrationen, die wir gemacht haben, hat Datenbank all diese Dinge erstellt, die Beta aussaat. Also die Standarddaten, die wir in all diese Migration Anzac hier in SQL-Skripten setzen . Deshalb sage ich, dass wir, wenn wir die Datenbank jedes Mal ändern, wenn dieses Skript generiert wird, das neue Zeug extrahieren und mehr Kontrolle darüber haben können , was wir mit den Daten machen. In Ordnung, also hier und nun, oder so schützt das Skript es irgendwie, weil sie sagen, wenn das, also das ist, warum ich die Migrationshistoristabelle habe weil es die Snapshots von jeder Migrationen entfernt. Es steht also, wenn diese Migration nicht existiert, dann Karel diesen Sauerstoff. Also werden wir sehen, ob es schon fertig ist. Ich muss es nicht noch einmal tun. Ordnung. Also können wir das einfach ausführen und mich einfach wieder an die Spitze gehen lassen. Also mit SQL, wenn Sie sind, wenn Sie nicht so vertraut mit SQL sind, um sicherzustellen, dass das Skript der Erde in der Lage ist, für die Datenbank zu laufen. Sie können entweder oben „Verwenden“ sagen, und Sie geben die Datenbanknamen ein. In diesem Fall wird es OTA-Auflistung sein oder Sie stellen nur sicher , dass die Datenbank von oben hier in der Liste der verfügbaren Datenbanken ausgewählt wird , richtig? So können Sie sicherstellen, dass Ihre Fähigkeit, es auf seinem aktuellen Bedarf übergewichtig zu lesen , wenn ich auf Ausführen klicke, läuft das Skript erfolgreich. Also weiß ich, dass ich die Tabellen habe, wenn ich nur aktualisieren, sie sind alle, sie sind alle diejenigen für die Benutzer, Hotels und Länder, alle, die wir manuell erstellt haben, sie sind alle da. Also weiß ich, dass die Datenbank grundiert und bereit ist. Was ich tun werde, ist mit dem Sitzen der API-Web-App selbst fortzufahren. Also Buck in IIS, ich werde diese Liste nur aktualisieren, weil es jeden Ordner auflisten wird , der sich im www root befindet, das automatisch sieht. Und dann, was ich tun werde, ist mit der rechten Maustaste darauf zu klicken und Werkzeug und Anwendung zu konvertieren. Bevor ich das mache, tut es mir leid, es tut mir leid. Bevor wir dies in eine Anwendung konvertieren und gehen wir zum Anwendungspool. Ein Anwendungspool ist also wie ein Container , in dem Webanwendung oder Webanwendungen ausgeführt werden können. Ein einziges Verantwortlichkeitsprinzip würde vorschlagen, dass Sie einen Pool pro AP-Spread durchführen. Denn wenn Appall mit mehreren OPS weitergeht, hören alle diese Ups auf zu arbeiten. Sie wissen also, dass Sie zur Isolierung mehrere Pools haben können. Jemand ist in der Bild-API. Pool zu nichts zu schick oder kompliziert. Die dominante CLR-Version auf, wann kein verwalteter Code zu sagen ist, weil wir.NET Core verwenden. Das ist also sehr, sehr wichtig. Und dann können wir auf OK klicken, also ist das in Ordnung. Jetzt ist die Relevanz davon, dass, wenn ich zum vorherigen Schritt zurückgehe und alles, wenn ich mit der rechten Maustaste klicke und sage konvertieren, die Anwendung mich fragen wird, welchen Anwendungspool ich auswählen möchte. So kann ich hier gehen und wählen Sie aus dieser Dropdown-Liste Hotel API, einen Pool. Das ist diejenige, die ich für diese App auf Iraner wünsche. Und dann kann ich fortfahren und auf OK klicken . Und dann werden Sie feststellen, dass es nicht mehr wie ein Ordner aussieht. Nein, es sieht aus wie ein kleiner Web-Globus mit dem Brunnen, nein, es sieht aus wie oben. Ordnung. Also lasst uns diesen Draht drehen. Ich werde nur Bros nach Port 80 gehen. Und wir landen auf diesem Gebot, das 404 Adresse sieht, nicht Telefon, okay, aber was wir erwartet hätten, ist mehr oder weniger als Swagger Dokumentation. Also lassen Sie mich sehen, ob es vielleicht, wenn ich aufgefordert habe, und da gehen wir. Also nein, zumindest wissen wir, dass wir es von einem localhost betrachten. Und beachten Sie, dass dies nicht der lokale Host Doppelpunkt der Ports localhost die Ports, die Portnummer. Lassen Sie mich Ihnen nur zeigen, wo immer klar ist, localhost Doppelpunkt, die Portnummer repräsentiert die Entwicklungsumgebung. In Maya-Situation, lokale Gastgeber von selbst. Es stellt IIS dar. Wenn Sie mehrere Web, Webserver haben , vielleicht haben Sie, wow ME, Poisson oder Apache, oder andere Webserver laufen, dann müssen Sie möglicherweise die Ports ändern, weil ich jetzt Apache habe. Was ist es läuft auf localhost Port 8080. In Ordnung, was es der Standard auf iOS ist, ist mein Standard. So lokalen Host ist, was Sie sehen, wenn die Web-App-Namen und dann die erste Seite. So zumindest wissen wir, dass wir von Aktivitäten aus dem IIS dienen. Okay, also lasst uns den Postboten benutzen und eine neue Anfrage machen. Also werde ich nur alle Hotels von der API anfordern. Kein Hinweis auf den Link. Ich hoffe, es ist nicht zu klein, jetzt muss ich localhost Schrägstrich Hotel sehen, API Schrägstrich API Schrägstrich Hotel. In Ordnung, also sein lokaler Schrägstrich den Schrägstrich des Webnamens, der Pfad, den wir in unserem Controller niedergelassen hätten. Es muss also wieder rüber springen. Und ich mache nur diesen Boden vollständiges Verständnis all dieser kleinen Variablen und halte, wenn sie auseinander, richtig? Also die Regel, die wir sagten, war APIs Schrägstrich Controller, ich habe nicht gesagt, wir könnten es ändern. Das würde wahrscheinlich wissen, dass wir einsetzen, oder? Was für ein Punkt ist, dass, weil es API Slashdot bedeutet, was auch immer vorangeht, es immer so gehen wird. Wenn es also ist, dass wir unser Web nicht auf Abruf genutzt haben, ist es insgesamt. Es könnte localhost slash api special gewesen sein. Wenn es der Mittelwert war, wenn es sich um einen Stammspeicherort außerhalb des Anwendungsservers handelte. Also in diesem Fall ist es nicht, ich bin nicht bereit, in irgendeine Umbenennung zu gehen, nur weil Ihre Institution anders sein könnte als meine und ich erkläre nur die ganze Dynamik hinter warum mein Ende dieses van Ihnen kann nicht, weil er auf einem anderen Weg ging. Also, wenn Sie direkt bereitstellen, und noch einmal, ich habe kein Problem darin zu zeigen, ob Sie Ihre, Ihre API direkt an die Wurzel dieses ionischen rechts von www root bereitgestellt haben, sorry, Sie haben uns nicht alle weggezogen und es direkt hier unter die Wurzel, dann würde der lokale Host-Schrägstrich Swagger Ihnen tatsächlich dienen. Hoffe, diese sehr pij, die wir gerade auf in kommen von lokalen Host suchen, richtig? Aber wegen dieses Web up, müssen wir in die Web-App gehen, um zu den tatsächlichen Sachen zu kommen. Okay, also lassen Sie uns diese Anfrage testen. Und wenn ich auf Senden klicke, erhalte ich einen 500-Fehler. Und die ganze coole Sache an all dem, was wir getan haben, war, dass wir alle Bloggen geschickt haben, richtig? Also kann ich immer einfach zu meinem Logs-Ordner gehen und einen Blick darauf werfen, warum ich diese Fehler bekomme. Ordnung? Diese Protokolldatei zeigt mir also, dass etwas beim Anmeldefehler des Datenclients für den Benutzer schief gelaufen ist. Und dann zeigt es mir den Namen des Benutzers. Also im vorherigen Video, habe ich gesehen, dass Berechtigungen eine sehr wichtige Rolle in dem, was Sie tun, oder? So. Für unseren Aufwärtspool, den wir gerade erstellt haben. Damit der Benutzer unter dem Up-Pool mit der Datenbank interagieren kann, müssen wir sicherstellen, dass wir ihm die Berechtigung für die Datenbank erteilen. Was ich also tun werde, ist zu SQL Server zu gehen oder zurück zur Datenbank zu gehen. Und dann werden wir zwei Dinge tun. Werden eine Anmeldung für diesen zusammengefassten Benutzer erstellen. Und dann werden wir diese Anmeldung zur Sicherheit für die Datenbank hinzufügen. Also erstens, neuer Login oder gut, lassen Sie mich sehen, ob ich es direkt als Benutzer tun kann. Also unter der Datenbank ist es unser Ziel, Benutzer Sicherheit dann Benutzer als neue Benutzer, und wählen Sie dann Windows-Benutzer. Alles klar, und dann, um diesen Benutzernamen als Pool einzugeben, ist das seine Domäne. Und der, im Grunde der Name des Pools ist der Benutzername. Oder wir können auf OK klicken. Und wenn wir in der Liste schauen, dann werden wir sehen, dass das oben Pool-Benutzer keine, hinzugefügt, nein. Lassen Sie mich diese Anfrage noch einmal versuchen. Immer noch 500 aufstehen. Lassen Sie mich das etwas behandeln. Also, was ich tun muss, ist es mehr Berechtigungen zu geben. Ordnung? Also haben wir es zu den Datenbankbüchern hinzugefügt. Wir haben ihm keine Mitgliedschaft gegeben, also werde ich es einfach hinsetzen. Hat der DB-Besitzer? Nein, Sie werden wahrscheinlich ein bisschen granularer sein wollen, als ich richtig weiß. Wenn Sie Berechtigungen festlegen, weil der Benutzer, der auf die Datenbank zugreifen kann, möglicherweise nicht möchten Sie ihnen das Eigentum geben, weil Eigentumsmusik und das Visum fallen lassen, Visum, Andrew Oldham, potenziell bösartige Dinge so viel wie es hilft Benutzer. Du willst sehr sicherheitsbewusst sein, wenn du Berechtigungen erteilst, oder? So können Sie ihnen nur Daten geben, lesen, Daten an oder welche Musik und lesen und schreiben Sie in die Datenbank. Aber sie können keine anderen kritischen Vorgänge ausführen, die die Daten gefährden könnten. Ordnung? In meiner Situation ist meine Maschine dort, meine Benutzer. Ich werde db-Besitzer setzen. Also werde ich sagen Mitgliedschaft DB Owner und eigene Schemas. DB-Besitzer. Und im Allgemeinen bemerken Sie, dass das Standardschema, der Deal, über den Sie sich keine Sorgen machen müssen, das mehr auf Datenbankebene ist , die nur unsere Anwendung zum Laufen bringen möchten. So können wir auf OK klicken und dann können wir es erneut versuchen. Und dann sehen wir hier, dass wir Daten bekommen. Also erhalten wir Daten aus unserer API-Datenbank. Jetzt nur um Sie wissen zu lassen, dass einige der Sicherheitsfunktionen oder ich bin ein Nazi-Funktionen, eine Konfigurationen, die ist, Ich könnte gerade Putin vielleicht nicht unbedingt funktionieren einfach so für Sie gibt es andere Faktoren sind Sie, dass Straßen tun diese Dinge. Die Berechtigung, Benutzern Berechtigungen zu erteilen, und all diese Dinge spielen eine Rolle darin , ob Sie alle Aktivitäten erfolgreich abschließen können , wie Sie es gerade gesehen haben. Letztendlich sind dies jedoch die grundlegenden Schritte, um Ihre Anwendung mit den Konfigurationen in der Datenbank zu starten und auszuführen. Und jetzt geht es zurück zu ist, dass es wenige Dinge gibt, die wir sicherstellen wollen, dass wir an Ort und Stelle kommen. Wenn Sie sich erinnern, als wir unsere JWT eingerichtet haben, haben wir einen geheimen Schlüssel hinzugefügt, den wir als Umgebungsvariable hinzugefügt haben. Nein. Wenn Sie es dem beunruhigenden Stil hinzugefügt haben, müssen Sie diesen Schritt nicht durchlaufen. Wenn Sie jedoch getan haben, was ich getan habe und es als Systemvariable hinzugefügt haben, dann brauchen wir unsere API, um diesen Schlüssel zu speichern, richtig, damit er diese Operationsbisse überall dort verarbeiten kann, wo es sich auf dem Automaten befindet. Also gehen wir zum Konfigurationseditor. Und aus der Dropdown-Liste auf der linken Seite, wollen wir sicherstellen, dass wir System dot Webserver und dann werden wir ASP Net Core wählen. Okay, also gehen Sie weiter, konischer Abschnitt, wir gehen zu System.Out. Webserver ist B.NET Core. Und dann aus der Drop-down-Liste auf der rechten Seite gehen wir zu Anwendungshosts, nicht zu Konflikten. Wissen Sie, wenn wir diese beiden Änderungen machen, können wir sehen Environment Variables Kegel gleich 0. Also werden wir nur darauf klicken. Und dann werden wir unsere Umgebungsvariable hinzufügen. Nein, das Gleiche, was Sie als Umgebungsschlüssel hinzugefügt haben. Also wollte ich nur meinen unabgerufen und mein Name war das Wort Schlüssel und mein Wert war so gut. Nun, wie kompliziert, wer auch immer war, Der Punkt ist, dass wir es an einem sicheren Ort wollen , und das ist es, was uns dieser Mechanismus bietet. Ordnung? So können Sie einfach voran gehen und geben Sie Ihren Namen und den Schlüssel, den Sie ausgewählt haben. Und dann können wir weitermachen und das schließen. Jetzt, da es hinzugefügt wurde. Der Kommentar ist niemand. Wir können auf Anwenden klicken, um die Änderungen anzuwenden und dann neu starten oder Pools. Also erinnere ich mich, Ich habe erwähnt, dass, wenn mehrere Apps im Pool sind, wenn Sie, wenn etwas passiert, um die gepoolten und alle von denen oben geschult auf. Also wollte ich nur neu starten oder Pool. Wir können einfach recyceln. Und dann wollen wir unseren Login testen und Tolkien abrufen Insel und gesicherten Zugang. Also lassen Sie mich einfach überprüfen, dass das immer noch, Ordnung, damit unsere API immer noch funktioniert. Das ist gut. Lassen Sie mich versuchen, mich anzumelden, also gehe ich einfach zu einer meiner älteren Anfragen zurück. Richtig. Und nun, eigentlich kann ich diese ältere Anfrage noch nicht verwenden denn wenn ich es versucht habe, werde ich das einfach duplizieren. Und ich ging, um die Portnummer zu entfernen. Und ich verwende auch kein HTTPS. Https. Das ist eine ganz andere Ebene der Konfiguration, bei der ich in dieser Lektion nicht zu viel darauf eingehen möchte, wollen wir nur unsere Bereitstellung von Band zum Laufen bringen. So lokale Host Schrägstrich Hotel, Unterstrich API, dann Schrägstrich API Schrägstrich Lothian ausgehenden Schrägstrich Login. Richtig. Also und ich schicke eine vier, oh, eins, richtig? Ich bin nicht autorisiert, weil dieser Benutzer nicht existiert. Also, weil wir den Benutzer nicht gesehen haben. Also, wenn Sie, wenn Sie sehen, dass der Benutzer, Sie haben wahrscheinlich nicht dieses Problem. Also werde ich nur einige dieser älteren Anfragen schließen. Versuchen wir also, den gleichen Benutzer oder den gleichen Benutzer zu registrieren. Also ändern Sie einfach den Pfad. Und wenn wir die Anfrage senden, sehen wir, dass wir das Tool akzeptieren. Also wurde dieser Benutzer erstellt. Gehen wir zur Datenbank und verve. Und wir können sehen, dass Benutzer hier, Trauma example.com auf dem Passwort. Okay, jetzt, da wir den Benutzer erstellt haben, lassen Sie uns versuchen, unsere Login-Operation erneut zu versuchen und die Tolkien zu bekommen. Also die Naht verlangt, dass wir versuchen, mich schicken zu lassen, und hier ist unser Tolkien. Ordnung? Wenn wir also mit TDA ins Gefängnis gehen und uns unsere Tolkien ansehen, wo wir Dinge sehen, die wir gewohnt sind, oder? Es wird sagen, ungültige Signatur, weil es wieder einmal nicht weiß, dass der Schlüssel mit signiert wurde, was wir gerade gesagt haben, Öffnen Sie die Umgebungsvariable. Aber wir sehen, dass die Tolkien die Entzündung haben, die wir erwarten. Also, das ist jetzt werde ich versuchen, eine aus der Löschoperation Seele. Lassen Sie mich es mit dem Hotel versuchen, damit wir wissen, dass wir drei Hotels haben , die wir das sehen, richtig? Ich werde Hotel mit ID3 aus der Datenbank löschen, damit wir wissen, dass wir unsere Tolkien brauchen und wir den Link haben. Lassen Sie mich das einfach in Hotel umwandeln. Also löschen wir das Hotel. Also möchte ich nur überprüfen, ob unser Tolkien funktioniert. Und wenn wir das tun, bekommen wir ein Werkzeug für. Das heißt, wenn ich in die Datenbank gehe und in die Hoteltabelle schaue, die mit drei begann, sehen wir nur Werkzeug. So sehen Sie, unsere Tolkien arbeitete unsere, alle unsere Endpunkte, zumindest das, was wir getestet haben, so Feuerwerk und bisher haben wir erfolgreich unsere API auf oder lokal eingesetzt. Lokale IS-Bereitstellung mit unserer lokalen Datenbank von Ports. Wenn Sie diese Richtlinien befolgen, können Sie die API in Ihrem Unternehmen oder für Ihren persönlichen Gebrauch oder in welcher Situation auch immer erfolgreich bereitstellen . 50. Microsoft Azure erstellen: Hey Jungs, in diesem Video werden wir unsere Microsoft ein 0 Kegel erstellen. Wie ich bereits sagte, wir können umsonst loslegen. Um auf diese Websites zu gelangen, gehen wir Punkt Microsoft.com zu absorbieren und dann schätze ich die Straßen, die Sie nach Ihrer Region oder Ihrer Sprache. Aber das ist, was die Website sieht aussehen sollte. Und Sie können es durchlesen, um genau zu sehen, was 0 ist alle Wohnstätten. Es geht darum, futuristisch zu sein, mehr Zusammenarbeit zu ermöglichen und nahtloser in einem geschlossenen Raum zu arbeiten, oder? Sie sind überall auf der Welt und Sie würden normalerweise nur die Region wählen, die Ihnen am nächsten ist. Also bin ich eigentlich in der Karibik. Also mein Joel sagt, Region ist nach Osten zu uns oder Ost USA zwei. Aber nicht für dieses Video. Dieses Video, das wir gerade die Spalten erstellen, wurden noch nichts über Gründe eingerichtet. Und so, um loszulegen, können wir die gut, wenn Sie bereits ein Live-Konto haben, dann können Sie einfach voran und melden Sie sich mit diesem Live-up Kegel. Aber Sie können einfach auf Start free klicken. Und hier sagen sie Ihnen, dass Sie ein freies heute schaffen können und Sie können mit 12 Monaten kostenlose Dienste beginnen. Das ist also ein guter Deal für mich. Und wenn Sie nach unten scrollen, sehen Sie 12 Monate kostenlose, beliebte, kostenlose Dienste plus $200 Guthaben, die in 30 Tagen ablaufen. So geben sie Ihnen $200 ein kann V virtuelle Maschinen erstellen, wieder, Ressourcen in der Cloud erstellen und experimentieren, bis das Geld o. Und das ist wirklich nur für einen Monat. Aber dann gibt es bestimmte Dienste, die Sie nur für den Rest des Jahres kostenlos erhalten, und dann haben Sie ein paar andere Dienste, die immer kostenlos sind. Alles klar, was wir tun werden, ist einfach voran zu gehen und klicken Sie auf Kostenlos starten. Dann werden sie uns bitten, uns mit unserem Leben von Zapfen anzumelden. Wenn Sie noch einmal ein Live-Konto haben, kann er voran gehen und das verwenden. Wenn Sie keinen weiteren Kegel haben, können Sie voran gehen und einen erstellen. Und dies ist eine sehr aktuelle Option, um sich mit GitHub anzumelden. Also habe ich ein Leben einen Kegel, den ich benutze, aber ich werde nur Sie durch die erstellen 1 zuerst zu führen. Wissen Sie, dass das Live-Icon nicht unbedingt live oder auf all.com sein muss. Es muss kein traditionelles Hotmail-Konto sein, es kann ein Gmail-Konto sein. Also kann ich tatsächlich die gleiche E-Mail-Adresse verwenden, die ich für GitHub oder E-Mail-Adressen verwendet habe, die ich verwende, wenn ich mich für Dinge anmelde , die ich verwenden kann, ob es Yahoo, Gmail, Hotmail, was auch immer es ist. Und klicken Sie einfach auf Weiter. Und hier ist es schon, es sagt mir, dass ich bereits einen Microsoft Punkt weg habe. Das treibt aber meinen Punkt an, dass, wenn Sie eine E-Mail-Adresse haben, es nicht Hotmail oder ein traditionelles lebendiges AECOM-Boot dort sein muss, wodurch ein Microsoft oder Collins für Sie mit dieser E-Mail-Adresse erstellt wird. So können Sie voran gehen und sich anmelden. Es ist ein ziemlich unkomplizierter Prozess. Jetzt sind sie Conda entschieden bereits existierte. Das ist ein Konto, mit dem ich mich für den kostenlosen Doppelpunkt angemeldet habe. So. Ich ging eigentlich gerade voran und meldete mich an und weil ich wirklich nicht viel mehr begleichen habe, denke ich, dass Ihr Registrierungsprozess dem unabhängig davon sehr ähnlich aussehen wird , so weiter, um die Hürde zu überwinden, Ihre E-Mail-Adresse und fortfahren, dann werden Sie wahrscheinlich am Ende auf einem Bildschirm wie diesem, wo Sie gehen, um für Ihre demographischen Informationen nur für ihre Aufzeichnungen halten mein Land gefragt werden Ihre demographischen Informationen nur für ihre Aufzeichnungen und sind riesig auf seiner Jamaika. Und ich zitiere ihm meine Telefonnummer, die meiner Meinung nach macht. Und dann sagen sie, willst du deine Identität per Telefon oder den Wunsch per Karte verifizieren? Also werde ich wählen, nimmt mich per Telefon und ich habe gerade die SMS bekommen. Es hat überhaupt nicht lange gedauert. Also werde ich nur diesen Code einfügen und dann verifizieren. Jetzt ist hier der Teil, der Sie abschrecken könnte, wenn Sie nicht darauf vorbereitet sind. Sie werden Ihre Identität per Karte überprüfen möchten, Sie werden Ihre Identität per Karte überprüfen möchten damit Sie nicht belastet werden, wenn Sie nicht upgraden, was bedeutet, dass sie einen anderen YOU-Klausel Abonnementplan haben, so richtig. Nein, Sie melden sich für den kostenlosen Abonnementplan an. Sobald das kostenlose Abonnements nach Plan fertig ist, dann werden Sie nicht in der Lage, viel auf der Plattform zu tun , bis Sie unsere neuen Abonnements auf Marke, die zusammenfällt, dass Upgrades. Also, wie ich bereits sagte, es gibt p Wie Sie gehen Und dann gibt es Pay-as-you-go Dev-Schräg-Test, der ist derjenige, auf dem ich bin, das ist wie die Hälfte des Preises von der regulären PICU cool. Also habe ich tatsächlich meine Karten-Entzündung zur Verfügung gestellt, als ich mich angemeldet habe. Und nachdem Sie das getan haben, können Sie klicken sie klicken Vereinbarung, wenn Sie nicht über Karte sprechen oder Sie nicht mit der Bereitstellung unserer Kartendetails dann vertraut sind. Lecker, und du kannst hier aufhören, das ist in Ordnung. Wenn wir später tatsächlich in Azure bereitstellen, können Sie immer noch sehen, wie es aussehen wird, und sehen, wie nützlich es für Sie ist. Was, wenn Sie möchten, dann können Sie gehen und geben Sie Ihre Informationen und klicken Sie dann auf die Vereinbarung und akzeptieren Sie die Vertragsbedingungen und dann würden Sie auf der Plattform sein. Also werde ich mich einfach in meine Rayleigh Kegel anmelden, könnte zitieren unquote Rayleigh Kegel, aber eine, die ich benutze und Ihnen zeigen, wie eine 0 aussieht. Nun, eigentlich habe ich gerade Puerto dot 0.com eingegeben, in der Hoffnung, dass sie mich bitten würden, mich einzuloggen, aber ich tat das und es schrieb nur diesen Mus in einen Kegel, den ich gerade George Williams auf gmail.com einrichtete. Also dieses Dashboard, also ist dies das Dashboard auf der sehr einfachen Ebene, sie haben ein Panel an der Seite, das ODE auflistet. Ein paar Dienste, die Sie bekommen können. Aber dann, weil wir den Satz von vier nicht abgeschlossen haben, weil ich nicht abgeschlossen, zumindest dann, wenn ich zu Abonnements gehe, werde ich sehen, dass ich kein Abonnement habe, richtig? So wie ich sehen Sie im Abonnement ist, wie die Rate Sie als Kunde, ob Ihr Netzteil, Ziel, Unternehmen oder was auch immer. Also, wenn ich später beschlossen habe, dass ich meine Informationen bereitstellen möchte, kann ich einfach zurückkommen und auf Hinzufügen klicken. Und dann bringt mich das, um das Zeichen des Verfahrens zu vervollständigen , wo ich tatsächlich das Abonnement hinzufüge. Und so ist das eine kostenlose Testversion über den Krieg, der oben steht. Ich weiß nur, dass Sie PSU Zielentwickler Unterstützung haben, da Sie eine ganze Reihe von ihnen haben, okay? Also würde ich wahrscheinlich mit Lohn gehen, wie du gehst. Aber das ja, das ist alles in den Schritten der Registrierung für Azure, und das ist, wenn Sie damit fortfahren möchten. Aber dann für dieses Tutorial wirklich und wirklich, Ich wollte nur, dass Sie so weit wie das Dashboard , so dass Sie sehen können, dass dies ist, was ein Xero aussieht. Dies ist, was das Workload-Management-Portal Sie Ihre virtuellen Maschinen einrichten können. Aber für diesen Kurs werden wir uns die Dienste ansehen. 51. Anwendung und Datenbank in Microsoft Azure bereitstellen: Weil wir zurückkommen. Also haben wir bereits eingerichtet oder eine Zerocoins und alles, was wir tatsächlich bereitstellen wollen. Bevor ich das jedoch mache, wollte ich die Schlittenkonfiguration dahin ändern, wohin unsere Protokolldateien gehen werden, denn in einem Xero gibt es ein LC-Laufwerk, es gibt keine lokale Trocknung. Was ich also tun werde, ist, dass Cyril Log einen Ordner innerhalb der gesamten Ordnerstruktur für das Projekt erstellt. Und das ist, wo die Protokolle sein werden. Wenn wir also zu Azure gehen, müssen wir uns keine Sorgen um einen Pfad machen oder zu schick werden. Also lasst uns rüber gehen und veröffentlichen. Nun, da gesagt, ich mache das nur lokal aus Einfachheit, es gibt Tonnen mehr. Was habe ich gesagt, robust verfügt über Protokollierungsmechanismen, die wir nutzen können, dies zu verstehen , weil ich den kostengünstigsten Weg finden wollte weil die anderen Geld kosten, wie Sie hinzufügen. Okay, also lasst uns einfach mit der rechten Maustaste klicken. Gehen Sie zum Veröffentlichen. Wir werden einen neuen Verleger einrichten. Fluorophore haben bereits ein Profil für den lokalen Einsatz, was ein vollständiges Profil ist, oder? Also kann ich dieses einfach umbenennen, damit ich genau weiß, wofür es ist. I S Profil. Sicher. In Ordnung. Nun, dann will ich einen neuen. Und dieser hier wird das Azara-Profil sein. Was ich also tun möchte, ist in einem Azure-Up-Service bereitgestellt. Nein, wenn du nicht so viel weißt, zitiere ich Azara unbekleidet. Was passiert, ist, dass Sie eine Anwendung unter einer Verpflichtung als Service-Art von Einschränkung bereitstellen können , was bedeutet, dass Sie sich nicht um diesen Server oder irgendetwas kümmern müssen. Sie bereiten nur Nacht vor, haben einen schönen Container für Sie und setzen Ihren Code dort. Und dann werden sie Sachen erledigen, damit du wie ein Cis wirst, richtig? Oder vielmehr wäre das die Dienstleistungsplattform als Service. So bieten sie die Plattform als Service für Sie, um einfach auf sie zu setzen und es wird einfach laufen. Also, das ist, was sie mit der Beobachtung ist, und dann, was sie ein Windows oder Linux kaufen wollten, wir verwenden Windows. Andernfalls kann er es Container oder zu einer Containerregistrierung oder zu einer virtuellen Maschine tun. Also im Grunde die gleichen Art von Überlegungen, die mit der IIS-Bereitstellung auf Ihrem Computer oder Ihrem Netzwerkcomputer gemacht worden wären , müssten Sie diese Art von Überlegungen gegen eine VM in Azure durchführen, da dies dasselbe ist wie nur eine virtuelle Maschine CM-Server. Und er Hall, wir werden die Plattform als Service wählen. Der Dienst, und klicken Sie dann auf Weiter. Und dann, nein, es könnte Sie auffordern, sich zu verbinden. So müssen Sie sagen, in gut altehrwürdigen Abstieg in diesem kleinen Swami, es zeigt Ihnen die Abonnement-Ressourcengruppe. Und ich habe nicht viele davon. Also werde ich nur voran gehen und drücken Sie diese plus Wissenschaftler beginnen, darauf aufzubauen auf Service die USA für den Namen. Ich werde den Namen nicht ändern. Und dann habe ich ein paar Ressourcengruppen, SIR, von Foss-Projekten. Aber ich werde einen brandneuen erschaffen. Ich werde es eine Gesamtliste nennen. Api. Das ist also der Name dieser Ressourcengruppe. Und dann der Hosting-Plan hier, kann ich es auf der Standardeinstellung lassen, aber dann haben sie einen kostenlosen Hosting-Plan. Und basierend darauf, wo ich in der Welt bin, ist Ost US zwei meine beste Wette. Und wählen Sie frei. Du könntest also irgendwo anders auf der Welt sein, du wählst den Grund, der dir am nächsten ist, aber basierend darauf, wo ich bin, ist Ost USA zwei meine vernünftige Wahl. Wählen Sie nun die kostenlosen Bereitstellungen aus. Klicken Sie auf OK, und erstellen Sie dann. Und dann, nachdem dieser Prozess abgeschlossen ist, können wir weiter gehen und klicken Sie auf Weiter und dann können wir aktualisieren. Keine Apologen sind Management, also will ich kein Management. Ich werde diesen Schritt einfach überspringen und dann klicken wir. Der nächste Bildschirm zeigt uns also, was unsere Website-URL sein wird. Was auch immer der AP-Name ist, dass wir dort sitzen dot, dot 0, websites.net, weil es kostenlos ist. Sie geben uns eine Sub-Domain. Und wir können immer voran gehen und Käufer auf Domain, wenn wir wollen, aber wir werden nicht so weit voraus, aber wir werden dazu führen, dass wir Service-Abhängigkeit von einer Datenbank haben. Sie sehen, ob Sie Ihre Datenbank für Konnektivitätszwecke konfigurieren müssen , oder? Also muss ich gehen und konfigurieren sagen. Und dann die letzten, wollen Sie eine lokale SQL Server-Datenbank oder wird es Azara SQL sein? Also noch einmal, wir werden mit der PAS-Option gehen , wo sie uns nur einen Dienst in der Cloud bieten. Und wir müssen uns nur verbinden. Also müssen wir voran gehen und erstellen Sie eine brandneue Instanz eines Nitobi Service Hosting-Namen, Hotel-Service, DVs, AC Art von Füllung laden einige Dinge. Ich werde es in die gleiche Ressourcengruppe als Ganzes zur Listing-API setzen. Da gehen wir. Und dann Datenbankserver, muss ich einen neuen erstellen. Es wird also einige Dinge ausfüllen, aber ich muss meine administrativen Details eintragen. So und das Passwort Bartov, das ziemlich schrecklich streng ist. Stellen Sie also sicher, dass Sie einen speziellen Karton, Großbuchstaben und eine Zahl haben und Sie sollten in Ordnung sein, sobald Sie sieben Zeichen überschreiten. Sobald Sie also alle diese Details eingegeben haben, können Sie fortfahren und auf OK klicken. Es wird automatisch füllen, was es füllen muss. Es braucht nicht zu einem, erstellen Sie den Datenbankserver und dann hätten Sie Zugriff, um eine Verbindung zu ihm herzustellen. Richtig? Und das ist abgeschlossen. Also lassen Sie uns gehen, klicken Sie auf Weiter. Und dann, was es tun wird, ist zu sagen, okay, das ist der Name der Datenbankverbindungszeichenfolge. Was ist der Benutzername? Also müssen wir den Benutzernamen zurücksetzen, den wir nur verwenden, um die Datenbank und das Passwort zu erstellen. Und dann wird es in der Uzziah aufrührenden Abteilung halten. Wir können den Schlüsseltresor auswählen, aber ich werde das einfach als Standardeinstellungen dort belassen. Und dann, wenn wir wieder tatsächlich den Verbindungszeichenfolgenwert anzeigen wollen. So kann ich Ihnen tatsächlich zeigen, dass die Datenquelle, dies die Verbindung zur tatsächlichen Datenbank in Azure ist, richtig? Also, wenn ich das nur für meine eigenen Zwecke kopiere. Dies zeigt den ursprünglichen Katalog, das ist der Datenbankname, für den die Benutzer-ID an diesem Punkt wahr sein wird , unabhängig von der Domäne und dem Passwort, ich habe ein einfaches Passwort verwendet, natürlich , in einer realen Einstellung würden Sie eine mehr sicheres Passwort. So dass wir tun können, ist gehen Sie weiter und klicken Sie auf Weiter. Und wir müssen hier nichts anfassen und einfach fertig sagen. Alles klar, und jetzt können wir auf Veröffentlichen klicken. Und das könnte eine Weile dauern, weil es ein paar Ressourcen schaffen muss. Und das bedeutet, dass Sie die Anwendung veröffentlichen, ohne die Laufzeit zu bündeln die Laufzeitkompatibilität zu übernehmen. Damit wir das geben können. Das Endergebnis dieser Überprüfung ist jedoch, dass es den Browser startet und mir diesen 500-Fehler sendet. In Ordnung, also wissen wir wenigstens, dass es reagiert. Die API ist also da, aber wir haben immer noch ein paar Dinge, die wir tun müssen. Beginnen wir also, indem wir zu unserem Portal gehen. Also nur klicken Sie einfach in einem 0 Portal verwalten, wir werden auf die Geschwindigkeit navigiert, die uns die Anwendung zeigt, die in einer 0 läuft. Also gut, wir wissen, dass es definitiv nicht verehrt wird, es ist da. Wir klicken Bros. Es ist gut, uns die URL zu zeigen, sorry, vorausgesagt von HTTPS. Und wir kommen durch die 500. Also sind wir nicht, wir sind nicht besser dran als vorher, aber zumindest können wir ein paar Dinge bestätigen. Wenn wir nun zur Konfiguration gehen, wird es uns einige der Dinge wie unsere Verbindungszeichenfolge zeigen. In Ordnung, also denken Sie daran, dass die Verbindungszeichenfolge und diesen versteckten Wert, zumindest aus dieser Verbindungszeichenfolge, ich kann den Server für die Datenbank sehen. Also werde ich das einfach kopieren. Denk daran, dass ich es dir vorhin gezeigt habe, also werde ich das einfach kopieren. Und dann im Management-Studio werde ich versuchen, eine Verbindung herzustellen, es wird nur darauf klicken. Wenn er es schon offen hätte, ist das in Ordnung. Wenn nicht, werden Sie in Management Studio gestartet, geben Sie den Servernamen und die dort vorhandenen Anmeldeinformationen ein und klicken Sie auf Verbinden. Und es wird Sie nur aufgefordert, sich anzumelden. Was passiert, ist, dass die Firewall sieht, ich erlaube keinen Zugriff auf die Datenbank von einer anderen Quelle, die außerhalb von 0 ist. Also jetzt, was ich tun möchte, ist, einfach anmelden und dann wird es eine Ausnahme für die IP-Adresse hinzufügen , die ich benutze. Das ist also ein wichtiges Sicherheitsmerkmal. Also werde ich hinter dieser IP-Adresse sein. Jemand von zu Hause aus mit einer anderen IP-Adresse wird nicht in der Lage sein, zur Datenbank zu gelangen , es sei denn, er meldet sich an und verifiziert genau so, wie ich es jetzt tue. Also gehe ich einfach weiter und klicke auf OK. Natürlich gibt es Möglichkeiten, den Zugriff von überall zu ermöglichen, aber das müssen wir jetzt nicht tun. Und wenn ich dann in die Liste der Datenbanken schaue, sehen wir unsere Datenbank. Also bestätige ich nur, dass unsere Datenbank ist. Aber sieh dir das an, es gibt keine Tische. Und was ich tun werde, ist das Profil zu bearbeiten und zu den Einstellungen zu gehen. Und wir haben diesen Schritt tatsächlich übersprungen. Ich schätze, wir sind zu eifrig, oder? Also haben wir nicht die Migrationsschritte durchgeführt, wenden Sie diese Migration auf Veröffentlichung an. Und nun, wir haben bereits eine eigene Verbindungszeichenfolge mit der neuen gehosteten Datenbank zur Laufzeit verwendet . Also, das ist nicht wirklich notwendig, wieder zu ticken, aber das ist in Ordnung. Und ich werde speichern und dann werde ich einfach wieder auf Veröffentlichen klicken. Und wenn wir uns nur das Protokoll ansehen, sehen Sie das Hinzufügen einer Datenbank. Und dann sehen Sie hier, es gibt uns einige Hinweise auf einige Skripte passiert. Also lasst uns nochmals nachsehen. Und was passiert dieses Mal ist, dass, weil wir sagten, die Migrationen anwenden, es ist tatsächlich voran gegangen und die füllten alle Tabellen für uns. In Ordnung, das sind also die wirklich wichtigen Teile davon. Also mussten wir nicht manuell verteilbar sein. Wieder einmal wäre es ratsam von Ihnen in unserem realen Produktions-Live-Szenario diesen Prozess ein bisschen mehr zu steuern, als wir es bei unseren persönlichen Projekten und in unserer persönlichen Zeit tun können. In Ordnung, damit Sie meinen anderen Kurs zur Bereitstellung und Steuerung der Produktion in den Umgebungen überprüfen können . Aber dafür sind wir nur, wir wollen nur unsere API zum Laufen bringen und verstehen, oh, alle Systeme haben zusammengearbeitet. Dies ist also unsere Datenbank, die derzeit auf Ihrem Server funktioniert. Also gehen wir zurück zu unserer Debug-Konsole anstelle von Kudos, gehen Sie auf Website www root. Und dann denken Sie daran, dass wir gesagt haben, setzen Sie die Liebe die gleiche Wurzel wie das Dateisystem. Deshalb haben wir direkt hier Zugriff auf unseren Logs-Ordner, der uns unser Protokoll zeigt, seit wir diese Bereitstellungen gemacht haben. Wenn ich es also einfach herunterlade, öffnen wir es in einer neuen Browser-Sitzung. Und ich wollte nur sehen, warum es durch den letzten Fehler. Also sagt es, dass etwas schief gelaufen ist mit einem Argument, das nicht wie sip son , einem Stringer Referenzfehler , einem Stringer Referenzfehler und einer Codierung, die in Service-Erweiterungen Zeile 46 passieren soll. Also, wenn wir einfach gehen und uns den Code ansehen und sehen, was genau in dieser Zeile passiert. Es ist, wo wir unsere JWT konfigurieren. Und du siehst, dass wir das alles tun. Und hier steht, dass die Codierung fehlgeschlagen ist. Und es ist fehlgeschlagen, weil wir nach C0 suchen. Und C0 ist wirklich eine Umgebungsvariable namens key. Also denken Sie daran, dass wir nur sitzen mussten, die offen ist. Ich denke, wir müssen dasselbe tun wie Ihre, okay, also was ich tun werde, ist, zurück zu unserem Management-Dashboard zu gehen und zur Konfiguration zu gehen. Und dann kann ich von hier aus neue Anwendungseinstellungen sagen. Ich werde sagen, dass die neue Anwendungseinstellung zusammen mit dem Wert Schlüssel ist. Also ich meine, ich kann Kontinuitäten den gleichen Wert. Ich werde wahrscheinlich nur einen einfacheren Wert verwenden, aber dann wollten Sie für die Konsistenz zwischen der Umgebung wahrscheinlich Dinge scheinen. Also ist es, wissen Sie, das eine oder andere verwenden entweder eine einfache in Entwicklerkörpern komplizierter in der Produktion oder Sie verwenden eine pro Umgebungen. Für Sicherheit und Trennung von Rollen, Situationen, Entwickler möglicherweise nicht in der Lage, einfach in die Produktion zu gehen und etwas zu manipulieren, weil er wahrscheinlich nicht weiß. Aber der Einfachheit halber werde ich nur die Cmd-Taste über halten. Und ich klicke auf OK. Gehen Sie weiter und speichern Sie das, fahren Sie fort. Und es wird sagen, wir werden die Anwendung neu starten, das ist in Ordnung. Gehen Sie weiter und starten Sie ihn neu. Und sobald das neu gestartet wird, werde ich zur Übersicht gehen, gehen Sie zu Höhlen sind an, so dass wir nirgendwo Brüs können. Wir kriegen das, Sally, wir bekommen jetzt eine 500. Dies ist der gleiche Fehler, den wir erhalten haben, wenn Sie die iOS-Bereitstellung durchlaufen haben. Das ist alles, was wir haben, Gewinne und Route. Also, wenn ich Slash Swagger sage, dann wird es mich dazu führen, dass das Swagger-Dokument auf unseren Azure-Websites gehostet wird. Dann mache ich einfach einen schnellen Test. Also werde ich versuchen, das Land exekutieren zu lassen. Und dann habe ich erfolgreich alle Länder abgerufen, die sich derzeit in der Datenbank befinden. Das heißt, wenn ich versucht habe, Postman zu verwenden, werde ich diese URL einfach an Postman kopieren. Und ich werde nur einen neuen Arbeitsbereich erstellen, weil man manchmal einen überdrängen kann. Also werde ich nur einen neuen Arbeitsbereich erstellen, überladen Azur. Und dann werde ich hier drüben nur Anfragen im Zusammenhang mit dem Dwell Magazine machen, richtig? Also Land, das ich bekommen wollte, gibt es keine Autoren ist an der Spitze. Aber dann, wie Sie sehen können, können Sie alle Länder direkt von der aber durch bekommen. Lassen Sie uns versuchen, einen dieser Registrierungsversuche und dann etwas zu tun, das gesichert ist. Also werde ich nur zwischen dem ursprünglichen Arbeitsbereich wechseln, wo ich die Anfragen bereits hatte, und diesem neuen. Also geh ich einfach rüber zur Post. Ich kopiere das einfach. Und anstatt dich mit der Erstellung zu langweilig zu machen, habe ich es gerade getan. Der neue Endpunkt wäre also, was auch immer der Websitename ist Schrägstrich und dann APIs. Deshalb habe ich es seit der IS-Bereitstellung, die ich aufgehoben habe, nicht entfernt , weil es hier sinnvoller ist. Richtig? Verstauen Sie einen Kegel Schrägstrich Login und dann können wir senden. Und ich habe eine arabische Ursache, dass ich die Login-Nutzlast anstelle der Register-Nutzlasten Apologen hatte . Also machen wir unser Register und wir haben die Carts Nutzlast mit dem E-Mail-Passwort. Und das ist dasselbe, mit dem wir von einem getestet haben, das wir auf unserer lokalen Seite sind. Also möchte ich nur überprüfen, dass alles noch funktioniert wie es lokal funktioniert und wir bekommen unser Tool akzeptiert. Das ist also gut. Wir sind unter einem Truck. Also, was ich tun kann, ist die Login-Anfrage zu wiederholen. Also klicken Sie einfach auf das, bringen Sie die Login-Anfrage und dann können wir höhere Tolkien senden. Ausgezeichnet. Und dann, was wir tun werden, ist versuchen, unsere Schöpfung zu löschen sind etwas, von dem wir wissen, dass wir gesagt hatten, dass eine dieser autorisierten Flagge. Und natürlich langweile ich Sie nicht, die Verbindung zu bilden, wo Sie wissen, dass sie den Link richtig bilden müssen. Der Endpunkt ist api Schrägstrich Hotel mit der ID. Es ist die Löschmethode. Und dann fügen wir unser Autorisierungs-Träger-Token und das Token hinzu, das wir gerade vom Login zurückerhalten haben. Und dann, wenn wir klicken, rufen wir unser Tool für keine Content-Antwort. Wenn ich also in die Datenbank gehe, um noch einmal unsere Azur-Datenbank zu überprüfen , können wir überprüfen, dass wir kein Hotel mehr mit der ID3 haben. So wissen wir, dass wir einen Benutzer registrieren können, um uns öffentlich die diploid API kennen. Also, wenn ich diesen Link mehr gemacht habe, weißt du, leichter zu merken, dann könntest du tatsächlich zu ihm blättern. Zugegeben, wenn Sie dies tun, hören Sie zu, dies wahrscheinlich nicht mehr existiert, aber der Punkt ist, dass Sie so Ihre API in der Welt veröffentlichen können. Und mit Swagger hast du es jedem leicht gemacht, vorbeizukommen und sagen zu können: Oh, so funktioniert dieser Endpunkt. Und das sind alle von denen. Und Sie sehen, dass wir unser Land V2 beibehalten haben, weil wir unsere APIs amble Versionierung sprechen. Wir behalten die Standard-API für die Wettervorhersage bei, aber natürlich, nein, wir können all diese Dinge bereinigen. Und einige Cleanups, die ich vorschlagen würde wären wie mit Land und Hotel wirklich und wirklich, ich hätte es die Endpunkte nennen sollen. Länder und Hotels Art von Controllern hätte wirklich Länder Controller und Hotels Controller sein sollen. Aber das ist Semantik. Das ist nur eine Frage der Präsentation an dieser Stelle, wir können bestätigen, dass die Funktionalität läuft und läuft.