Transkripte
1. EINFÜHRUNG: Willkommen zu diesem Kurs, moderne Web-Entwicklung mit Blazer und tat es fünf. In diesem Kurs erfahren Sie, wie Sie eine Blazer-Anwendung von Erwachsenen
mithilfe von Techniken und Funktionen auf Unternehmensebene erstellen . Ich bin Ihr Instruktor, Terroir Williams und ich habe über 10 Jahre Erfahrung sowohl
bei der Implementierung von Systemen als auch bei der Ausbildung von Leuten wie Ihnen, um sie zu entwickeln. Ich kann Ihnen versichern, dass das der Kurs für Sie ist, und Sie werden in guten Händen sein. Jetzt als Einführung wollen
wir wissen, was Blazer Blaser ist eine der neuesten Web-Entwicklungstechnologien von Microsoft. Ja, wir hatten das silberne Licht und den Lichtschalter, aber nicht Blazer, sieht so aus, als wäre es hier, um zu bleiben. Es gibt uns eine Alternative zu JavaScript, wenn wir interaktive Single-Page-Anwendungen erstellen, es ist leicht, es ist vielseitig und unterstützt sowohl WebAssembly als auch unsere normale dotnet-Anwendung Bereitstellungsszenarien. In diesem Kurs lernen Sie grundlegende Entwicklung durch den Aufbau voll funktionsfähiger WebAssembly, bitte unsere Anwendung. Sie werden auch den gesamten dotnet fünf Workflow und die Ordnerstruktur verstehen. Und letztendlich wollen wir natürlich unsere Fähigkeiten
nutzen, um mit ihnen an den Arbeitsplatz zu gehen, also auf sauberen Code und wir werden einige unserer Möglichkeiten
erkunden, wenn es um diese Dinge geht. In diesem Kurs erfahren Sie mehr über Entity Framework Core. Sie sind neuer zu lernen, wie man unsere Rest-API manipuliert und entwickelt, wo, was ist auf der Betäubung dotnet Core Services, die ich ging, um Codierungsmuster,
Quellcodeverwaltung, Bereitstellung und Hosting zu betrachten . Dieser Kurs ist voller Informationen, die Sie zum Erfolg führen. Jetzt ist dies ein großer Kurs, der einige Inhalte ruhig ist und, weißt
du, ich werde nicht alles durchmachen. Es wird rauskommen, wenn wir mitmachen. Und ich bin wirklich aufgeregt, Sie hier zu haben. Wir sehen uns in der nächsten Lektion.
2. Installiere Visual Studio 2019 Community Edition 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 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. Keine Workloads beziehen sich wirklich auf die Bibliotheken oder die unterstützenden Bibliotheken für die Art von Up, die Sie erstellen möchten. In diesem Fall möchten wir auf jeden Fall diese
Webentwicklung ASP.Net und Webentwicklungs-Workload erhalten . 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. So können Sie diese auch auswählen. 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 das Laden nicht abgeschlossen ist, erhalten
Sie möglicherweise bestimmte Optionen, die
ich nicht bekommen werde, weil ich es bereits installiert habe. Das wird Sie also durch das führen, was Sie erwarten können. Möglicherweise erhalten Sie eine Option, bei der Sie Ihr Thema auswählen können. Wie Sie sehen können, 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. In diesem Punkt möchten Sie einfach Ihr Microsoft verwenden, das bei allen Loci live
ausgestellt wurde werden mir viel Ruhe bei Zapfen beigebracht. Oder du kannst einfach weitermachen und eins erstellen. Und wenn ich, wenn mein Gedächtnis mir richtig dient, kannst
du eine andere
Nicht-Microsoft-E-Mail-Adresse verwenden , die Speichelkälte absondert. Sobald Sie sich jedoch auf diesem Landing Screen befinden, erstellen Sie hier ein Projekt. Also werde ich unsere Projekte nicht erstellen. Nein, ich zeige dir nur, was dich erwartet. Also gehst du einfach zu Neues Projekt erstellen. Und dann könntest deine Vorlage auswählen. Da es sich also um einen Blazerkurs handelt, möchten
wir nach Blazer suchen. Du suchst nach Vorlagen, wenn du es hier nicht als eines der ersten Dinge
siehst. Sobald du das getan hast, kannst du ihm den Namen geben. Wieder einmal erstellen wir noch nichts. Wenn Sie auf Weiter klicken,
wählen Sie das Framework aus, das Sie bevorzugen. Dann sehen Sie Dotnet Core 3.1, dotnet five und dotnet Sikhs, das langfristig unterstützt wird. Da wir Visual Studio 2022 verwenden, möchten
Sie wahrscheinlich
Ihr Potenzial maximieren und dotnet sechs verwenden. Da wir Visual Studio 2022 verwenden, möchten
Sie wahrscheinlich
Ihr Potenzial maximieren Aber dann siehst du, dass du andere Optionen hast. Aber wenn wir zurückkommen und tatsächlich ein Projekt erstellen und wir durchgehen, was genau ausgewählt werden muss,
nein, wenn Sie so weit gekommen sind, haben
Sie erfolgreich installiert Visual Studio 20226.
4. Erstelle ein GitHub-Konto: 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 Preisgestaltung, 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. Blazor erstellen: Hey Leute, willkommen zurück. Also in diesem Video werden wir viel Zeit verbringen. Wir wollen nur weitermachen und ein brandneues Blazer-Projekt erstellen. Also werden wir tun, ist unser Visual Studio öffnen und dann gehen wir, um ein neues Projekt zu erstellen. Und dann werden
wir von hier aus nach den Blazer up Vorlagen suchen wollen. Sie haben es möglicherweise nicht auf der linken Seite, wenn Sie noch nie zuvor erstellt haben, aber dann könnten Sie es nicht in der Liste der Vorlagen finden. Und dann basierend auf den Arbeitslasten, die Sie beim Einrichten von Visual Studio möglicherweise installiert
haben. Es kann nicht oben zu sehen sein. So können Sie immer einfach eine Suche verwenden und Sie können
Blazer eingeben und es wird diese Liste der Projektvorlage filtern, den Blazer nach oben zu
bringen. So können Sie voran gehen und doppelklicken Sie darauf. Und dann für den Projektnamen basierend auf der Art des Projekts, das wir erstellen werden, die eine aktuelle Anwendung oder aktuelle Management-Anwendung ist. Ich werde es einfach als aktuelles
Management bezeichnen , damit du es benennen kannst, was auch immer du wohler bist. Aber nachdem Sie ihm den Namen gegeben
haben, gehen Sie einfach voran und klicken Sie auf Erstellen. Und dann ist der nächste Bildschirm ein sehr kritischer Bildschirm. Lassen Sie mich Sie also durch die Optionen, die
vorgestellt werden und welche Auswirkungen sie haben. So haben wir zunächst die Möglichkeit, den Blazer-Server hochzufahren. Und wenn Sie die Beschreibung lesen, ist eine Vorlage zum Erstellen, aber er hat einen Server auf der Serverseite laufen und es läuft verwenden.NET Core auch. Signal sind so ziemlich, dass dies
uns nur eine Website geben wird , genau wie jede andere.NET Core-Website, wenn Sie jemals verwendet haben.net-Kern vorher, und es muss auf einem Server bereitgestellt werden, vielleicht ISR auf nur diesem Code, stellen unsere reguläre Website bereit, wie diese eine bereitgestellt werden müsste. Es verwendet Signal oder wer auch immer Art geben uns ein echtes Gefühl für unsere Anwendung. Es ist also nicht die schlechteste Option, aber natürlich wird
Kontext definieren, ob Sie diese verwenden müssen, r no. Die Blazer Web Assembly Option gibt uns
jedoch die Möglichkeit, eine Web Assembly-App zu haben. Und Web, Web Assembly ist ein offener Standard, Anwendungen direkt im Browser ausgeführt werden
kann. Dies bedeutet, dass wir
eine verb-leistungsstarke Web-Anwendung erstellen , die mit einer API interagiert, aber es braucht keinen Server gehostet werden. Ordnung, sobald ein Client oder jemand diese Website besucht, kann
die anfängliche niedrige Zeit länger dauern als der Server eingerichtet, aber es wird tatsächlich die gesamte Anwendung und alle Abhängigkeiten direkt dort auf die -Computer. Und es wird vollständig aus dem Browser laufen, wodurch die Notwendigkeit für den Roundtrip zum Server jedes Mal reduziert wird, wenn er Daten benötigt. Die Auswirkungen dieses Nullwerts wären, dass alle Ihre Binärdateien, alle Ihre Abhängigkeiten sind und wissen, wann Sie auf dem Computer eines anderen sind. Und wenn sie irgendwelche Absichten gegenüber haben was auch immer es Ihre Anwendung tun kann, dann könnten sie etwas schaden, wenn sie wissen, wonach sie suchen. Du weißt also, du musst jeden
Schritt in Gang nehmen und die beste Entscheidung treffen, basierend auf dem Kontext. Also für diesen eigentlichen Kurs, werden
wir Web Assembly verwenden. Aber dann, wenn Sie nach rechts schauen, werden
Sie sehen, dass Sie die Möglichkeit haben, zu machen. Dominante Kern Hosted Web Assembly up. Dies ist also wie ein Hybrid zwischen einem Server und unserer Unterbaugruppe nach oben. Also werde ich das eigentlich tun, weil es uns
die Möglichkeit gibt , das Ganze auf der Web-Assembly-Seite zu erstellen, die die Benutzeroberfläche ist sowie
die API-Seite, die den Server im Gegensatz zu die Server-App, die wir bereits besprochen haben, ist wirklich genau wie jede andere dominate Kernanwendung. Wenn Sie nicht mit 0.1x-Kernanwendungen mit
einem MVC-IRAs vertraut sind, funktionieren Anwendungen. Dann können Sie sich meine anderen Kurse ansehen, wo wir durch diese Art von Websites gehen. Aber vorerst werden wir die Web-Assembly mit dem
ASP.Net-Kern und den progressiven Webanwendungen aufbauen . Oder der Zweck der Option Progressive Web Application ist uns
zu ermöglichen, eine App zu erstellen, die Menschen tatsächlich nicht auf ihren Computer laden können. Also wechseln wir vom DOE-Laden
zum Browser und reden nirgends über das Herunterladen auf Ihren Computer. So würde die Website tatsächlich auf Ihren Computer kommen und Sie können es ausführen und ausführen, genau wie Sie es jedes andere Programm auf Ihrem Computer tun würden. Das ist also, was eine progressive Webanwendung erlauben würde. In Ordnung, also müssten Sie
jedes Mal einen Browser aufspulen , wenn Sie nur durch Ticket und Nutzung wollten. Und ein weiterer Vorteil ist, dass progressive Webanwendungen
auch auf Mobiltelefone heruntergeladen und fast nativ ausgeführt werden können. So ist es eine sehr mächtige Funktion in. Wir werden also voran gehen und sowohl ASP.Net Core-gehostete als auch progressive Webanwendungen einbeziehen. Aber dann wollte ich nur noch ein bisschen Chuck machen, bevor wir weitermachen. Und wir wollen uns unsere Authentifizierungsoptionen ansehen, damit wir Nein lesen können, es ist auf keine Authentifizierung. Wir können das ändern und wir können einzelne Benutzer einen Kegel sehen. Das wird uns
also erlauben alle unsere Authentifizierungs-,
Autorisierungs- und Benutzeroperationen zu verwalten . Alles wäre integriert, müsste nicht viel mehr arbeiten, um all diese Bibliotheken einzuschließen. Und diese Distribution von Web Assembly und dominieren Kern gehostete Anwendung. Es erlaubt uns tatsächlich Identitätsserver zu verwenden
, der auf den offenen Standards basiert, was im Grunde so ist, oder? Nein, das ist der Sicherheitsstandard der höchsten Stufe für die Authentifizierung. Die meisten Websites im Internet verwendet, und es ermöglicht uns, Unterstützung für
lokale Authentifizierung sowie Drittanbieter-Authentifizierung zu haben . Das waren also ziemlich viele Informationen, die auf dich kamen, wenn wir dieses Album kreieren. Hat Latino alle Optionen. Was die Vor- und Nachteile jeder Option sind. Wieder einmal wird durch die Verstärkung dieses Kontexts bestimmt, welcher für Ihre Situation am besten ist. Moment wollen wir die Arbeit zu tun, die Blazer Web Assembly up mit dem.NET Core gehostete progressive Web-Anwendung Features enthalten, wir wollen einzeln Benutzerkonten als Authentifizierung hinzufügen. Und natürlich ist es Dot Net Five Core Course. Also müssen wir sicherstellen, dass wir es getan haben fünf ausgewählt. In Ordnung, dann können wir fortfahren und auf Erstellen klicken. Und sobald das abgeschlossen ist, wo mit Visual Studio und unserem Lösungs-Explorer und dieser ganzen Schnittstelle begrüßt. Und wir sehen einige Dateien in unserem Lösungsexplorer. Also werde ich gleich dort pausieren, weil du viele Informationen hast. Nur wissen, dass Sie diesen Abschnitt über Ihre verschiedenen Optionen auf, was sie alle bedeuten überprüfen können. Aber im nächsten Video werde
ich Ihnen einen Rundgang durch die Ordnerstruktur geben, damit wir
genau verstehen können , wofür jede Datei ist und wie sie alle zusammenkommen, um unsere Anwendung zu machen.
6. Tour und Ordner: Hey Leute, willkommen zurück. In dieser Lektion wollten
wir nur einen kurzen Rundgang durch Blazer machen, alle Dateien, die in diesen Projektvorlagen enthalten sind. So können Sie sich daran erinnern, dass, wenn wir dieses Projekt erstellt, wir wollen ausgewählte Blazer Web Assembly zwei emitted.net Korea gehostet. Wir haben die progressiven Webanwendungs-Feature-Sets sowie die integrierte Authentifizierung eingeschlossen. Also passierten ziemlich viele Dinge genau dort. Und darüber hinaus handelt
es sich um eine.net fünf oder.NET Core fünf Projekte. Also wollten wir nur eine volle Wertschätzung auf haben, Ich werde alles in diesem Projekt ziehen funktioniert. Lassen Sie uns also mit einem Fonds beginnen, der mein Lösungs-Explorer nur zu meiner linken Seite wird.
Wenn dies der erste Kurs ist, den sie mit mir machen, halten Sie
einfach mein Visual Studio-Setup. Andernfalls würden Sie wissen, dass Sie es nach links ziehen können, Sie können es nach rechts und jede Seite ziehen, aber es fühlt sich natürlicher für mich an. Also werde ich immer nach links gehen, wenn ich die Ordnerstruktur
zeige, wo Sie einfach mit Ihrer Abrechnung folgen können. Beginnen wir also mit der Tatsache, dass wir, wenn wir im Lösungsexplorer schauen, natürlich unsere Lösung haben, was auch immer Sie Project oder die Lösung genannt haben. Aber dann merkt man, dass man drei Projekte hat. Sie haben Auto oder in Management, Client, aktuellen Management-Server und aktuellen Verwaltungspunkt geteilt. Sie haben also drei Projekte. Trotz der Box, weil wir unsere Web-Assembly-Kern-gehostete Anwendung erstellt haben. Also für den Kontext, wenn wir nicht die.NET Core gehostete Option wählen, dann hätten wir nur das Mietwagenmanagement Client-Projekt bekommen. Also hätte es dieses Tool nicht bekommen, hätte gerade dieses Web-Assembly-Projekt bekommen. Und dann müssten wir uns irgendwo mit einer API verbinden und tun, was wir tun müssen, damit sie tatsächlich Funktionalität hat. Wieder einmal ist dies fast wie eine statische Website, dieses gesamte Projekt, all diese Dateien, die ich hervorheben möchte, wenn es es kompiliert, dieses Programm, dieses Projekt, diese Website, so viele Möglichkeiten, es zu setzen. Wir werden einfach nicht zum Client matschig und in den Browser laden und von dort laufen. Da wir es jedoch dominiert haben, Core Hosted, was Visual Studio von Schnee bietet, ist die Fähigkeit, die APA tatsächlich in einem zu erstellen. So wird die dots-Server-Anwendung als API dienen. Dies muss also auf einem Server gehen, vielleicht ist ein IIS-Server in Hosts auf Uzziah oder wo auch immer. Und dann verbinden wir uns einfach über das Internet von der Web-Assembly zu unserem API-Projekt oder API-Funktionalitäten, die wir in unserem Serverprojekt haben. In Ordnung, also kurz gesagt, deshalb haben wir diese beiden Projekte, Dot Server und Client. Das DOD, das so ziemlich geteilt wird, ist wie, wissen Sie überbrücken ich zwischen den beiden, weil es
Klassen geben könnte , die das Tool gemeinsam haben könnte oder Datenobjekte. Anstatt sie zweimal zu erstellen, geben
sie uns einfach einen gemeinsamen Punkt. So verweisen beide Projekte Scanner auf den gemeinsamen
Doc-Abschnitt und nutzen die bereits erstellten Kreuze unsere Ressourcen. Jetzt würden Sie wahrscheinlich feststellen, dass jedes Mal, wenn ich auf Projekt klicke, die eigentliche Projektdatei hier, diese CSB-Datei, es öffnet sich eine Registerkarte und es ist nur eine XML-Datei. Also das ist alles, was ich darauf hinweisen möchte, ist die Tatsache, dass sie alle Zielframework.net 5
sagen, richtig? Also sind sie alle Targeting.net fünf. Lassen Sie uns also einen Blick auf das Client-Projekt für ein wenig. Auf dem Client unter diesem Knoten haben Sie also Ihre Abhängigkeiten. Und wenn Sie einen Drilldown durchführen möchten, sehen
Sie Analysatoren oder das Projekt sagen, C8 oder Frankreich ist das gemeinsam genutzte Projekt direkt dort, oder die Pakete. Ich werde nicht zu viel in das eintauchen, was Pakete und Frameworks und Analysatoren tun, während das Projekt weitergeht. Diejenigen, die mehr unter Eigenschaften machen, haben
wir diese Datei namens Launch settings.js Sandwich. Habe es nur einige Konfigurationen für unsere Anwendung in der Lage zu sein, zu laufen. Wenn es läuft. Es sollte unter den Adressproblemen http localhost ausgeführt werden, als wenn es SSL oder HTTPS ist, wird
es diese Portnummer haben. Und da gibt es die Konfigurationen, die
wir von Fall zu Fall hierher kommen und Dinge ändern müssen, aber ich möchte nicht hier sitzen und Sie durch jedes Kleines sprechen, weil Sie wahrscheinlich nicht jemals interagieren müssen mit einigen von diesen. Also lasst uns weitermachen. Also www root, das wird unsere statischen Dateien oder CSS-Ressourcen speichern. Es kommt mit Bootstrap integriert und offen ikonisch. Sie geben Ihnen also einige Dinge aus der Box, die Ihnen helfen, Ihr Design zu beginnen. Sie haben die Datei index.html. Wenn Sie eine Weile tun, was n bys, wissen
Sie, dass Index immer Ihre ersten Dateien sein sollte. Was passiert, ist, dass, wenn die Client-Anwendung ausgeführt
wird, immer auf die Indexdatei schauen wird. Und dann Indexdatei ist, wo wir Referenzen für all diese Dinge definieren. Wir haben unseren Titel. Sie sind also, wenn Sie mit HTML und dem grundlegenden Skelett vertraut sind, sollte
dies Ihnen nicht zu fremd aussehen, bis zumindest der Teil in dem div ID geladen wird. Und dann gibt es einen Fehler, wenn wir nicht laden können. Das ist also wie unsere kleine Vorlagendatei, um dieses div zu sagen, wo die App gerendert wird. In Ordnung, das Manifest JSON sowie der Service Worker. Und diese beiden sind wirklich da, um zu unterstützen oder progressiven Webanwendungen Ambitionen. Also, wenn wir zu diesem Punkt kommen, dann können wir uns die genauer ansehen, aber deswegen haben Sie diese beiden Akten. Wenn Sie diese beiden Dateien nicht haben möchten, ist
es anfällig dafür, dass es keine progressiven Webanwendungen ausgewählt hat. Wir gehen weiter zu Seiten und Seiten. Hier werden wir literarisch
die Seiten definieren , die wir brauchen, um unsere Anwendung auszubauen. So können Sie sehen, dass es mit einigen kam, die uns bereits gegeben wurden, eine für die Authentifizierung, in Ordnung, einer als Beispielzähler, holen Sie Daten und den Index, Ordnung, also Indizes, wo es zuerst geht. Und während wir Load-Anwendung erstellen, werden
wir weitere Seiten hinzufügen. Und mit mehr Seiten kommen mehr Straßen gemeinsam haben alle Seiten sind Komponenten. Das sind also Seiten. Sie werden feststellen, dass sie die gleiche Dateierweiterung dot razor sind, was die Seite wäre die ganze Sache. Während r Komponente an mehreren Stellen wiederverwendbar ist. Deshalb würden wir auf dem gemeinsam genutzten diese Komponenten aufrufen, weil irgendein Navigationsmenü, das Sie wissen, auf vielen verschiedenen Seiten überall auftauchen würde. Sie haben das Hauptlayout. heißt, das sind unsere tatsächlichen Vorlagen, bei denen es nur den Körper von dem macht, was auf der Seite selbst ist. In Ordnung, Umfrage Eingabeaufforderungen. All dies sind nur wiederverwendbare Komponenten und sie werden gemeinsam genutzt, da es auf den verschiedenen Seiten geteilt werden kann. Wir haben die Importdatei, die über die verschiedenen Bibliotheken spricht, die wir innerhalb unserer PHs und unserer Komponenten verwenden
möchten. Wir werden darauf aufbauen, wie wir zusammen mit der Datei app.js gehen, welche Art von Zeilen bestimmte Abschnitte. Hier sehen Sie also, dass es kaskadierende Authentifizierung für den Status hat. Und dann spricht es darüber, ob es nicht autorisiert ist, was es tun sollte und wenn es nicht gefunden wird, was hat sie gesagt, kann tatsächlich
den ursprünglichen Routing-Mechanismus des Blazer erweitern , um zu sagen , dass unter bestimmten Umstände standardmäßig sollten Sie dies tun oder das tun. Also, das ist, was Gutachter app.all Rasierapparat irgendwie. Dann gehen wir zu unserer program.cs Datei. Jetzt ist hier eine sehr, sehr, sehr wichtige Datei. In dieser Datei sehen wir es tatsächlich, dass wir
wollen, dass all diese Dinge an Ort und Stelle zu dem Zeitpunkt, zu dem die App startet. Ordnung, also program.cs wird
unseren Boot-Umreifungsmechanismus enthalten , die Startkonfiguration. Also im Grunde alles, was Sie hier sehen, ist beim Start zu sehen, zum
Zeitpunkt des Startups, das ist, was ich passieren wollte. Nehmen wir zum Beispiel diesen Builder,
die Builder, die sagen, ich möchte eine Reihe von Konfigurationen für die Ausführung aufbauen. In Ordnung, wenn Sie also die erste Zeile betrachten, definiert sie
hier einen Builder. Und dann führt die letzte Zeile diesen Builder aus. Also fügt alles dazwischen dem Baumeister hinzu. Builder Punkt Root-Komponenten, addieren Sie Hashtag up. Wo haben wir Hashtag gesehen oder welche Relevanz ist das? Wenn wir auf die Indexdatei in
unserer www-Regel zurückblicken , um zu sehen, dass wir ein div mit der ID nach oben haben. Okay, also das ist wirklich nur zu sehen, dass wir addieren wollen. Oben ist nur das globale Schlüsselwort für das Blazer up-Tool,
unabhängig davon, welche Komponente oder welches HTML-Element die ID hat. Wenn Sie CSS kennen, wussten Sie nicht, dass der Hashtag wirklich ID bedeutet. Also jedes Element, das die ID hat, Ordnung, und während es weitergeht, es baut, erstellt
es einen Standard-Client, der sich
das Server-Projekt anschauen wird, das Kim mit unserer Vorlage integriert hat. Wir haben auch diesen Schwan, wo wir sehen, ich würde
abnehmen, wir fügen den, Nun, den Client dem HTTP-Client-Builder hinzu. Das alles wird also für dich getan. Wenn Sie eine andere API hätten, die Sie auch hinzufügen oder unterbrechen wollten, müssten Sie etwas Ähnliches tun, um sicherzustellen, dass diese APA von überall in Ihrer Blazer-Anwendung
leicht zugänglich ist . Und dann, wenn wir weitergehen, sehen
wir, dass wir eine Einrichtung für die Autorisierung hinzufügen. Okay, also ist das im Grunde kurz gefasst, wirklich auf den Punkt gebracht für den Klienten und alle beteiligten Akten. Wenn wir weitermachen, werden wir Veränderungen vornehmen und bestimmte Dinge
werden klarer und bestimmte Dinge werden sinnvoller. Nun schauen wir uns die Server-Anwendung an und ich werde nur Dinge überstreichen, die die beiden ohnehin gemeinsam haben. Abhängigkeiten, die auf die gleiche Weise aussehen. Wieder einmal hat es eine Abhängigkeit vom Clientprojekt und es hat eine Abhängigkeit vom gemeinsam genutzten Projekt. Ordnung. Wir gehen zu Immobilien über. Und die Eigenschaften haben wir die Raseneinstellungen Datei, das haben
wir schon gesehen. Wir haben auch diese für eine Service-Abhängigkeiten, die wir über eine Abhängigkeit von MS. Sql sprechen werden. Möglicherweise müssen Sie das verlängern. Möglicherweise müssen Sie das ändern. können wir vorerst in Ruhe lassen. Dann gehen wir weiter zu den Bereichen. So Bereiche wurde nur automatisch generiert, weil wir sagten, dass wir die Identitätsdienste
sind die einzelnen Konten Authentifizierungsfunktionen enthalten
wollten . Also haben wir diesen Bereich Abschnitt, der uns
erlaubt Art von Interaktion mit Login und Logout und so weiter. Sie sehen die Dateien nicht und wissen stattdessen, was wir brauchen, um sie anzupassen. Wir können sie tatsächlich generieren und was wir wollen. Aber im Moment, das ist, was wir haben die Bereiche für uns, um das zu entfernen. Wir haben den Controller-Ordner. Und wenn Sie jemals mit MVC gearbeitet haben, würden
Sie verstehen, was unser Controller ist. Wenn nicht, dann ist ein Controller wirklich nur eine Datei oder eine Klassendatei, die Befehle hat. Sehen Sie, ich habe unsere Bitte angenommen und ich werde Ihnen unsere Antwort geben. Unsere Anfrage könnte sein, ich möchte auf diese Seite gehen. Wenn Sie auf einen Link klicken, senden
Sie eine Anfrage an einen Controller. Der Verantwortliche erhält Ihre Anfrage und gibt Ihnen
dann die Antwort in Form der von Ihnen angeforderten Webseite. Wenn diese Webseite nicht verfügbar ist, ist
das ein GET 400 Vieren und wenn etwas schief geht dazwischen, dann erhalten Sie einen Fehler. Das ist also so ziemlich das, was unser Controller vier ist, also werden wir API-Controller verwenden, denn wie gesagt, das Serverprojekt dient wirklich einem Zweck. Das Client-Projekt mit einer API wird gewartet. Also haben wir ein Beispiel. Ich werde zwei Controller haben. Ich werde nicht zu viel in diesen mit
dem OID c-Konfigurations-Controller bekommen ,
weil dies ein Konfigurations-Controller ist. Und später, wenn wir Authentifizierungssachen machen, wird dies ein bisschen mehr verstehen. Was Farnell Wetterprognose Controller nur über die verschiedenen Endpunkte spricht und es ist ein nettes kleines Beispiel, damit Sie sehen können, wie die Dinge zusammen laufen und wie sie funktionieren könnten. Wenn Sie also die Wettervorhersage anfordern, erhält
dieser Endpunkt Treffer, wenn diese Aktion getroffen wird, so dass die Aktionen des Controllers und dann die Aktion getroffen wird, und dann gibt es diese Daten zurück. Und diese Daten werden über die API-Schnallen an einen Client gesendet, und das wird der Benutzer sehen. Also, das ist es kurz gesagt, Daten werden einige unserer Datenbankkonfigurationen und -klassen definieren und so weiter. Also richtig, nein, wir müssen später nicht zu viel darauf hineingehen, wenn wir oben sitzen, werden
wir in diese Akten eingehen. Modelle sind im Grunde nur Abstraktionen der Datenklassen. Und dann können wir auf Seiten gehen und es im Server-Projekt Girona hören, C1, ph. Und wirklich und wirklich, ich bin mir nicht sicher, ob wir jemals wirklich sehen und mit der Rede oder einer anderen Seite, die wir hier tun,
interagieren werden. Denn wieder einmal, der Schwerpunkt unseres AP ist die Client-Seite, die Client-Anwendung, Client-Projekt, oder? Also ist der pH-Wert Ordner da, aber wir werden nicht viel tun. Jedenfalls. Wir haben settings.js Sohn noch einmal eine andere Konfigurationsdatei. Wir haben die program.cs. Und wenn Sie sich die program.cs hier ansehen, unterscheidet
sie sich etwas von der program.cs im Client. Aber sie tun wirklich dasselbe, weil die program.cs im Client, es ist das gleiche Klassenprogramm, außer dass es all dies in der Hauptfunktion tut, richtig? Wenn Sie C scharf einmal a kennen, das erste, was es als program.cs Datei suchen wird, und es wird die Hauptfunktion ausführen. So funktionieren sie. Also im Server-Projekt haben
wir den Start, es tut mir leid, wir haben die program.cs. Es hat auch die Hauptfunktion, aber bei einer Hauptfunktion ruft eine andere Funktion auf. Und diese andere Funktion, die sie so ziemlich aufruft, führt aus, was in der startup.js ist. Wenn Sie also in der style.css schauen, dann sehen Sie eine sehr ähnliche Konfiguration und Einrichtung wie in der program.cs auf der Clientseite. Es ist also wirklich eine sehr ähnliche Sache. Dies ist nur die Einrichtung von Bootstrapper, um zu sagen, dass, wenn die Anwendung gestartet wird, dies Dienste und Funktionen sind, die ich sicherstellen möchte, dass ich zufrieden bin. So rot hier schien es, dass ich eine Verbindung mit
der Datenbank herstellen wollte , die bei der Standardverbindung gefunden werden kann. haben wir noch nicht eingerichtet, aber es ist da. Es ist zu sehen, dass wir einige Ausnahmefilterung hinzufügen möchten. Wir möchten Identität mit dem Anwendungsbenutzermodell hinzufügen. Wir werden später mehr darauf eingehen. Und wir wollen Identitätsserver hinzufügen sagte, es wäre ein Identitätsserver-Funktionen erhalten, was ist, wenn die Handler-Authentifizierung und Autorisierung, wir wollen einige JWT-Authentifizierung verwenden. All das kann also aus der Box kommen, ohne dass wir zu viel Konfiguration machen müssen. Und dann will es Controller mit Ansichten hinzufügen und Einrichtung für die Vereinfachung der Seiten hinzufügen. Sie werden auch sehen, dass es den Middleware-Abschnitt gibt, in dem andere Funktionen hinzugefügt werden. So könnte ich Zeile für Zeile gehen. Aber einige von ihnen, wenn man sie ansieht, sind
sie irgendwie selbsterklärend und während wir mitmachen, werden wieder mit ihnen interagieren. Also, das ist es wirklich für die Server- und Client-Projekte. Und dann, wenn wir uns die Wettervorhersage ansehen, wird hier sehen, dass dies wirklich nur das Modell ist, oder? Wenn wir also die Referenzen betrachten, sehen
Sie, dass dieses Modell, diese Datei wird sowohl in der Client-Anwendung referenziert. Wenn diese Referenz also sehen Sie, dass sie sie im
Client oder in der Fetch-Datenkomponente verwendet . Und es verwendet es auch auf dem Server. Seite im API-Aufruf. Also zeige ich nur auf diese Transportkoffer, um hervorzuheben, was das gemeinsam genutzte Projekt weit
ist, weil dieses eine Modell sowohl Projekte als auch so weiter bedienen kann. Wir haben Dinge gemeinsam zwischen den beiden. Wir können sie einfach innerhalb der geteilten definieren. Also werde ich nur diese Anwendung ausführen, damit sie sehen können, wie es aussieht. Okay, das ist also unsere Basisvorlage für unseren Blazer. Wieder einmal laufen unsere Kundenprojekte. Wenn Sie sich also den Port Nummer vier für drei ansehen, lassen Sie mich Ihnen einfach schnell die Parallele zeigen. Also, wenn ich zum Client gehen und dann zu Eigenschaften Rasen Sittings gehen, da ist es für 4384. Das ist also die Client-Anwendung, die wir hier ausführen. Also der Zähler, wenn wir klicken, schauen Sie sich das an, wir können klicken und es ändert sich. Und ich habe plötzlich unterbrochen, wenn wir Daten holen, schauen Sie sich an, was es gerade wusste. Also hieß es, Daten zu holen, den Anmeldestatus zu
überprüfen, und dann startet es diese Anmeldeseite. Diese Login-Seite kommt wirklich von den Identity Services. Sie sehen hier unten es Auto in Management Punkte Server sehen. Also denken Sie daran, dass wir den Bereich hatten, auf den ich
hingewiesen habe, wirklich für das Authentifizierungs-Zeug ist, richtig? So dass Seiten wirklich von hier rendern. So funktioniert der Identitätsserver, wo Sie tatsächlich sitzen können, um einfach umgeschrieben, umleiten,
sorry, eine authentifizierte Anfrage an den Identitätsserver, und dann, dass Pj bereitgestellt wird. Und wenn es zufrieden ist, dann wird es weitergehen. Wenn ich kann, die app.js und hier ist, wo es das getan hat. Also sagte es, wenn es nicht autorisiert ist, richtig, dann umleiten, um Login. Also Leser und eine Umleitung zum Login, das ist eine Komponente. Wenn wir uns ansehen, was diese Komponente tut, und diese Komponente ist in Shared Redirect, um es zu melden, navigieren Sie zur Authentifizierung bei Schrägstrich Login mit unserer Rückgabe-URL und allen möglichen Dingen. Also zeige ich dir nur, wie alles eng gekoppelt ist,
nur weiß, dass alles so nahtlos aussah. Das Einzige, was das nicht wirklich gesehen hat, ist, dass es nicht ist, es sieht nicht wie das allgemeine Thema für den pH-Wert aus, mit dem wir begonnen haben, richtig? Das ist das Einzige, was nicht sehr nahtlos aussieht. Aber der Punkt ist, dass, wenn ich Ihnen das nicht alles erklären würde,
und ich merke, dass ich so viele bewegliche Teile habe, die daran arbeiten, all das zu rendern. Also richtig, und all unsere
Login-und-Register-Sachen werden nicht funktionieren, weil es Dinge gibt, die wir tun müssen. Aber ich zeige Ihnen nur, wie die Klingen Aussichten sind. Und hoffentlich hast du diesen Laden genossen, in dem wir
durchgemacht haben , wie all diese Dinge zusammenarbeiten. Und wenn es immer noch Dinge sind unklar, Boot, dann, wenn wir entlang gehen, werden sie mehr Sinn machen. Also bleib dran. Als nächstes werden wir über das Aussehen und das Gefühl
der gesamten Vorlage sprechen und wie wir sie ändern können. Und während wir weitermachen, fügen wir einfach weiter Funktionalität hinzu und erkunden immer mehr Boote sind Optionen in dieser Blazer-Anwendung.
7. UPDATE: Erstellen und Upgrade von Projekt auf NET 6: Hey Leute, in dieser Lektion
werden wir uns zwei Dinge ansehen. Erstens, wie man
das Blazer-WebAssembly Projekt mit dotnet 6 erstellt . Und wir werden uns auch ansehen, wie Sie es
aktualisieren können , wenn Sie es bereits in Donot Five erstellt haben, was überraschend sehr einfach ist. Fangen wir also damit an, wie wir es erstellen. Also alles, was ich tun muss, Visual Studio 2022
statt 2019 zu eröffnen , denn sechs ist einzigartig für 2022. Also kann ich einfach weitermachen und ein neues Projekt erstellen. Ich wähle meine Blazer WebAssembly App aus, schablone sie als nächstes vor und gebe ihr dann meinen Namen. Das ist also Auto- und Managementnetz 6. Ich sage net 6, weil ich bereits das dotnet five Projekt mit dem Namen Current Management im selben Verzeichnis habe. Wenn dies der erste ist , den Sie mit diesem Namen erstellen, müssen
Sie nicht auf das Netz sechs setzen oder
Sie können ihm den Namen geben, mit dem Sie sich wohl fühlen. Nachdem wir den Namen ausgewählt haben, gehen wir zum nächsten, und dann möchten wir auswählen welches Framework wir Dotnet Five verwenden können, wir können Dani Core 3.1 verwenden, aber dotnet sechs ist einzigartig für Visual Studio 2020. Um das Beste aus diesem Kurs herauszuholen, sollten
Sie Don um fünf Uhr verwenden, da dieser Kurs im Rahmen von „Don Five“ unterrichtet wird. Und alles, was hier gelehrt wird, ist unter anderem vorwärtskompatibel mit dotnet 6. Sie möchten also dotnet sechs verwenden und Authentifizierungstyp als einzelne Kegel
auswählen. Und Sie können jede der folgenden Optionen wählen. Sobald Sie das alles durchgemacht
haben, können Sie fortfahren und auf Erstellen klicken. Nehmen wir an, Sie haben bereits das Dotnet Five-Projekt erstellt und wir haben bereits einen Rundgang durch die Ordner
gemacht. Und wofür jede Datei
auf einer höheren Ebene wirklich steht, bedeutet
wirklich und wie sie im Projekt verwendet wird. Wenn wir es also auf dotnet sechs aktualisieren wollen, müssen wir
alles, was wir wirklich tun müssen, und nur ein paar Schritte. Erstens wollen wir das Ziel-Framework ändern. Sie möchten also auf diese CSV-Datei klicken. Steht das an der Spitze des Projekts? Klicken Sie einfach einmal darauf und es
öffnet diese bearbeitbare Datei. Target-Framework ist 6. Das hätte also 5 gesehen. Das kannst du in sechs ändern. Und Sie möchten
diese beiden Pakete auch hinzufügen , damit Sie einfach
Pause drücken und sie bei Bedarf erneut eingeben können. Sie möchten also diese beiden Pakete hinzufügen und dann möchten Sie, wenn Sie einen Build erstellen, einige Fehler erhalten. Keine Panik, denn alles, was Sie wirklich tun müssen ist dasselbe für das Serverprojekt zu tun. Ermöglicht es Ihnen, sechs zu erreichen und die gleichen zwei hinzuzufügen. Sie könnten sie also einfach vom Client kopieren und in die Serverdatei einfügen. Nachdem Sie dies getan haben, möchten
Sie
den freigegebenen Ordner wahrscheinlich auch auf dotnet sechs aktualisieren . Dieser Teil ist wirklich optional. Das kannst du auch machen. Dann willst du es tun. Es gibt also ein paar Schritte,
aber es sind wirklich einfache Schritte. Also gebe ich dir nur nach und nach. Für mich ist es am einfachsten, die Pakete zu aktualisieren, denn was passiert ist, ist dass wir auf dotnet sechs abzielen, aber standardmäßig würde alles auf dotnet five abzielen. Sie möchten also alles auf
die gleiche Version bringen , damit Sie
die Lösung an dieser Stelle einfach aufzeichnen und zu NuGet-Pakete für eine Lösung
verwalten gehen können
, mit der Sie dann nur Updates ausführen auf einmal über alle Ihre Projekte hinweg. Also springe ich einfach zu Updates, die in ein paar Sekunden bevölkert sein werden. Da sind wir los. Und all diese Dinge müssen
von
ihren aktuellen Fünf-Punkte-Versionen auf sechs aktualisiert werden . Tut mir leid, mach einfach weiter und sag Update. Natürlich müssen wir Lizenzvereinbarungen
akzeptieren, wenn Sie mit
diesem Schritt nicht sehr vertraut sind , wie in dem, was NuGet-Paketmanager ist und wie es hilft, oder später wird all das für Sie sinnvoll sein. all diese Updates erledigt sind, Wenn all diese Updates erledigt sind, bekomme
ich immer noch einige Fehler und ich denke, das
liegt daran, dass sie nach und nach unser seltsames filtern. Aber ich denke, einige Projekte haben sich noch nicht durchgesetzt. Also werde ich bauen, eine Rebuild-Lösung
machen. Und jetzt haben wir alles erfolgreich neu aufgebaut und 0 Pfeile. So funktioniert es also im Grunde. Und wenn Sie Visual Studio 2022 verwenden, werden
Sie feststellen, dass die Werkzeuge viel besser sind. Sie werden Dinge sehen, die Sie nicht unbedingt auf
meinem Bildschirm sehen werden , da ich den
größten Teil des Kurses mit 2019 unterrichten werde . Aber Sie erhalten einen bestimmten Code darauf hinweist, dass sie es können.
Sie fragen, ob Sie
IntelliJ-Code erlauben möchten , Sie zu überwachen und ihm zu helfen. Mit anderen Worten, In teleco führt eine erweiterte Intellisense durch, die Ihnen bessere Codehinweise gibt als die Standardstopps. Du wirst also absoluten Spaß haben. Ein weiteres cooles Feature, das sie eingeführt haben, sein heißes Reload, das Sie hier mit diesem Feuerball sehen können. Wenn wir also Autorenschnittstellen erstellen, werden
Sie sehen, dass ich bestimmte CSS-Änderungen oder bestimmte Dinge vornehmen werde, dann muss ich neu starten. Das ist eine der Einschränkungen von 2019. Wenn nicht, wenn Sie 2022 verwenden, können
Sie tatsächlich nur ein heißes
Neuladen durchführen und dann kann es einfach die Schnittstelle
aktualisieren, ohne
dass Sie den Build neu starten müssen. Wenn dir das alles bestraft wird, mach dir
keine Sorgen, du wirst
dich daran gewöhnen und du
fängst an, all diese kleinen Dinge zu schätzen. Und wenn Sie mit der Visual Studio-Oberfläche bereits vertraut sind, werden
Sie einige erstaunliche
Dinge aus dieser neuen IDE sehen . Wenn Sie kein Upgrade durchführen
können, ist das kein Problem. Alles, was sich in diesem Kurs befindet, ist freundlich zu einer der Umgebungen. Also das war's vorerst. Wir sehen uns in der nächsten Lektion.
8. Anpassen von Blazor: Hey Leute, willkommen zurück. In dieser Lektion werden wir unseren Blazer studieren. Wissen Sie, ob Sie mit irgendeiner Form vertraut sind, welche Entwicklung Sie wissen würden, dass das Styling einer Webanwendung wirklich nur mit Ändern und dem CSS und
dem HTML zu
tun hat , um sicherzustellen, dass wir jedem, der zu interagieren mit unserem up. Wenn Sie mit der Erweiterung vertraut sind
die.net-MVC-Anwendungen oder.NET Core MVC-Anwendungsserver-Ergebnisseiten. Sie würden wissen, dass wir diese Layout-Datei layout.css HTML bekommen, die im Grunde den Ton dafür festlegt, wie alle Seiten aussehen würden. Blazer macht es ein bisschen anders Bücher am Ende des Tages, es ist das gleiche Konzept von HTML und CSS, wie wir auf der Tour gesehen. Wir haben eine Reihe von HTML-Dateien. Wir haben einige CSS-Dateien, und was wir tun werden, werden
einige kleinere Verbesserungen verwandeln, was auf dem Bildschirm null ist, um etwas mehr so aussehen. Also gebe ich es zu dunklem Feld, richtig? Ich ziehe den violetten Textmarker aus, um die Leiste oben zu husten, und ich verschiebe den Navigationsbereich nach links. Also, während wir diese Aktivität machen, ist
es nicht so viel, aber es wird uns ein Gefühl geben, wohin wir gehen können, um Watt zu modifizieren. Und wir werden auch ein wenig Gefühl von ganzer CSS bekommen. Css-Isolation funktioniert in Blazer. Jetzt nur das Bock Chuck ein bisschen. So wird eine der wichtigsten Dateien im
Allgemeinen geändert , wenn wir mich hinzufügen werden, weil einige Themen, benutzerdefinierte Skripte oder so etwas für den gesamten Blazer up wäre die
Datei index.html , weil dies den Ton für den Index für das traurige HTML-Dokument mit einem Head-Tags, alle CSS-Links , alle js dot Nichte ,
ihre eigene im Voraus, richtig, also würden Sie dies irgendwann ändern, aber darüber hinaus alles wird mit der ID in unser div geladen. Also jenseits oder index.html Knoten. Die nächste wichtigste Datei wäre unsere Haupt Leo Tabletts sind, die dann eine div genannt Seite rendert, gibt uns unser nav Menü zur Seite, oder? Und dann gibt es uns unseren Hauptinhaltsbereich, wo wir die Login-Anzeige oben haben, dass ein Boot-Link, und dann, was in den Körper kommt. Hier passiert also viel Magie in Bezug auf das CSS und hier kommt die CSS-Isolation ins Spiel. Es gibt keine große CSS-Datei. Ich meine, ja, wir haben CSS-Dateien im CSS-Ordner. Wir haben app.js, CSS, das einige allgemeine CSS für die App hat, die wirklich
der hier oben oder der Indexdatei entspricht , weil es eine Referenz gibt, richtig? Aber wenn es um das Hauptlayout geht, hat
es eine eigene CSS-Datei, wie wir zuvor gesehen haben. Von hier aus kann ich bestimmte Elemente steuern, die nur in dieser Komponente sind. Und ich kann diese CSS-Stile anwenden, was auch immer es ist. Das ist also der Pol der CSS-Isolation. Ich kann eine CSS-Datei haben, die Ariza-Komponenten getrennt von dem allgemeinen UP-CSS gewidmet ist. Beginnen wir mit einer Änderung der Farbe der Navigationsleiste. Um also zum Navbar CSS zu gelangen, kann
ich OK sagen, die Navbar wäre genug. Das Menü befindet sich in diesem div namens sidebar. Wenn ich zum Haupt-Leodes Punkt,
Punkt CSS, gehe ich über , sehe ich die Klassen-Sidebar. Was haben diejenigen, die es nicht wissen, gelernt, während des Gradienten, weshalb Sie sehen, wie sich eine Art von Veränderung in lila
schattiert, wenn Sie wieder laufen und es betrachten wollen. Aber deshalb ändert es den Farbton in Lila. Also, was ich tun werde, ist, das einfach auszusprechen. Ich meine, du kannst es löschen, wenn du willst, dass jemand es behält. Und ich werde in einen anderen Stil als
seine Hintergrundfarbe und dann Hashtag und diesen Wert Sake setzen und das einfach abreißen. Und das ist, was es gibt, dass schön zustimmen, nicht auf dunkle Art von Hintergrund, oder? Mal sehen, wie das aussieht. Okay, also habe ich die Änderung vorgenommen und ich habe die App geladen und ich sehe die Änderungen nicht. Und jetzt ist das nur etwas mit dem Caching. Sie haben eine Reihe von Dingen, die Sie hier tun können. Sie können Ihren Verlauf löschen und es erneut versuchen, und den Browser, den Sie verwenden. Oder Sie können die Kontrolle halten und F5 drücken. Also Ryan, nein, das ist der Farbverlauf, aber für die Navbar gewachsen, wenn ich F5 kontrolliere, dann bekomme ich meinen dunklen Hintergrund. Da gehen wir. In Ordnung, also wenn Sie in irgendeiner Schwierigkeit damit laufen, steuert F5 und Sie sollten in Ordnung sein. Das passiert also, wenn ich
das CSS in dieser spezifischen CSS-Datei für diese Komponente ändere . Mal sehen, was wir sonst noch tun können. Ich habe nicht gesagt, dass wir diese obere Leiste entfernen wollten. Also lass mich zurück zum Akkord gehen, zurück zum Hauptmenü. Und diese oberste Reihe hier ist es, Top Reuters in der Login-Anzeige, sowie ein Aufenthaltslink. Ich will nichts davon, also werde ich einfach die Login-Anzeige ein wenig verschieben und das nehmen. In der Tat, in der Demo hatte ich die Login-Anzeige angezeigt nav Menü. Also, was ich tun kann, ist die Login-Anzeige zu nehmen, oder? Das ist also nur ein Verweis auf die gesamte Komponente, die Login-Anzeige genannt wird. Dann gehe ich zum Navigationsmenü und ich bin immer noch im Debug-Modus, aber aktualisiere früher, bald, bald, sorry. Und was ich im Navigationsmenü tun werde, ist unsere Login-Anzeige-Komponente
einfügen, richtig? Also genug Menü hat Schaltflächen für was haben wir hier? Wir haben zu Hause, wo haben die Theke und wir haben den Abruf. Das sind die drei vielen Gegenstände, die wir sehen, Heimtheke Fitch. Und dann hat es etwas, um das Menü zu kollabieren und das ist in Ordnung. Was wir also wissen müssen, ist tatsächlich sicherzustellen, dass die Login-Anzeige damit übereinstimmt, wie alles andere Schleifen. Denn wie wir es gesehen haben, gab es wirklich nur Links in der Navigationsleiste. Also werde ich mich auffrischen und dort können wir sehen, wie das aussieht. Ordnung, und das sehe ich. Also sehe ich die beiden Links. Die obere Leiste ist weg. So erreicht, dass das, was die Werkzeuge nur sind, sie passen nicht ganz in das Design unserer Navigationsleiste. Lassen Sie uns also ändern, was in der Login-Anzeige ist, um so aussehen. Und ich werde das nur kopieren, weil ich weiß, dass die Art und Weise, wie die Links in der Navigationsleiste aussehen müssen, von diesem gesamten Block abhängt. Wir brauchen das l i, und wir brauchen all diese Klassen auf dem Weg. Also werde ich das einfach kopieren und zum Login-Display
springen. Und dann hier werden wir sehen, dass wir die autorisierten unter nicht autorisierten Ansichten haben. Wir haben jedoch auch bemerkt, dass sie wirklich nur eine Reihe von Anker-Tags sind, oder? Sie werden also feststellen, dass dieser Blazer tatsächlich mit
bestimmten Komponenten kommt , die Ihnen helfen, einige HTML-Elemente zu emulieren, richtig? Also nav Link wäre eine solche Komponente, die Ihnen ein Anker-Tag gibt, oder es ist nur eine Blazer Art, Oncotype zu sehen, weil Sie bemerken, dass beide die gleiche H ref haben, richtig? Also kann ich einfach dieses H ref bleiben, ersetzen Sie es hier. Und ich werde nur dieses LI transformieren. Nun, ich meine, das LI wird mir die Art von Link geben, die ich brauche, um in die Navbar zu passen. Also verwandle ich dieses Anker-Tag wirklich in dieses LI. Das ist es also, richtig? Also der Text, der ich will geteilt werden,
wäre , was hier in diesem Anker-Tag angezeigt würde, die hallo Benutzernamen und wir ersetzen home. Und dafür wären die Profile. Also denke ich für das Symbol, ich werde OID-Personen verwenden. Also haben wir alle, wir haben diese Symbole zur Verfügung, um uns durch offene ikonische. Es ist bereits im Projekt enthalten. So bekommen wir das kleine Haus auf dem Pluszeichen und so weiter, auf der Navigationsleiste. Nur für den Fall, dass Sie nicht vertraut sind. Wenn du das bist, dann solltest du dich überhaupt richtig fühlen. Ordnung? Das ist also derjenige, wenn die Person autorisiert ist, d.h. die Person hat sich bereits eingeloggt, dass man Profil sagt, der nächste sagt Logos. Also werde ich nur duplizieren, dass ich etwas Code habe und ersetzen, was ich jetzt ersetzen muss und den Unterschied damit betrachte. Das hier ist ein Knopf. Dieser wurde auf Kryptologie gemacht. Das hier ist ein Knopf. Mal sehen, was der Knopf tut. Die Schaltfläche hat onclick Ereignis, das sagt Sein beginnt psi naught. Und dann unten sehen Sie einen Codeblock mit diesem sehr Klick-Ereignis beginnen psi naught. Und dann navigiert es zu dieser URL. Also könnte ich, weißt du, ich könnte den Knopf behalten, aber dann benutze ich Nav Links. Anstatt die Spitze zu modellieren, werde
ich es einfach konsistent halten, hier zu entwirren, hier zu innovieren. Also, was ich tun werde, ist die HRF für
den Logo-nav Link auf die gleiche URL zu setzen , zu der er navigiert hätte. Also das Alter ref hier ist Authentifizierungen Schrägstrich Logos. Ordnung? Und dann diese, ich denke, es gibt ein Logos Open Icon. Wenn ich mich nicht irre, dann gehen wir. Ich dash Logo, richtig? Und dann werde ich diese beiden einfach auskommentieren, weil ich sie nicht brauche. Ich habe sie gerade ersetzt. Das Anker-Tag für das Profil der Person sowie die Logo-Schaltfläche. Ich habe sie durch Werkzeug-Nav-Links ersetzt, die an die gleichen Orte gehen, richtig? So können Sie hier pausieren und Sie können versuchen, dasselbe mit diesen beiden zu tun. Ich werde es einfach tun. Also habe ich gerade den Login ersetzt und mich mit den entsprechenden LI-Tags registriert. In Ordnung, und für das Register habe ich o, ich streichle Burson für das Symbol, und dann für den Login oder gestrichelte Login, dash login, sorry. Ordnung. Und dann wirklich und wirklich wird dieser Codeblock nutzlos, weil es nichts gibt, was ihn sowieso nennen wird. Aber später werden wir
den Code schreiben und diese Codeblöcke und Ereignisse verstehen. Lassen Sie uns jedoch einen kurzen Blick darauf werfen, wie das aussieht. Okay, das ist es, was wir bekommen. Nein, Sie werden sehen, dass es irgendwie ein bisschen mehr zu
Hause aussieht , mit all den anderen Links sehen beide zur gleichen Zeit. Das tut es nicht, sie passen immer noch nicht ganz hinein. Und das ist ein weiterer Punkt des Blazer, der CSS-Isolationsteil des Blazer, wo ja, sie sind in der Komponente für die Navigationsleiste. Aber das ist eine weitere Komponente ganz von selbst. Dies ist die Login-Anzeigekomponente, und wir rufen sie nur von der Anmeldung
aus, von der nav Menükomponente. Aber es sind zwei verschiedene Komponenten. Das CSS, das für
das Navigationsmenü gilt , wird hier nicht angewendet, da dies eine ganz andere Komponente ist. Also, was ich tun müsste, um
diese Links zu erhalten , um anzuzeigen, wie jeder andere Link angezeigt wird. Und ich nehme diesen ganzen Autor als Sie von der Login-Anzeigekopie und komme dann hierher. Und anstatt auf die Login-Anzeigekomponente zu verweisen, werde
ich nur diesen ganzen Inhalt dort ausfüllen. In Ordnung, dann haben wir die Autorisierung, Sie autorisieren, dass die Verbündeten nicht bewusst sind, das sollte entsprechend angezeigt werden. Und alles fällt in die Navigationsmenü-Komponenten, was bedeutet, dass das gesamte Styling für die Komponente jetzt angewendet wird. Also, das sind wir neu starten und sehen, was das. Und wenn wir zurückkommen, sehen wir etwas, das anders aussieht. Richtig? Das sieht mir also ein bisschen besser aus. Wie, oh, es sieht Schnee aus. Sie können tun, ist gehen Sie voran und klicken Sie auf den Weg und Sie sehen, dass der neue Link funktioniert dort. Und wenn ich zurückgehe und dann klicke ich auf Registrieren und sehe, dass es auch dort funktioniert. Und so können wir sicher sein, dass alle unsere Links funktionieren. Alles sieht einheitlich aus. Und noch einmal, es, abgesehen von den Nuancen, mit denen wir unsere CS teilen müssen, oder sie sind sich nicht sicher, dass das CSS über Komponenten hinweg. Sie können sehen, wo es eher das Gleiche ist, wenn es um Styling in Blazern geht, nur dass sie Ihnen die Möglichkeit geben, eine einzigartige CSS-Komponente anzuwenden, wenn Sie möchten. Aber letztendlich können Sie alles aus
einer Protease wie bei jeder anderen Anwendung stylen .
9. Blazor erstellen: In dieser Lektion werden wir einen Blick auf einige Blazer-Komponenten werfen und wie wir sie erstellen können, wofür sie verwendet werden können. Und das ist nur ein Glanz überall und begann die AR-Anwendung, über die wir noch lernen, unsere Blazer-Umgebung und all die Dinge, die es uns bietet. Also werde ich nicht zu tief kommen, aber worüber ich reden möchte, ist eine ganze, wir können mehr Seiten erstellen. Und zweitens, wie wir Komponenten erstellen können, die auf Seiten eingebettet werden können. Wenn wir also über eine Seite sprechen, meinen
wir wirklich etwas, das wir navigieren können, um zu schreiben. Also, wenn ich auf Zähler klicke, ändert
es sich, es geht auf die Zählerseite und Sie können es in der URL sehen, die ii vom lokalen Host-Adressschrägzähler
geht. Wenn ich auf Kamm klicke, geht
es zurück, richtig? Diese zum Abrufen von Daten wird versuchen, Daten zu holen, aber dann wird es vor unbefugtem Zugriff geschützt. Und so wird es zur Anmeldeseite navigieren. kommen wir noch nicht ein. Aber was ich tun möchte, ist eine andere Seite zu erstellen, wie alles, was wir den Zähler Pfirsich haben und dann unsere Komponente erstellen, die wir dann auf dieser Seite
einbetten können, damit wir ein Top-End vor unseren Augen sehen können. Bevor wir jedoch darauf eingehen, wir einen Blick auf das, was die Zählerseite hat. Also die Zählerseite, die wirklich nur eine Komponente
ist, ist in Seiten zu finden und Sie werden sehen, dass sie Teradata Rasierer Kegel. Und die Gründe, dass es wirklich nur eine Komponente ist. Wenn Sie sich freigegeben ansehen, sehen
Sie, dass alle von ihnen mit den Arrays vorhanden sind. Und wir haben gerade durchgemacht, welche
Login-Anzeigedosis im Vergleich zu Nev Many gegen all diese, richtig? So kalter Winter und diese teilen eine Sache. Sie sind alle Strahlen sind Komponenten. Freigegeben bedeutet jedoch, dass diese Komponenten in vielen Anwendungen verwendet werden. Versus der Pij ist, wo die, die Komponente dient als buchstäblich eine Seite. Wenn Sie also diese Komponente für den Zähler betrachten, werden
Sie sehen, dass sie diese Direktive von oben auf Seite hat. Und dann sagt es, dass der Root-Server nur auf Colins SRE geklickt oder geändert wird. Es sagte lokale Host-Adresse Schrägstrich Zähler. Das ist der Grund. In Ordnung, so oder so habe ich den ganzen Inhalt. Wir erinnern uns, dass wir das Wort Doppelterror hatten. Wir fügen das aktuelle Kegel hinzu, und dann hatten wir unseren Knopf. Und was passiert, ist, dass, wenn Sie auf die Schaltfläche klicken, es ein onclick-Ereignis gibt, das besagt, naja, inkrementieren um eins. Wieder einmal kommen wir in alle onclick und so weiter, wenig später. Also werde ich nicht zu viel Zeit damit verbringen. Also, wenn ich eine andere Seite erstellen wollte, könnte
ich zu Seiten mit der rechten Maustaste sagen Rasiermesser Komponente gehen. Und dann kann ich von hier aus dieser Komponente einen Namen geben. Sagen wir also, ich möchte das hier einige Leute nennen. Ph, okay, denn das ist alles, was es an diesem Punkt wirklich sein wird. Also wollte nur eine Seite Probe. Das erste, was ich tun wollte, ist, es wissen zu lassen, dass es optimistisch ist. Also brauche ich, ich habe die Seite oben unterschrieben und dann gebe ich ihm seine Route. Also sage ich Schrägstrich Beispielseite. Dies ist, was Sie eingeben müssen, um zu diesen Komponenten zu gelangen. Ordnung? Und lassen Sie mich einfach sagen, das ist ein h3. Also lassen Sie mich ein H5 verwenden und sagen, das ist eine ganze Seite. In Ordnung, jetzt, um es aus dem Menü zu bekommen, weil kein schweben neues Stück, das ich navigieren möchte, um
zu meinem nav Menükomponente gehen müssen, die ich immer noch alle diese Kommentare, kein Problem. Aber dann muss ich es auf die navbar Säge Lachen hinzufügen ist wirklich nur eine Kopie davon nehmen und es ändern. Also dieser sagt, es ist ref Daten holen. Es ist ein grober Zähler. Was bedeutet das? Nun, Zähler hat Wurzelzähler Abruf Daten hat die Route Schrägstrich holen Daten. Also, um zu meiner Seite zu gelangen, brauche
ich Schrägstrich Beispielseite. Also für den neuen Menüpunkt werde
ich nur sagen, h oder f ist gleich Beispielseite. Natürlich muss ich den Text ändern, damit klar ist, dass es das ist, wofür er ist. Und ich werde nichts anderes ändern. Denn wieder einmal ist dies ein Experimentell. Also, wenn ich diese Anwendung ausführe, werde
ich meine neue Menüpunkte Beispielseite sehen. Und wenn ich darauf klicke, navigieren
wir zur Beispielseite mit unseren Inhalten richtig? Und beachten Sie die Route Schrägstrich Beispielseite. Wenn ich also eine Seite eins sagte, dann wird es im Grunde vier Tage lang nichts an dieser Adresse sagen. Er weiß nicht, was das ist. Irgendein Verbiage wird mich jedoch immer wieder auf meine Seite bringen. Lassen Sie uns also unsere Komponenten erstellen, die, wie
Sie wissen, Komponenten waren , die wiederverwendbar sein können. Wenn es also etwas ist, das wir mehrmals verwenden möchten, ist bitte hier eingebettet, aber es wird vollständig angezeigt, worin wir schauen werden. Wieder einmal ist dies nur eine Vorschau der Funktionen. Aber schauen wir uns an, diesen Teil tatsächlich
in eine Komponente zu setzen und dann diese Komponente auf unserem Spielfeld einzubetten. Nehmen wir an, ich wollte Komponenten, aber das wollte sie nicht ganz in den gleichen Ordner legen, der freigegeben ist, oder? So ist es so einfach wie das Erstellen eines neuen Ordners. Dateiorganisation ist immer sehr wichtig, also werde ich es einfach Komponenten nennen, richtig? Wir kennen also Komponenten. Da gehen wir. Und dann hier kann ich sagen, fügen Sie Rasiermesser Komponente. Und dann werde ich das einige Leute pij Komponente nennen, unsere Beispielseite Inhaltskomponenten. Und ich bin nur sehr explizit, damit ich mich daran erinnern kann, wofür es war, richtig? Also, jetzt haben wir diese Komponente. Ich kann alles hineinlegen, was ich will. Ich kann sagen, ich wollte nicht, dass das nur dort gedruckt wird. Ich wollte es in diese Komponenten setzen kann in einem Knopf gesetzt werden. Ordnung? Und dieser hier wird nur Hallo sagen, Welt, richtig? Natürlich verwenden sie Bootstrap, sahen alle Bootstrap vier Klassen gilt. Ich kann sagen, btn dunkel, nur um ihm einen Charakter zu geben. Und dann habe ich jetzt diese Komponente, richtig? Nein, ich möchte, dass der Inhalt dieser Komponente in diese Seite eingebettet wird. Alles klar, was ich hier tun kann, ist, einfach auf diese Komponente zu rufen, als wäre es ein Schlepper. Ordnung? Aber dann merkt man jetzt, dass es eine rote zerquetschige Linie hat und es nicht ganz so grün hat. Mal sehen, ob ich noch einen finden kann, oder? Wenn wir also mit Komponenten zu tun haben, möchten
Sie immer sehen, dass grün den Text embolden. Das siehst du hier nicht ganz. Warum? Weil wir eine Bibliothek einschließen müssen, um auf
diese zugreifen zu können , da diese sich nicht im selben Verzeichnis wie die Beispielseite befindet. Es ist in einem anderen Verzeichnis und es weiß nicht oder Ansicht strukturiert niemanden. So können wir hier oben eine using-Anweisung hinzufügen, wo wir mit aktuellem Management sehen, das ist unser Projektname, aktuelle Management-Punkt-Pflanzen sind, das ist unser Projekt name.com, das ist unser Ordner namens Namespace. Und sobald wir diese using-Anweisung haben, können
wir dann auf die Komponente zugreifen und Sie sehen, alles sieht richtig aus. Natürlich kann die Verwendung von Anweisungen chaotisch werden. Also, was Sie alternativ tun können, ist, sie in die Importe zu setzen. In den Importen können Sie
sie also stapeln , indem Sie sagen, Zelda verwenden, all diese Bibliotheken, die
Sie kennen, verwenden Sie unsere Cross Multiple Views. Sie können einfach voran gehen und sie in diese Importdatei aufnehmen. Jede Ansicht wird sich das ansehen oder alle Komponenten sind, sind die Kandidateneingaben. So wird es wissen, weiß, dass dies ist, wo es aussehen sollte. Also lassen Sie uns das einfach ausführen und sehen, wie das aussieht. Ordnung, also sind wir wieder in der Hand und ich schaue auf die Beispielseite und hier ist es. Also sehe ich einige Müllinhalte und Komponenten, richtig? Dies ist also eine Beispielseite, die h3-Tag ist, das Kim ursprünglich mit r-Komponente ist. Da ist es. Aber dann hat unsere Beispielseite Inhalt Komponente seinen eigenen Titel, hat den Inhalt und Hazara Button, die wir wissen, um dunkles Leder oder so weiter Thema sein, richtig, so dass ist nur noch einmal, eine schnelle Einführung oder schnelle Glanz über, wie wir können erstellen Sie unsere eigenen Komponenten. Und wenn wir auf dieser Anwendung aufbauen, werden
wir mehr und mehr von den Fähigkeiten kommen sehen.
10. Überprüfen und Hinzufügen von Änderungen in GitHub: Hey, Leute, willkommen zurück. Also sind wir hier am Ende
unseres ersten Moduls, wo wir eine neue Blazer-Anwendung erstellen. Wir hatten einen schnellen Walkthrough aller Dateien, halten die jeweils eine Rolle in diesem gesamten Ökosystem spielen. Und dann schauten wir uns an, wie wir das Aussehen anpassen und
sogar ein paar Komponenten für uns selbst erstellen können . Also haben wir nicht viel getan, aber zumindest jetzt haben wir ein TS Zeug viel Blazer ist und wenn es schien einschüchternd vor der Mitte, Sie wahrscheinlich erkennen, dass es wirklich nur eine andere.NET Core-Anwendung an dieser Stelle ist. Oder ich möchte einfach den Überblick behalten, wo es sich ändert. Und wir nehmen kürzere Kegel wie diese
am Ende jedes Moduls wird nur einchecken oder Zitate sind GitHub-Repositories, so dass wir
unsere grundlegenden Checkpoints in der Geschichte der Entwicklung unseres Projekts haben . Ich hoffe, Sie haben bereits Ihr GitHub-Konto erstellt. Und was wir tun müssen, um voranzukommen, wäre nur, um die Quellcodeverwaltung hinzuzufügen. Also, wenn Sie in der unteren rechten Ecke Ihres Visual Studio-Webs schauen, tut mir leid, Fenster. Sie sollten „Zur Quellcodeverwaltung hinzufügen“ sehen. So können Sie voran gehen und klicken, dass und Sie sollten sehen bekommen. Und dann kommt dieses Fenster auf. Und wenn Sie aufgefordert werden, sich anzumelden, dann geben Sie Ihre GitHub-Anmeldeinformationen an. Es ist bereits weiß, wer ich bin und es kennt den lokalen Weg. Meine Kegel, ich bin der Besitzer, der Repository-Name. Ich kann ihm eine Beschreibung geben. Ich kann es privat oder öffentlich machen. Ich werde es öffentlich machen, damit ihr natürlich darauf zugreifen könnt. Und ich würde empfehlen, dass Sie es allgemein öffentlich machen, damit andere Leute kommen und die Arbeit sehen können, die Sie tun. Und es kann helfen, Ihr Portfolio aufzubauen, damit es mit zukünftigen Arbeitgebern teilen kann. So können Sie voran gehen und es privat machen. Allerdings, wenn Sie, wenn Sie sah wünschenswert, meine in der Öffentlichkeit wieder zugeben, und dann sagen Sie einfach erstellen und schieben. Das Ergebnis all dieser Aktionen wird die Erstellung Ihres eigenen GitHub-Repositorys sein. Noch einmal, wenn Sie es öffentlich gemacht
haben, kann jemand auf GitHub kommen und nach Ihrem Griff suchen, als sie das Projekt finden können. Aber nächste Station werden wir anfangen, uns ein paar lustige Sachen anzuschauen. Wir werden anfangen, etwas mehr hinzufügen geschleppt zu suchen, die Authentifizierungs-Engine funktioniert, sowie wie wir anfangen können, Datenbank hinter unserer Anwendung zu setzen.
11. Section – Datenbankoperationen: Hey, Leute, willkommen zurück. In diesem Abschnitt des Kurses werden
wir uns einige der datenbezogenen Operationen ansehen , die uns durch unsere gesamte Blazer-Anwendung gewährt werden können. Also, wenn wir erstellt oder Anwendung wir hinzufügen zeigt, dass wir Authentifizierung auf Bestimmungen wollte. Und aus der Box, was der Bootstrapper tat war uns Zugang zum Identitätsserver, die wir einen kurzen Blick auf schwierig für Arras und Identität und Seiten. Sie werden sehen, dass wir hier etwas haben, das einige identitätsbezogene Operationen anzeigt. Und Identität ist die Bibliothek, die Microsoft für Benutzerverwaltungssitzungen,
Speicher und all diese Dinge verwendet . Also loggen Sie sich ein, melden Sie sich ab und all diese wunderbaren Funktionen kommen aus der Box durch die Identitäts-Kernbibliothek. Mit der Erweiterung hätten sie auch
die Entity Framework Core-Bibliotheken enthalten , die es uns ermöglichen, meinen grauenDatenbankkontext in einer ersten Zitat-Methode einzurichten
unddie Datenbank aus unserer Operation zu
bauen und sie dann zu zerreißen Datenbankkontext in einer ersten Zitat-Methode einzurichten
und nachher. In diesem Abschnitt werden wir
einen Schritt für Schritt gehen, um zu verstehen, wie all diese Teile
zusammenkommen und wie genau wir
unsere Datenbank für unseren Blazer aufbauen werden, weil es keinen Sinn ergibt. Wir beginnen mit dem Aufbau der gesamten Underwriting-Funktionalität wenn wir nirgendwo zur Speicherung haben, oder? Also, wenn wir zurückkommen, werden
wir anfangen, diese Dinge in Teilen zu betrachten.
12. Authentication verstehen: Na gut, willkommen zurück Jungs. In dieser Lektion wollen wir irgendwie alle Authentifizierungsbestimmungen verstehen, die uns durch diese ganze bootstrapped bieten, umfassen Authentifizierung, Projekterstellung direkt dort einige bewegliche Teile, die, wenn Sie nicht nicht ganz verstehen, was Sie betrachten, kann überwältigend aussehen, Oder Sie könnten sie wahrscheinlich einfach ignorieren und alles funktioniert. Aber es ist immer gut, wenn Sie an einem Projekt arbeiten und Sie werden eine volle Wertschätzung dafür
haben, wie alles zusammenkommt. Also wollte ich Sie nur durch einige der Bibliotheken und die Funktionen, die von Anfang an in das Projekt
aufgenommen wurden , führen, um Ihnen eine Idee zu geben, was da ist und was aus der Box kam. Also werde ich in dieser Startdatei für unser Serverprojekt anfangen. Und wir haben das schon mal durchgemacht, aber ich wollte mir etwas Zeit nehmen und wieder auf bestimmte Dinge hinweisen. Niemand, den wir dem Dienst hinzufügen, Bootstrapper Dienste Punkt Standard-Identität. Also kam das natürlich aus der Box. Und was das tut, heißt
es, ich möchte
meiner Anwendung mit dem hier angegebenen Modell eine Identitätsbibliothek hinzufügen . Also standardmäßig haben wir Identitätsbenutzer. Das ist unser Standardmodell, das uns von Microsoft dot ASP.net-Kernidentität gegeben wird. Dies ist ein Standardbenutzer, der, sobald Sie die Authentifizierung eingeschlossen haben, Zugriff auf diesen Benutzer haben. Jedoch, dass Benutzer Art von begrenzt in Bezug auf die Felder, die es, es erlaubt. Weil manchmal, wissen Sie, weit Benutzer, um sich auf Ihrer Website zu registrieren. Du willst Vornamen, Nachnamen, du willst andere Dinge. Was sie also taten, war ein benutzerdefiniertes Klassenbit basierend auf Identitätsverwendungen zu erstellen. Es erbt also alle Felder vom Identitätsbenutzer. Und dann können Sie dieses Glas erweitern und Sie können in Vornamen, Nachnamen,
Geburtsdatum, oder die Dinge, die Identitätsbenutzer aus der Box einfach nicht hatte setzen. Wenn wir abgeschlagene Datenbank zerreißen, sehen
Sie irgendwie, wie genau das sind, was genau basierend auf dieser direkten Vererbung generiert wird. Und dann werden wir sehen, wie wir es danach verlängern können. Also fügen wir eine Standard- und Entität in Form von Anwendungsbenutzer hinzu und sagen
Sie einfach , Sie können mehrere Benutzertypen haben. So Anwendung verwendet den Standard, den sie uns gegeben haben. Wir können Toggles erstellen, wenn wir wollen, ich gehe nicht dorthin, oder? Und obwohl, und dann haben wir die Möglichkeit. Also hier können wir zeigen oder welche Art von Authentifizierungsoptionen dieser Benutzer einhalten sollte. Müssen sie ihre Kegel bei der Anmeldung bestätigen? Richtig? Mit anderen Worten, wir müssen laden, um einen E-Mail-Mechanismus einzurichten, wissen Sie, wie wenn Sie sich auf Ihrer Website anmelden und sie es per E-Mail bestätigen Ihren Buchhalter
und bestätigen , und dann können Sie sagen, und das ist, was diese opsin im Grunde sagt. Willst du das durchsetzen? Also werde ich das sagen, die fällt zumindest Farnell geht oder sie sind noch nicht bereit, in irgendeinen Email-Zeug zu gehen. Also werde ich falsch sagen,
was bedeutet, dass Sie in rotem Nandan schleifen können, tut mir leid, er kann schicken oder registrieren Sie sich bei null und dann kann er sich sofort danach anmelden. Das ist also, was diese Option, ziemlich diese und eigentlich dieser Optionsabschnitt ist eigentlich optional. Richtig, Sie müssen also keine Optionen angeben. Sie können das entfernen, wenn Sie möchten. Und Sie können andere Optionen hinzufügen, wenn Sie möchten. Das CMMI, das weit null fällt. Und dann sagen wir, dass wir all dies zu den Anwendungs-DB-Kontexten hinzufügen möchten, die unsere Verbindung zur Datenbank darstellt. Also hätte darauf hingewiesen, dass früher gesagt hat, wo es nach Standardverbindung als unsere Verbindungen zur Datenbank sucht. Später aber werden wir all diese Konfigurationen
in, auf unsere Finger bekommen und sie besser verstehen. Als nächstes haben wir Dienste, die Identitätsserver, nein, Identitätsserver ist eigentlich eine Reihe von Bibliotheken, die, wissen
Sie, es wird verwendet, um den Zugriff für moderne Anwendungen zu steuern. Und es enthält verschiedene Funktionen wie Single Sign-On-Identitätsmanagement, Autorisierung, API, Sicherheit, allerlei wunderbare Dinge. Und es basiert auf dem Open Auth Standard. Es ist also wie Branchenebene, OpenID-Standard. Es ist wie industrieller Schutz für Ihre Anwendung. Selbst ohne Identitätsserver-Identitätskern kann
dieser Kernsatz von Bibliotheken viele Funktionen bereitstellen, aber ein Identitätsserver erweitert die Funktionen. Und es wird normalerweise
als eigenständige Anwendung für die strikte Verwaltung der Identitäten gegeben , oder? In dieser Situation haben sie diese Bibliotheken in
unseren gesamten Blazer aufgenommen und so können wir alle Vorteile daraus nutzen. Und später. Nun, zusätzlich zum Hinzufügen des Identitätsservers, dann geht weiter zu sagen, wo das Hinzufügen von API-Autorisierung für Anwendungsbenutzer und diesen Speicherbereich. In Ordnung, also würde die API-Autorisierung so ziemlich sagen, dass sie den Identitätsserver für die API-basierte Autorisierung
konfiguriert, was im Allgemeinen bedeutet, dass sie den Identitätsserver JWT verwenden wird. In Ordnung, also JWT, JSON-Web-Token, das sind wahrscheinlich die höchsten Sicherheitsstandards, die API jetzt haben kann. All das kommt aus der Kiste. Wenn Sie jedoch meinen anderen Kurs auf Blazer haben, dann würden Sie sehen, wo wir die API selbst bauen, wir setzen unsere JWT selbst ein und dann fügen wir hinzu, um Bestimmungen noch zu erfüllen, das JWT auf der Client-Seite. Alles ist für Sie einsatzbereit verbunden und verdrahtet. Wenn wir unsere Blazer aufbauen mit diesem Projekt Vorlage konfigurieren Abschnitt,
wir sehen, dass wir haben, ich verwenden Identitätsserver, dann verwenden Authentifizierung und Autorisierung verwenden. Also diese drei Middlewares sind Skelly, einfach das Sahnehäubchen auf den Kuchen legen, um unsere Anwendung zu lassen, oder dass es das ist, was wir beabsichtigen zu haben. Wir wollen die Möglichkeit, jemandem zu erlauben, sich anzumelden und sich zu registrieren, und auch auf die Fähigkeit, einzuschränken. Alle diese Bibliotheken sollten relativ zu den
Bestimmungen sein , die uns über den Identitätsserver gegeben werden. Wissen Sie, ein weiterer Teil, den ich auf O hinweisen wollte, wären die Bereiche. Also haben wir uns die Bereiche vorher angesehen. Er ist nicht im Detail, aber in diesem Abschnitt haben wir diese Seiten und die Seiten, sie sind leer. Alles, was wir haben, ist, dass Login teilweise. Wenn wir jedoch unsere App ausführen, klicken
wir auf Login oder registrieren, sehen
wir, dass die tatsächlich zu einem anderen Abschnitt geht. Lasst uns einfach schnell aufgreifen. Alles klar, wenn ich also auf Registrieren klicke, geht es über die Server-Anwendung auf einer Initialismus-Register-Seite. Wenn ich mich anzumelden gehe, ist
es immer noch auf dem Server und zeigt mir eine Anmeldeseite. Allerdings haben wir bereits festgestellt, dass es keine Seiten mit diesen Namen sind Adressen in unserer Server-Anwendung, weil
wir nun keine Seiten haben. Wir haben nur diesen Controller hier, der Öl-DC-Konfiguration durchführt. Und nun, wir haben nicht Pj heißt Register und Login. Also, was tun müsste, wenn Sie diese Seiten bekommen wollten und durch Erweiterung auf ihr Aussehen und Gefühl
anpassen, weil er sehen kann, dass sie nicht wie die Website aussehen. Sie fühlen sich nicht so, als wären sie Teil unserer Webanwendung. Was wir hier tun können, ist mit der rechten Maustaste Bereiche gehen
Sie zu Hinzufügen und dann werden wir neue Gerüst Artikel sehen. Dann gehen wir zur Identität, und dann können wir weiter gehen und klicken Sie auf Hinzufügen. Und dann wird es im Hintergrund etwas Arbeit machen. Und dann wird es uns erlauben zu entscheiden, welche Dateien wir eigentlich in unsere Projekte gerüstet werden sollen. Also kann ich sagen, override off, was bedeutet, dass er uns alle materialisieren und sie zu dieser ganzen Ordnerstruktur hinzufügen wird. Ich kann sehr selektiv sein und sagen, dass ich nur die Leodes will, ich will nur vielleicht das Register und Login und alles andere kann gut sein. Also werde ich nur sagen, alle Dateien außer Kraft setzen, kein Schaden in diesem Recht? Nach den Datenkontexten kann die Mehrheit den Anwendungs-DB-Kontext einrichten. Und dann kann ich sagen, hinzufügen. Und nachdem wir das getan haben, werden
wir sehen, dass wir jetzt einen neuen Ordner und ein paar neue Dateien haben, richtig? Und wenn ich in einen Kegel schaue, werde ich schnell sehen. Also musst du dich registrieren und einloggen. Und dann, nun, ich habe die Koordinate, ich kann sie ändern und sie aussehen lassen, als wären sie Teil meiner App-Leiste. Und diese nehmen alte einige der Dinge, die es machen, es lässt sie aussehen, als wären sie außerhalb der ganzen optimalen Trend zu bauen. Ordnung. Wir können auch ihre Laozi modifizieren, indem wir unseren eigenen Leo pij erstellen. Nun, es sagt, dass der Pfad Leo Träne in der Ansicht Start Seiten Schrägstrich Shared Schrägstrich layout.css ist. Und wenn Sie in Seiten schauen, dann Schrägstrich geteilt, wir sehen kein layout.css HTML, so könnten wir unsere eigene kleine Tonhöhe erstellen und dann überschreiben, wenn nötig. Aber der Punkt ist, dass all diese Dinge hier draußen und anpassbar. Wenn Sie also jemals mit Identitätskern in MVC-IRAs gearbeitet
haben, sollten Sie dies nicht zu fremd sein. Sie sollten sich wie zu Hause fühlen. Wenn dies das erste Mal ist, dann können Sie damit beginnen, Ihre Registrierung,
Ihre Anmeldeseite und alles in jeder dominierenden Kernanwendung anzupassen . Es ist nicht nur auf den Rasierer beschränkt. In Ordnung. Oder gut, Blaser Andere es ist nicht auf Blazer beschränkt. Und ich wollte von den visuellen Sachen weitergehen und mehr über
die Datenbank reden , weil ich sagte, dass
das der Schwerpunkt dieser ganzen Diskussion gewesen wäre . Also lasst uns zu Daten gehen. Und in Daten sehen wir, dass wir zwei Bibliotheken zu Ordnern haben, oder? Oder einen Ordner und einen Datei-Header. Wir haben den Migrationsordner mit zwei Dateien darin. Und dann haben wir die Anwendung DB-Kontext. Also, wenn wir auf Application DB-Kontexte klicken, sehen
wir hier, dass es Anwendung DB-Kontext nur stecken Klasse. Es erbt vom API-Autorisierungs-DB-Kontext, der Kontexte oder das Laden der Anwendungsbenutzer ist. Dies sind also wieder eingebaute Bibliotheken und sogar diejenigen, die mit dem Mauszeiger über die API-Autorisierung fahren, Sie werden sehen, dass es sich um ein Datenbank-Hindernis für kombinierten DB-Kontext mit Identitäts- und Identitätsserver handelt. In Ordnung, also habe ich gesehen, dass der Identitäts-DB-Kontext hier für die,
für die ererbende Klasse verwendet wird . Ich habe gesehen, dass hier DB-Kontext verwendet wird. Aber dann, weil wir gesagt haben, dass wir eine API-Autorisierung wollten, richtig? Denken Sie daran, dass wir hier oben gesagt haben, API-Autorisierung
hinzufügen, richtig? Dann haben wir den API-Autorisierungs-DB-Kontext verwendet, um dies zu erleichtern. Also senden wir die gesamte Funktionalität dieser Bibliothek an unsere dB-Kontexte, unsere Anwendung DB-Kontexte verkörpert alle Funktionen hier und was auch immer wir noch einfügen werden. Ordnung. Hier haben wir einen Konstruktor, wo es uns erlaubt, einige Optionen zu übergeben. Und Sie erkennen, dass viele Dinge sind sehr anpassbar und er kommt zu diesem und sie geben uns einige Optionen out of the box. So Customizing, vielleicht beschränkt auf nur Watson out of the box und vielleicht kleinere Anpassungen basierend auf unseren persönlichen Anforderungen. Das ist also unsere Anwendungs-DB-Kontextdatei. Wenn wir jedoch ein wenig zurückverfolgen und zu Migrationen gehen, sehen Sie hier die erste Migration, die die Erstellung des Identitätsschemas ermöglicht . Also alle hart die Box, sie geben uns, was wir brauchen, um zu erstellen, alle identitätsbezogenen Tabellen oder wenn sie sagten, Entitätsbezogene Tabellen von SBI-Netzrollen. Dies ist die Rollentabelle zum Speichern von Rollen und Anwendungen in allen Administrator, Benutzer und cetera. Wir haben auch einen Spin bei Benutzern und SBI-Netzbenutzer wird
basierend auf den Standardfeldern generiert , die ich erwähnt ruhig mit dem Identitätsbenutzer, richtig? Also denken Sie daran, dass wir zum Anwendungsbenutzer gehen wollen. Wir sagen Identitätsbenutzer. Wenn ich versucht habe, die Definition davon zu betrachten, dann lass es mich sehen. Stellen Sie das auf. Nun, sie stellen nicht wirklich, wirklich die Felder, die da sind, und das ist kein Problem. Aber der Identitätsbenutzer wird automatisch ID,
Benutzername, E-Mail, E-Mail, Passwort bestätigen,
Hash, all diese Felder verkörpern Benutzername, E-Mail, E-Mail, Passwort bestätigen, . Also, wenn ich sagte, dass wir diese Felder möglicherweise erweitern müssen, indem wir zu Anwendungsbenutzer hinzufügen. Das meinte ich. Vielleicht wollen wir FirstName, Nachname und andere Dinge als Felder in dieser Datenbanktabelle. Später schauen wir uns an, sie zu erweitern. Aber Farnell, diese Migration erlaubt uns, alle Standardtabellen zu erstellen und dann können wir erweitern. Siehst du hier, wir kriegen Geräteschulen. Dies ist vom Identitätsserver, denn wenn Sie Identitätskern verwenden, hätten
Sie diese Bibliothek nicht gesehen. Sie würden nicht sehen, dass beharrliche Zuschüsse regiert werden reinigt. Sbi, net Benutzeransprüche, Benutzeranmeldungen, all diese Dinge. Wir kommen aus der Box mit unserer Identitäts-Kernbibliothek. Ordnung? Also, was wir jetzt tun werden, ist eigentlich Gerüst, dass diese Datenbank bisher unseren Blick auf diesen Code tut, wir haben keine greifbaren Beweise für irgendetwas. Wenn wir versuchen, sich anzumelden, richtig, würde
normalerweise als fast Alpha fehlschlagen. Lassen Sie uns versuchen, sich anzumelden, weil wir sehen, dass es auf die Anmeldeseite geht. Nun, mal sehen, was passiert, wenn man versucht, das zu tun. Okay, also werde ich versuchen, mich anzumelden
und mal sehen, was passiert. Alles klar, jetzt heißt es, dass ich die Datenbankoperation fehlgeschlagen habe, während ich versuche, diese Anfrage zu verarbeiten. Und dann heißt es, er kann diese Datenbank nicht öffnen und alle möglichen Dinge, die uns senden, dass wir die Migration anwenden müssen, das ist die gleiche Datei, die wir gerade betrachten, die Migration
anwenden und die Befehle ausführen, und dann können wir wieder verfolgen. Lassen Sie uns also voran gehen und einrichten, was wir einrichten müssen, damit wir anfangen
können, diese Tabellen in unserer Datenbank zu erstellen. Also in der OB settings.js darauf sagte, dass er kein Datenbanktelefon finden konnte, dass x-y-z. Es folgerte also, dass die Datenbank die Adresse herausgefunden wird ,
die wir in unserer App settings.js IN-Datei skizziert haben. In Ordnung, also haben wir den Server als lokale DB, was der Server ist, den ich mit Visual Studio kam. Es ist sehr an Visual Studio gebunden. müssen wir nicht ins Management Studio gehen. Wenn Sie jedoch einen anderen Datenbankserver verwenden
möchten, z. B. eine Entwicklerinstanz oder eine SQL Express-Instanz. Sie müssen nur den Servernamen dort ändern, oder? So können Sie es lokalen Host machen, Sie könnten es Punkt-SQL Express machen, was auch immer es ist. Du kannst voran gehen und das ändern. Und ich lasse es lokale DB, weil, wissen Sie, für Entwicklungszwecke, ich möchte es hier in Visual Studio. Und ich werde den Namen der Datenbank ändern. Dies ist also ein Standardname, ist Spin es Bindestrich, aktueller Verwaltungspunktserver Dash und ein guter Wert. Das brauche ich nicht alles. Jemand wird es einen aktuellen Management-Unterstrich DB nennen. Also werde ich all das Zeug ausziehen und es machen. Ok. Da gehen wir. Nachdem ich also meine App settings.js, JSON-Datei,
null Lionel wo null bereinigt habe, sehe ich, dass, wenn diese Datenbank nicht bereits existiert, dies derjenige ist, den ich erstellen möchte. Also, und es sagte, fügen Sie die Migration hinzu oder wenden Sie die Migration eher durch Ausführen Update-Datenbank. Was es sah, war, dass, wenn ich die Update-Datenbank sage, es die Datenbank erstellen wird, wenn sie nicht bereits existiert, und dann die unterstützenden Tabellen gemäß dieser Migrationsdatei erstellen wird. Wenn Sie auf diese Migrationsdatei achten, werden
Sie feststellen, dass es wirklich wie eine C-scharfe Übersetzung dessen ist, was in SQL passieren wird, richtig? ID, Tabelle, Spalte, Zeichenfolge. Der Typ wird eingeladen Gebühr. Also, wenn Sie Datenbanken kennen, dann beginnen Sie zu sehen, dass dies wirklich nur C-scharf ist. Sagen Sie uns, was die Fortsetzung zu hören ist. Es ist nicht zu kompliziert, es ist nicht einmal, dass C findet, Um ehrlich zu sein, gibt es nur einen Baumeister. Und dann, am Ende des Aufbaus alles, was nicht passieren sollte, wird
es einfach exekutieren, richtig? Es wird nur erschaffen. Lassen Sie uns also schauen, wie wir die Datenbank erstellen. Also gehe ich zur Package Manager-Konsole. Wenn Sie keine Träne in Ihrem Visual Studio haben, dann kann er immer zu Tools und neuen Paketmanager gehen und
Sie werden die Package Manager-Konsole sehen, so dass Sie es immer einfach so aufklären können. Und dann werden wir sagen Update Bindestrich Datenbank. Nach dem Ausführen dieses Befehls wird
ein Projekt zu bauen und dann lassen Sie uns wissen, wenn es fertig ist. Nein, das war sehr schnell. Es begann zu bauen, es war erfolgreich und dann sagt es getan. Nichts sichtbar. Es gibt keinen Unterschied, oder? Ich sehe nicht, wie etwas passiert ist, wenn neue Dateien dem Projekt hinzugefügt wurden, aber lassen Sie uns die Datenbank betrachten. Also werde ich MySQL Server Object Explorer aufrufen. Wenn Sie das nicht sehen, gehen Sie einfach zu Ansicht und Sie werden SQL Server-Objekt-Explorer sehen. So können Sie das einfach aufrufen und lokale DB-Datenbanken betrachten. Und Sie sehen, dass ich einige Datenbanken habe, einschließlich meiner aktuellen Management-Datenbank, die wir gerade erstellt haben. Und wenn ich das erweitern und in Tabellen schaue, dann werde ich alle Tabellen sehen, die
in dieser Datei skizziert wurden , die auf meiner rechten Seite angezeigt wird. Also haben wir die Rollentabelle, wir haben die Benutzer-Tabelle. Alle diese Tabellen sind vorhanden und stehen für unsere Verwendung zur Verfügung. Ordnung, also gibt es zwei Teile, wenn wir die Datenbank aktualisieren wollen, wo Sie die Migration haben, was diese Art von Datei C ist. Und das sind die Änderungen am MBL-Atomic. Also, er verfolgt jedes Mal, wenn wir eine Änderung an der Datenbank vornehmen, ist
es, als würde er sie verfolgen. Wenn Sie also ein Datenbankentwickler sind und traditionell die Datenbank erstellt haben, aber dann, wenn die Anwendung erstellt wird, um Änderungen vorzunehmen, ist
es etwas schwieriger zu transportieren, dass Sie diese Spalte dazu ändern und es ist mehr Geld. Nun, wenn wir Migrationen im Akkord machen,
das erlaubt uns zu sehen, dass an diesem Punkt das war, was an Ort und Stelle war. Der nächste Punkt, das ist, was Änderungen vorgenommen wurden und es hilft uns, den Überblick zu behalten. Lassen Sie uns also ein paar Änderungen vornehmen. Und die Änderung, die ich vornehmen werde, ist nur der Anwendungsbenutzer, richtig? Wir haben gesagt, dass wir es erweitern wollten. Also werde ich nur sagen, dass ich String Vorname hinzufügen möchte. Und ich werde String Nachname hinzufügen. Also, das sind die zwei Dinge, die ich hinzufügen möchte. Und dann noch einmal, du bist nicht darauf beschränkt zu sehen. Sie können nicht, Sie können nicht Geburtsdatum, es kann nicht adressieren, was Sie brauchen auf einem Anwendungsbenutzer, Sie Qual, aber nicht Autonomie und Änderungen an dieser Datei. Und diese Datei steht direkt im Zusammenhang mit meinem Anwendungs-DB-Kontext, richtig? Dann wird es erkennen, dass die Version, die war, die existierte und erstellt eine Datenbank letztes Mal ist nicht anders als das, was ich angewendet habe. Also nein, ich brauche sie, um zu wissen, dass ich eine Migrationsdatei erstelle. Ich kann sagen, fügen Sie Bindestrich Migration. Und dann kann ich den hinzugefügten Namen für den Benutzer sehen. Etwas führt uns etwas ein Hinweis auf die Änderungen, die vorgenommen wurden. Und dann gehe ich einfach voran und drücken Sie ein Gesetz eingeben, das zu bauen. Und dann wird es eine Migrationsdateien erstellen. Wenn Sie nun in Migrationen schauen, werden
Sie sehen, dass es eine andere Datei gibt, die sogar mit Zeitstempel versehen ist. Also dieser ist auf Null gesetzt, weil das buchstäblich 0 gewachsen ist, richtig? Bei diesem hier geht es jedoch nicht um Zeitstempel, um zu diesem Zeitpunkt an diesem Tag zu sagen, Sie haben diese Migration mit dem Namen gemacht, den Sie ihm gegeben haben. Und dann, wenn wir uns die Dateien ansehen, werden
Sie sehen, dass es nur sagen wird, fügen Sie eine Spalte FirstName. Also ist der Tisch bei Benutzern. Das ist der Typ und er ist nullfähig. Siehst du, das ist alles, was es tut. Ordnung? Und dann werden Sie sehen, dass Sie haben oder nicht funktionieren. Das ist also, weil die Änderung kleiner ist, es sieht viel einfacher aus, tatsächlich zu lesen und zu verstehen, was es tut. Und wieder einmal, es ist wirklich nur C-scharf. Danny war was macht ein Boot oben in, in, in, in SQL? Und das Sehen Sie nicht, dass, sollte ich die Migration umkehren, die Änderungen umkehren, dann ist das, was es tun sollte, Spalte
löschen und das löschen. Also haben wir das OP sagen,
was wir tun werden, und sie sehen nicht, was unverbrannt sein sollte, sollten wir unsere Meinung ändern? In Ordnung, beachten Sie, dass wir die Migration haben. Wir betreiben nur eine Datenbank. Nach einer Migration führen wir eine Update-Datenbank aus und dann ist die Datenbank bereits vorhanden. Also ist es buchstäblich nur auf Fettleibigkeit zu tun. Wenn es nicht existierte, die erste, dann hat es erstellt und aktualisiert. Wenn ich also auf die Datenbank zurückblicke und meine ASP-Netzbenutzer-Tabelle ansehe und die Spalten ansehe. Dann werden wir sehen, dass wir Vorname und Nachname haben. Also habe ich Ihnen wirklich nicht gezeigt, dass es vorher nicht in der Nähe war, sondern basierend auf der anfänglichen Migration waren
first_name und last_name nicht da. Wir sind gerade gegangen und haben sie dem Anwendungsbenutzer hinzugefügt und wissen, dass sie da sind. In Ordnung, das ist eine nette schnelle Einführung in die Art und Weise, wie wir Migrationen durchführen und wie wir Ihre Identität
einrichten und sicherstellen, dass wir über ausreichende Informationen über unsere Benutzer verfügen , wenn wir unsere Anwendungen erstellen. Im Moment werde ich unsere Registrierung noch einmal machen und
sehen, ob wir durchkommen können. Also das Buzzword, das ich verwende, ist ein Passwort außerhalb eines, weil sie sehr streng auf die Parser-Policy phi sind, sagen
wir, vernachlässigen Sie diejenige, die, na ja ,
erstens, wenn ich sie nicht viel treffe, Sie sehen, dass es sendet mir so viel. Und wenn ich das vernachlässige, sagt
es mir, dass es zu schwach ist, oder? So out of the box haben Sie eine stark genug Passwort-Richtlinie , die Sie die Stärke der noch einmal durch die Optionen erhöhen können. Aber ich denke, das ist kompliziert genug für mich, oder? Und auch sein Passwort, Passwort mit einem AdSense und Nummer eins am Ende klicken
wir auf Registrieren und sehen, was passiert. Also kommen wir viel weiter, als wir das letzte Mal haben. Und sieh dir das an. Lassen Sie das einfach, indem Sie zwei Befehle ausführen. Ich musste nicht einmal Vor- und Nachnamen hinzufügen, um dieses Ding
zum Laufen zu bringen weil er vor langer Zeit gearbeitet hat. Und ich werde das einfach in meinem Browser speichern. Nun, du siehst hier wir, es sagt uns hallo, oder? Erinnern Sie sich, als wir unsere Login-Anzeige angepasst haben, um diese Navigationsschaltflächen zu verschieben, damit sie wissen, dass sie hallo sagen,
die Person, die angemeldet ist , richtig? Es erlaubt mir, mich abzumelden. Und dann denke ich, wenn ich darauf klicke, wird
es Profil, Recht,
Authentifizierung und Schrägstrich Profil bringen . Okay, das geht direkt zurück zum Server, zum Identitätsmanager. Es tut mir leid, Identitätsserver verwalten und dann indexieren schreibt. Da gehen wir. Das ist also, das ist es, was wir gerade betrachten. In Ordnung, also wenn wir die Seiten nirgendwo
Zugriff auf all diese Seiten haben , können wir anpassen, schauen und Feld aus, richtig? Also gerade jetzt zeigt es das Profil mit dem Benutzernamen und die Telefonnummer ist Benutzername, Telefonnummer, wieder, James, eine Telefonnummer c. So können wir all diese Dinge out of the box mit sehr wenigen Anpassungen geben, mit sehr geringem Aufwand, mit sehr geringem Aufwand von uns, können
wir unser Login- und Registrierungssystem in unserer Blazer-Anwendung einschalten. Noch einmal, fahren Sie fort, um dies zu modifizieren. Sieht aus, als würden wir nicht in die Anwendung ein- und aussteigen. Aber die Realität ist, dass Identitätsserver wirklich wie eine eigenständige Anwendung ist. Also, weißt du, es ist, es geht in beide Richtungen. Es hängt davon ab, was Sie brauchen, auch wenn Sie dem Benutzer Zugriff auf all diese Dinge gewähren möchten, weil Sie ihnen möglicherweise keinen Zugriff geben möchten, um
ihre Telefonnummer und E-Mail-Adresse nach Belieben zu ändern und so weiter. Vielleicht möchten Sie das alles für sich selbst kontrollieren. Das ist also eine schöne schnelle Einführung in den gesamten Identitätsserver. Und whoa, Identität funktioniert in einer Blazer-Anwendung. Ich hoffe, dass Sie es ein bisschen besser verstehen und nirgends gehen, um tatsächlich unsere Datenbanktabellen zu
erstellen, um den Rest der Funktionen unserer Anwendung zu unterstützen.
13. Datenbank mit Entity Framework erstellen: Hey Leute, willkommen zurück. Also in dieser Lektion werden wir beginnen,
die Datenbank mit den unterstützenden Tabellen für
unsere aktuellen Management-Anwendungen zu erstellen die Datenbank mit den unterstützenden Tabellen für , jetzt alles, was wir bereits unsere Benutzer-Support-Tabellen für die Anmeldung für Trucking Cleans, alle diese wunderbaren Dinge oder um diese zu haben. Und wir haben bereits darüber gesprochen, wie wir sie eingebracht haben. Nein, wir möchten unsere eigenen Tabellen erstellen, die später zur Datenbank hinzugefügt werden sollen. Also habe ich hier auf dem Bildschirm Nieto-Beziehungsdiagramm, ein Entitätsbeziehungsdiagramm. Wissen Sie, es geht nach vielen Namen, aber dieses Diagramm zeigt die Datenbanktabellen und wer Beziehungen mit bis hat. Ordnung. Also, was wir hier sehen können, ist, dass
wir bereits haben, wir wissen bereits einige dieser Tabellen, die bereits wissen, dass wir das Gerät Schulen bestehen Gründe all diese ASP net user verwandten Tabellen wir bereits wissen weil alle wurden für uns durch die Identitätsdienste gerüstet, richtig? Auf der rechten Seite haben
wir jedoch zusätzliche Tabellen, die wir diesen Punkt erstellen werden. Also haben wir Farben. Und ich fange gerade mit denen an, die keine Fremdschlüssel oder keine Abhängigkeiten haben. Also haben wir Farben, wir haben Modelle, wir haben Mikrofone, oder? Weil es ein Auto ins Managementsystem ist. Wenn wir ein Fahrzeug hinzufügen, möchten
wir sicherstellen, dass wir erfassen, welche Farbe es ist. Eine Modalität ist, was es macht. Und im Fahrzeuglärm im Zusammenhang mit all diesen Kosten wird das Make-Modell und die Anrufer-ID
haben. Lassen Sie mich etwas vergrößern, falls es ein bisschen klein ist, oder? Also haben wir die Vin und wir haben andere Felder, die wir das ganze Auto erfassen wollen. Wir werden Buchungen haben, damit wir verfolgen können, wann es von wem gemietet wurde. Und es tat in der Tat alt und dann berechnen Sie die Kosten, all diese wunderbaren Dinge, aber haben die Kunden und grundlegende Informationen über die Kunden und so weiter, so dass die Kunden nicht Benutzer sein, das ist, wo wir eine Kundentabelle unterscheidet sich von einer Benutzertabelle. Wenn wir es schaffen, dass die Kunden sich anmelden und auf das System zugreifen und tun, was sie tun wollten, dann würden wir nicht, um einen Kunden noch erstellen könnte einfach
die ASP-Nettobenutzer-Tabelle für eine Kundenart von Betrieb erweitert verwenden . Und dann könnten wir einfach die verwenden, um alles Wohnhaus von Kunden zu speichern. Also wieder, Kontext ist alles. Wie Sie Ihre Tabellen entwerfen, so dass Sie Ihre Anwendung auf all
diese Dinge entwerfen werden von beiden Jahren Ziele sind die Ziele des Geschäfts, für das dieses System konzipiert wird. Also, was wir jetzt tun wollen, ist beginnen, diese Tabellen zu erstellen. Also haben wir 1236 Tabellen, die wir erstellen müssen. Lasst uns dran kommen. Nein, in Bezug auf Ihr Projektlayout und die Gesamtarchitektur und so weiter, diese Jury, Zoltan, wo ist der beste Ort, um Ihre Tabellen zu
erstellen oder Ihre Klassendateien zu erstellen, die dann Tabellen werden. Was ich meine ist, wir haben bereits Client-Projekte, in denen Sie ein Serverprojekt haben. Freigegebenes Projekt, das dem Zweck dient, Klassendateien zu haben,
sind jedoch alle Ressourcen, die zwischen den
beiden gemeinsam verwendet werden , basierend auf dem Muster, das Sie verwenden werden. Möglicherweise möchten Sie Ihre Datenklassen
in einen freigegebenen Ordner einfügen , da Sie sie dann nicht duplizieren möchten. Sie möchten nicht eine Version von ihnen im Serverprojekt haben, eine Version davon in einem Client. Sie setzen sie einfach in geteilt auf beiden Projekten können auf sie zugreifen, was wir wissen werden. Nun, ich gebe Ihnen nur einen Kontext, nur für den Fall, dass Sie
Ihre Augenbraue stricken vielleicht schon eine andere Idee haben, die kein Problem ist. In anderen Situationen machen Menschen Datenzugriffsebenen, in denen sie die Domänenklassen erstellen, anders, oder? Sie werden bedeuten, also die Klassen, die dann zu den Tabellen werden. Sie erstellen ein anderes Projekt für sie. Und dann behindern sie das Domain-Chaos ist von den Client-Klassen,
was bedeutet, dass der Server und die Datenbank betriebsbereit ist. Auch hier sehen Sie, dass die Datenklassen innerhalb des Clients eine andere Version von ihnen für Clientzwecke verwendet. Und das ist, was wir anfangen werden, dieses Muster wie MVVM zu betrachten, vorsichtig vor Ansichtsmodellen oder API, wie ich sie Details nenne. Also später kommen wir in die Muster. Ich habe nichts gegen Knöpfe. Ich liebe Muster und sehe, wo sie gut sind. Aber im Moment wollen wir nur die Grundlagen machen, um es zum Laufen zu bringen. Denn vielleicht wollten diejenigen eine App erstellen, die aus der Datenbank mit
der Datenbank blau sprechen und ziemlich richtig aussehen kann . Manchmal müssen Sie also nicht auf diese Behinderungsebene gehen, aber dann helfen die Abstraktionen, wenn Sie die Anwendung skalieren müssen. Ich setze mehr Funktionen auf mehr Tabellen und so weiter. Und Sie haben weniger Proteasen Sie Nach Guandu Wartung, das ist ein lila Selbstmuster. Ordnung? Also Netzhaut, was wir tun werden, ist einen Ordner in diesem freigegebenen erstellen. Und ich werde diesen Ordner anrufen, nennen
wir ihn einfach Domain. Ordnung? Domain wird also alle unsere Domain-Klassen haben. So können Sie hier mit einer Prognose sehen ist bereits versichert. Aber warum ist es gewährleistet? Weil unser Controller hier, Wetterprognose ist, wann diese Datei zu verwenden. Los geht's, Wettervorhersage. Und in all unseren Kunden sagten, wenn wir uns die geholten Daten ansehen, wussten
sie, dass sie sehen würden, dass es auch Wettervorhersagen verwendet. Das ist also der Zweck, es in Shared zu setzen, damit beide Projekte darauf zugreifen können. Also richtig, nein, wir werden diese Abstraktion zwischen den Domänenklassen für
die Datenbankoperationen für den Client nicht einbinden. Ich werde nur die gleichen Klassendateien verwenden, um eine Art
Showloch an einem grundlegenden Level Wochenende zu erleichtern, mit den Daten zu sprechen. Also fangen wir mit den einfachen Tischen an, richtig? Also meine nicht neue Klasse. Und einer der einfachsten Tische war ich. In Ordnung, also unser Mikrofontisch, und ich werde das öffentlich machen, damit jeder darauf zugreifen kann. Öffentliche Klasse mc, können wir hinzufügen, und hier sind nur eine Requisite Wanne zweimal und dann erzeugt es dieses Schloss. Also String und schreibt mich wäre wie Toyota Honda. Weißt du, das ist die Marke. So können sie es Marke nennen, wenn Sie wollen. Das ist in Ordnung. Wir hatten auch, was wir Auditfelder nennen werden. Rot, weil wir natürlich ein ID-Feld benötigen, wie immer die Tabelle haben sollte. Wir wollen auch fühlt, dass sagen Datum erstellt und aktualisiert. Nun, die Sache mit diesen drei Feldern wäre, dass diese drei Felder tatsächlich in allen Tabellen wiederholen, oder? Also wird jede Tabelle eine ID haben müssen, und wir wollen Datum erstellt und Taten aktualisiert haben. Und wir könnten sogar den Umschlag schieben, um zu sehen, erstellt durch eine aktualisiert von. Also lasst uns das auch tun. So dass wir wissen, wer sah Saiten erstellt und aktualisiert von. Das wären Saiten. Denn dann wollen wir den Benutzernamen der
Person speichern , die die Operation auf der Erde durchgeführt hat. So String aktualisiert durch String erstellt durch die Zeit erstellt Datum von D, der Titel rot gemalt. Aber dann noch einmal, diese Felder werden über alle Tabellen wiederholen weil dies ich bin, wenn ich Modell und ging aus diesen Gebühren wieder. Also, was ich tun werde, ist wie ein Basismodell zu erstellen, im Grunde eine Tomate. Also werde ich nur eine andere Klasse erstellen und ich wollte es
Basisdatenmodell nennen , Barbies Domain-Modell. Lassen Sie mich es Domain-Modell nennen. Es spielt keine Rolle, aber der Punkt ist, dass ich eine Basis sein wollte, richtig? Ich will es nicht öffentlich machen, abstrakt, nicht abstrakt. Das bedeutet, dass ich diese Klasse nicht selbst instanziieren kann, oder? Aber dann wird diese abstrakte Klasse in diesen Bereichen haben. Also werde ich die ID aus mir nehmen, sie in diese abstrakte Klasse
setzen. Ich werde auch erstellt nach Datumsperioden in allen diesen Auditfeldern nehmen. Und ich werde sie in diese abstrakte Domain-Klasse setzen. Und dann kann ich nur erben. In Ordnung, so öffentliche Klasse macht Doppelpunkt B Islam in Modellen. Also wird kein Mikrofon tatsächlich das Feld dort sowie das haben,
also ist es das gleiche Prinzip wie das, was wir gerade
mit unserem Identitätsbenutzer gegen die Anwendung angesehen haben. Benutzeranwendung verwendet Vererbung von der Basisklasse hinzufügen Entitätsbenutzer, und dann können wir es erweitern, wie wir brauchen. Also hier ist die Erweiterung für mich, richtig? Dann kann jeder andere, den wir tun werden, dem gleichen Prinzip folgen. Also machen Modell. einmal öffentlich. Es wird vom Basisdomänenmodell erben. Also der Knopf sagt die Auditfelder und dann werde ich Namen setzen. Der Grund, warum ich keinen Namen in die Basis gesetzt habe, ist, dass nicht jeder Tipp keine Namen ist. Ich will nichts in
die Bestie stecken , was nicht jeder Tisch drehen wird, oder? Also, während es töricht aussehen mag, Marke und Modell zu haben, beide mit Name und dann ein anderer wird Namen in
Form von Farben, Farbe, Farbe haben . Und wir werden ihm auch den Feldnamen geben. Wir werden es erben basiertes Domänenmodell. Und natürlich muss man es öffentlich machen. Alles klar, aber dann ist es für den 11-CIS-Namen. Also werde ich jetzt mehr in der Nähe von ihm tragbar sein. Also lasst uns in ein paar kompliziertere Tabellen kommen. Und ich sehe immer,
selbst bei der Entwicklung von Code zuerst, entwickeln Datenbanken immer mit den Tabellen, die Badewanne und alle Fremdschlüssel keine Abhängigkeiten sind. Denn dann, wenn Sie zur Abhängigkeit kommen die abhängigen Daten oder Daten, die es abhängig ist, eher schon da ist, oder? Also, wenn wir wollten, um Fahrzeug als nächstes, was wir tun, um die Domäne Gosse. Und dann ist das Fahrzeug der Name dieses. Gleiche Behandlung, öffentliche Erben von unserem Basisdomänenmodell. In Ordnung? Und dann, was wir im Fahrzeugsatz wollen, wäre Jahr Modul-ID und dann virtuelles Feld für das Modell, richtig? Das stellt also
unseren Fremdschlüssel hier dar. Okay, also was, also das, es wird automatisch sagen, na ja,
ich weiß, dass es eine Tabelle oder eine entsprechende Datenklasse gibt, Domänenklasse namens Modell. Ich weiß, dass es ein ID-Feld hat, daher gehen Modell-IDs automatisch in
die Karte zum ID-Feld in der entsprechenden Klasse namens model. In Ordnung, also wird Entity Framework das automatisch für Sie tun. Wenn, wenn ein normaler Aufbau von Datenbanken mit SQL Server, Sie wissen, dass Sie gehen müssen und manuell sagen, dies ist unsere Beziehung zu diesem Entity Framework wurde generiert mit schließen diese Beziehung für Sie. Und dann fügen Sie dieses Feld ein, das das Typmodell ist, und wir nennen es einfach Modul. Aber dieser Knoten erlaubt es, implizieren, dass ein innerer Join notwendig sein könnte. Ohne den gesamten Code für einen inneren Join zu schreiben, würden
Sie automatisch nur die zugehörigen Daten für uns herbeiführen. Also speichern wir die ID, was auch immer wir auf Namen zugreifen können und wer sie für alle anderen Details erstellt hat, die wir brauchen. Wir können virtuell werden, weil virtuelle und Musik überschrieben werden können, wenn wir wollten. Was das in Ordnung ist. Wir können Sie müssen es nicht unbedingt virtuell machen. Ich bin aber Winter inklusive. Also dann haben wir öffentliche ID, public int, machen ID mit den gleichen Behandlungen. Wir haben Farbe mit Farbe-ID, gleiche Behandlung, dasselbe Prinzip. Und dann haben wir die Vin, das Nummernschild, und dann haben wir eine Buchung. Also hier ist ein perfektes Beispiel dafür, warum wir zuerst die abhängig erforderliche Tabelle
erstellen sollten . Das Fahrzeug benötigt also die Buchungstabelle, weil es dort
eine Abhängigkeit hat oder es eine weit entfernte Beziehung zwischen ihnen gibt, außer dieser. Sie bemerken nicht, dass es diese ID und Objekt-Peering nicht hat. Und das sollte eigentlich meine Arbeit überprüfen. Dies sollte eigentlich eine Liste der Suche sein, die die Mietdatensätze darstellt. Richtig. So kann ein Fahrzeug auf mehrere Buchungen sein. Also lassen Sie mich das von unseren gesamten Akkord-Symbol-Gewinnen ändern. Also, das ist, es ist klarer. Ordnung, also wäre dies eine Liste von Buchungen für jeden Fahrzeug. So ziemlich das ist es, was es bedeutet. Was bedeutet, dass, wenn wir eine Buchungsklasse erstellen, und ich kann einfach mit dem Mauszeiger über das und sagen, generieren Buchung in einer neuen Datei, generische Klasse in einer neuen Datei. C erstellt Buchung für US öffentliche Klasse Buchung erben von übergewichtigen Domain-Modell. Und dann wird die Buchung eine Beziehung zu einem Fahrzeug haben, richtig? Also für jeden, der bucht, bekommst
du ein Fahrzeug, oder? Also werden wir das Datum drinnen haben, richtig. So u comma u machen Sie eine Buchung. Um welche Uhr? Ich würde einfach weitermachen und alle fehlenden Bibliotheken dort einschließen. Wir haben den Kunden. Also, welcher Kunde? Also müssen wir eine Kundentabelle erstellen, noch einmal, Abhängigkeit. Und dann haben wir die Preise. Na gut, ich denke eigentlich,
nein, das ist, ich schaue mir mein ursprüngliches Design an. Ich denke, dass die Rate sollte wahrscheinlich auf dem Fahrzeug sein, weil im Allgemeinen, die Realitäten auf dem Fahrzeug, und dann, wie lange Sie das Fahrzeug nehmen, das ist, wie viel Geld aus dem Stück. Also werde ich da drüben in Gehalt setzen. Also setze ich auf ein neues Feld innerhalb des Fahrzeugs namens Bilbo oder tolerieren. Okay, wenn wir also das V in das System stecken, werden
wir sagen, dass dieses Fahrzeug ungefähr zweitausend Dollar auf oh, tut mir leid. In Jamaika dot dot wäre die allgemeinen Noten 2000 Gesetze über alle unsere Rechte sind zweifach und Dasa D, da wir es mit Buchungen zu tun haben, die überschwemmte alte. Also pro Tag oder pro Nacht haben Sie das Fahrzeug. Das ist ein bisschen GOP. Und dann können wir immer nur berechnen, basierend auf dem, was hier ist. Also, das ist es für die Buchung. Aber dann brauchen wir natürlich noch Kunden, damit wir das Gleiche tun können. Wir generieren nur die vier Kunden, oder? Es ist ein OAEP oder Kunde. Und dann sahen wir, dass wir vom Basisdomänenmodell erben. Und dann unsere Felder hier wäre Tucks Idee Adresse, E-Mail-Adresse und Kontaktnummer. Und dann wollen
wir natürlich sicherstellen, dass wir eine Vertretung für die Beziehung haben. Die Sache ist also, dass dies wie eine Zwei-Wege-Beziehung ist, wirklich eine Zwei-Wege-Beziehung, in der es nur sicherstellt , dass diese beiden verwandten Entitäten einander kennen. Dies ist also eine Buchung kann nur einem Kunden gehören, aber dann kann ein Kunde mehrere Buchungen haben, oder? Also ja, die Buchung als eine Vertretung eines Kunden auf einmal, aber dann hat der Kunde mehrere Buchungen, genau wie wir mit den Fahrzeugen gesehen haben. Richtig. Also die gleiche Art von Liste von Buchungen, die wir in den Fahrzeugen haben, müssen Sie in
der Kunden-Tabelle setzen und alle fehlenden Referenzen enthalten. Da gehen wir. Und dann können wir einfach einen Build machen, um sicherzustellen, dass alles in Ordnung ist. Also können wir eine Rechnung machen, nur um sicherzustellen, dass alles in Ordnung ist. Ordnung, also haben wir alle unsere Domain-Dateien in unserem gemeinsam genutzten Projekt mit dem Domain-Ordner, richtig, also das ist der Namespace. Wissen Sie, um unsere Datenbank dazu zu bringen,
die Tabelle zu generieren , entspricht das diesen, richtig? Nun, wir müssen zu unseren Daten in unserem Serverprojekt
gehen, zum Anwendungs-DB-Kontext gehen. Und dann müssen wir sie hier auflisten. Um sie aufzulisten, beachten Sie nicht im Konstruktor, dies ist unser Konstruktor. Also unter Punktkonstruktor, aber in der Klasse müssen
wir anfangen, öffentliche VB
den Datentyp und dann den Namen zu sehen , dass wir die Tabellen den Hub wollen. Also beachte, dass dieser hier einzigartig ist, einer ist Pleura, richtig? Die Klasse ist im Allgemeinen die Entität singular, das Gras, weil unsere Klasse eine Instanz aus darstellt. Aber dann ist die Tabelle die Sammlung dieser Instanzen, richtig? Der Tabellenname wäre also Fahrzeuge, welche Klasse die Tabelle auf Möchtegern-Fahrzeug basiert. In Ordnung, also wieder, diese gehen voran und schließen die fehlende Bibliothek mit aktuellem dat ein. Nein, sie weiß, woher sie diese Dinge findet. Also können wir einfach voran gehen und das einbeziehen. Folgen Sie also diesem Muster, öffentlichen DB-Set, Winkelhalterung, dem Klassennamen, der schließen abgewinkelte Klammer, dem Klassennamen pluralisiert, und erhalten Sie dann Einsätze, so dass er einfach voran gehen und das für alle für Farbe, MY Modell Kundenbuchung. Ordnung? Also, sobald Sie all dies getan haben, wäre
der nächste Schritt, um eine Migration zu erstellen, weil null, wenn wir eine Migration erstellen würde, wird Backup-Anwendung DB-Kontext aussehen. Und beachte, dass die letzte Wanderung keinen Schnee hatte. Das ist da. Ich muss eindeutig Änderungen vornehmen. Also lassen Sie mich diese Änderungen dokumentieren, richtig? So Paket-Manager, Konsole, fügen Sie Bindestrich Migration. Und dann werden wir sehen, hinzugefügt, sagen
wir Anwendungstabellen. Und dann, wenn wir das tun, wird es bauen. Und dann wird es uns unsere Migrationsdateien geben, die noch einmal zeigen, was Sub-Bullets hoodoo im Begriff ist, eine Tabelle namens Farben zu erstellen. Und die Spalten enthalten die ID-Spalte, die int ist, und es wird automatisch festgelegt, dass es Identität tut. Sie wissen also, dass, wenn Sie es selbst in der Datenbank getan haben, Sie es als Synthetase-Identität für Primärschlüssel festlegen müssten. Das geschieht ganz von selbst. Es schließt ab, dass die ID-Spalte der Primärschlüssel dort sein wird, sagte der Primärschlüssel als ID-Spalte, oder? Kunden, gleiche Behandlung. Und dann für die Beziehungen, werden
Sie sehen, dass es hier einige Fremdschlüsseleinschränkungen gibt. Sagt einen Fremdschlüssel für Farben, Farben, ID, FK, Fahrzeuge. Dies ist also ein Fahrzeugstabil und es sieht beim Einrichten eines Fremdschlüssels zwischen der Fahrzeugtabelle und der Farbtabelle, wobei die Aufrufer-ID von der Tabelle des Aufrufers zur ID-Spalte freigegeben wird. All das wird FRD für Sie von Entity Framework gegessen. Ordnung? Und auf die gleiche Weise haben wir das Web, das nicht auf neue trägt, können
wir einfach die Änderungen umkehren. Der Punkt ist also, dass Sie jederzeit eine Änderung vornehmen oder eine Änderung vorgenommen haben ob Sie
eine neue Tabelle hinzugefügt haben oder neue Felder hinzugefügt oder die Felder geändert haben. Sobald Sie diese Änderung vorgenommen haben, müssen sie nur die ADA-Migration tun. Es wird durchlaufen und vergleichen, was neu ist mit dem, was null erhält. Und dann wird es die Veränderungen auf diese Weise dokumentieren. Und dann, wenn Sie das getan haben, können
Sie sagen, Update-Datenbank. Manchmal, wissen Sie, wenn Sie bestimmte Änderungen vornehmen, kann es zu Datenverlust führen. So könnten Sie diesen Datentyp ändern oder ein Feld entfernen. Es wird dich warnen. Bisher habe ich nichts getan, was zu Datenverlust führen würde. Aber lassen Sie uns einen Blick auf das werfen, was eine automatisch generierte ist. Also hier ist die aktuelle Management-Datenbank Flur letzte Mal angehoben. Wenn ich mich einfach erfrischen und dann wieder einen Blick darauf werfen, dann werden wir unsere neuen Tische, Buchungen, Farben,
Kunden, Modelle, Fahrzeuge, all diese Dinge sehen . Und so ziemlich, wenn wir ein Diagramm davon generieren, würde
es aussehen, wenn nicht nur so, wie es dann sehr ähnlich zu dem, was ich am Anfang dieser Lektion angezeigt habe. So haben wir jetzt neben allem anderen auch unsere eigenen Tabellen erstellt. Als nächstes wollen wir uns ansehen, wie wir Daten in die Datenbank einbringen. Seeding bedeutet, dass wir einige Beispieldaten in einige dieser Tabellen einfügen. Und dann kommen wir zurück, schauen
wir uns das an.
14. Konfiguriere die Data: Willkommen zurück Jungs. In dieser Lektion werden wir uns mit der Abgabe von Daten beschäftigen, und ich werde Daten aussaten, hat den wesentlichen Zweck, uns einige Beispieldaten zu geben, mit denen wir beginnen können. Sie wissen, wie wir wollen sicherstellen, dass ich Benutzer immer im B2B ist, wenn die Anwendung beginnt oder wir wollten sicherstellen, dass es
ein paar grundlegende Gebots-Selbstinformationen in Tabellen gibt . Wann immer die Anwendung beginnt. Wenn ich spreche Blase, wenn die Anwendung beginnt, meine
ich, wenn wir diese andere Website installieren müssen, beenden
wir die Anwendung auf unserem Computer, aber ich müsste es auf einem anderen Server bereitstellen. Wenn wir die Anwendung zum ersten Mal ausführen und laden, würde
der Sitzplatz die Datenbank mit den Basisdaten füllen. Also wollten sie nur einen Blick darauf werfen, wie das funktioniert. So ruhig und Dinge, die sitzen. Vielleicht Standardregeln. Also vielleicht habe ich die Administratorrolle im Vergleich
zur Benutzerrolle bei all dem gelebt , was möglicherweise vordefiniert
werden könnte, wäre vielleicht Standardmachungen für Modelle in unserer Situation und Farben. Dinge, die Sie wahrscheinlich nicht unbedingt wollen, dass sich die Menschen selbst verwalten müssen, oder zumindest wollte er noch einmal einige grundlegende Daten geben. Um also einige Daten in unsere Datenbank zu speichern, müsste
man eine Überschreibung für unsere Standardfunktion beim Erstellen von Modellen erstellen. Also, sobald wir den Anwendungs-DB-Kontext haben und er von jeder Form von DB-Kontext erbt. Es wird eine Funktion haben, die geschützt ist und wir können sie überschreiben. Und um Leere genannt zu werden und in die Sinne zu sehen, sagen mir, welche Funktion es ist, versuche ich zu bauen, also auf das Erstellen von Modellen und es wird all das für Sie tun, kein Problem. Was auch immer es erzeugt, Sie können das in Ruhe lassen. Aber dann unter diesem Nullpunkt können
wir anfangen zu sehen, was wir wollen. Also kann ich etwas sagen, dass Builder Dot Daten hat. Ordnung? Builder-Punkt hat Daten. Tut mir leid, ich springe hier die Waffe. Apologie-Entität genau dort vor Entität, unsere Klammern und dann sehen wir die Entitäten. Also in diesem Fall, sagen wir, wir wollten und die Standardfarben, lassen Sie uns mit Farben beginnen. Die Entität wäre also Farbe. Ordnung? Und dann öffne und schließe die Klammer. Und dann sagen wir, Punkt hat die, da gehen wir. Ich springe die Waffe ein bisschen. Dann öffnen und schließen wir. Nun, ich werde nur unsere Klammern öffnen und schließen,
innerhalb dieser Klammern und anderen, die Zeile, damit wir sie sehr deutlich sehen können. Wir brauchen neue Instanzen dieser Entität, die wir im
Begriff sind , eine neue Farbe zu erstellen und dann füllen wir die Felder aus, richtig? Also erstellt von, ich werde nur System sagen, richtig? Weil das nicht ist, habe ich es benutzt. Dies ist das System, das literarisch Enter erstellt. Es erstellt, ich werde sagen, es Datum, Zeit, Punkt null. Also, wann immer es ist, wird es erstellt. Das ist die Zeit und dann werde ich einfach brechen. Also kommen Sie nicht zu weit vom Bildschirm. Also Komma, das nächste Feld wird Daten oder Daten sein, die auch datetime dot ist. Nein. Danke. Guan wäre Name. Und ich bin gegangen, um zu sehen, sagen wir Block. Das ist eine sehr häufige Autofarbe und aktualisiert von ist gleich dem System. Also habe ich es irgendwie gemacht, wie POSIX knabberte. Sie können es sortieren, wenn Sie möchten oder was der Punkt ist, in dem Sie diese fühlen möchten, und das sollte in Anführungszeichen als Zeichenfolge sein. Da gehen wir. Okay, ich muss die ID nicht eingeben, denn wenn ich die ID nicht bereitstelle, dann wird sie ihr automatisch die ID geben und alles, was zu erhöhen ist, haben wir was gesehen? Wenn ich die ID einfüge, gibt
es den ID-Wert, den ich ihm gegeben habe. Wenn ich also wollte, dass dieser Ib zehn ist, dann könnte ich sagen, ID ist zehn. Das will ich nicht. Ich möchte, dass das System all das macht. Und dann kann ich für jede Farbe, die
ich hinzufügen wollte, die verschiedenen Modelle trennen. Also ließ ich diesen einfach erschaffen. Ich kann Komma sagen und dann ein Modell1 erstellen. Und dann sagen wir, das ist blau. Und dann können wir sie trennen,
weitergehen und weiter und weiter. Und dann gilt diese Methode für alles andere, was tragbar ist, um unseren Samen zu schaffen. Also kann ich all diesen Codeblock nehmen und dann diese Builder-Punkt-Entität wiederholen. Und das sagte, ich wollte sehen, wie sie machen oder ein paar Mix-Entitäten. Meek dot, dot, dot, dot hat Daten und dann sagen Sie einfach neues mic, und dann füllen Sie einfach diese Modelle entsprechend. Nun wie wieder, wenn ich das für jeden Tisch mache, wenn,
wenn es für Joe-Gelehrte tun, um diesen Modusraum zu gehen,
stellen Sie sich vor, das fünf weitere Mal für mehr, potenziell mehr Aufzeichnungen zu tun. Und das gefällt mir nicht. Ich mag nicht, dass meine Akten wie Spaghetti aussehen, um ehrlich zu sein. Also, was wir sind, was ich tun werde, ist in eine andere Funktion zu
behindern, richtig? Oder eine andere Datei ganz. Und ich werde einen Ordner hier in
meinem Serverprojekt erstellen und ich werde es Konfigurationen nennen. Also neue Ordner-Konfigurationen, stellen Sie sicher, dass ich bekomme, dass sich um ihn dreht. Da gehen wir. Und dann
habe ich einen Mutterordner, da Konfigurationen mehrere Dinge haben können. Also werde ich nur Entitäten sagen. Ich liebe es immer, diese Dinge in verschiedene Dateien über Fülle zu teilen. Ich weiß genau, wohin ich gehen soll, um Watt zu finden. Also diese Entitäten null, ich kann eine Konfigurationsdatei pro Tabelle erstellen, für die ich das Sitzen erleichtern möchte. Also lassen Sie uns eine Klasse erstellen und ich werde es
Farbkonfiguration nennen Seed Config Variation, Ordnung, Farb-Seed-Konfiguration. Jetzt, um diese Konfigurationsdatei über den Standard
zu informieren, der mit dem gesamten Builder abgerufen werden muss und so weiter. Was wir nicht tun wollten, ist, dass es von der I-Entitätstyp-Konfiguration erbt. In Ordnung, und das erfordert möglicherweise fehlende Bibliotheken. So Microsoft Entity Framework Core, wir gehen voran und schließen das ein. Und dann gebe ich die Entität an, die ich wissen musste, eine Schüssel, die in diesem Fall Farbe ist, die dann zu Anforderungen ging, die eine andere Bibliothek enthalten, ihr Ziel. Und dann muss ich die Schnittstelle implementieren , die dann diese Konfigurationsdatei bringt, richtig? Konfigurieren. Nun, Methode tut mir leid. So configure wird dann einen Builder basierend auf Farbe injizieren, im Grunde auf dem gleichen Builder hier für den ModelBuilder basiert. Also all diesen Code, den ich hier hatte, kann
ich wissen, dass Tic es schneiden und in dieser Methode einfügen kann. Jetzt brauche ich nicht so viel Code und hier habe ich die Waffe
gesprungen, weil das meine übliche Methode ist. Und wenn sie diese Methode verwenden, weiß
es bereits, dass es sich um Farben handelt. Ich muss nicht sagen, dass Builder-Punkt-Entity
Farbe ist , weil es bereits weiß, dass der Builder auf Farbe basiert. Also kann ich sagen, Builder Dot hat Daten und das ist, wo es war. Mein Kopf war anfangs, als ich hier den ganzen Code erstellt habe. Also, jetzt, da wir diese Konfiguration in dieser Datei eingerichtet haben , die eindeutig nicht abgesehen von der Verpflichtung DB-Kontext ist. Jetzt brauche ich die Anwendungs- und DV-Kontexte
oder zumindest diese Methode, um zu wissen, dass sie diese Konfigurationsmethode hier
aufrufen sollte , richtig? Also in der unerwünschten Erstellung, was die anderen Builder-Punkte sagen, wenden Sie Konfiguration an. Und dann werde ich unsere Farb-Seed-Konfiguration instanziieren, richtig? Und dann natürlich, fügen Sie alle fehlenden Referenzen, und dann war's es. Sie sehen also, dass wir all dieses LAN, all diese Codezeilen in eine Codezeile umgewandelt haben. Und für mich sieht das sauberer aus. Sie wissen, wenn Sie sich den Anwendungs-DB-Kontext ansehen, sollten
Sie in der Lage sein, die Datenzuweisungen nachzuschlagen und
eine gute Idee zu bekommen , wenn Sie die Details möchten, Sie gehen woanders hin. Also gehen wir hier rüber und dann sehen wir die Details dessen, was sitzt. Und so kann dieses Prinzip für jede andere Entität weitergehen, die Sie Daten sehen möchten. Nehmen wir an, wir wollten in Mischung aussaaten. Was sind, komm schon, Kohlenstoff, Mal sehen, Toyota und BMW, richtig? Also fordere ich dich auf, innezuhalten, oder? Wissen Sie, erstellen Sie Ihre eigene Seed-Konfiguration und holen Sie sie ein. Also für mich, so auf Toyota und BMW. Und dann können Sie wahrscheinlich Trend Seed zu Modellen , die mit Toyota und BMW Modelle entsprechen. Okay, ich hoffe, du hast inne gehalten und es selbst versucht. Wenn nicht, können Sie das tun. Nein. Aber was ich tat, war, der gleichen Technik zu folgen. Ich habe eins für das Mikrofon erstellt, ein One-Photonen-Modell erstellt, und dann habe ich die entsprechenden Dateien hier drüben. Also für das Mikrofon. Ich habe zwei Mikrofone in den Foren von BMW und Toyota. Und dann für die Modelle, die ich vier erstellt habe, richtig? Ich habe Prius Breiten geschaffen,
die, wenn Sie Autos kennen, das sind Toyota. Und dann die drei Serien auf einem X5, der zum BMW gehören würde. Ordnung. So können Sie voran gehen und Sie erstellen Sie sehen die Entzündung und Sie erstellen nur diese Konfigurationsdateien. Ich meine, wenn du die Konfigurationsdateien nicht magst, ist das in Ordnung. Sie können immer einfach alles in das Modell legen, was wir bereits besprochen haben. Warum? Ich persönlich mag es nicht. Deshalb zeige ich Ihnen diese Methode. Jede WHO, sobald wir diese Konfigurationen gemacht haben, müssen
wir, wenn Sie meinen Satz abgeschlossen haben, indem Sie ADA-Migration sagen, dann sind Sie unter Lastwagen. Also müssen wir sagen, fügen Sie Migration. Und dann kann ich sagen, die Standardeinstellung zu sehen. Und sagen wir Autodaten. Natürlich, du willst es erzählen,
es ist eine Geschichte im Namen, oder? So können wir fortfahren und diese Migration hinzufügen und uns
einen kurzen Blick darauf werfen, was diese Migrationsdatei ausspuckt. Und whoa, in Ordnung, ich bekomme einen bösen Fehler. Es ist gut für uns, diese Fehler zu sehen, weil wir mit unserer Migration von Zeit zu Zeit auf
sie stoßen . Also ist es gut zu verstehen, was vielleicht passiert ist. Es sagt also, dass die Seed-Entity für die Farbe des Entitätstyps nicht hinzugefügt werden kann, da Werte
ungleich Null, die für die Property ID erforderlich sind, einen negativen Wert für,
okay, aber dann betrachten Sie meine Seed-Konfigurationen, die keine ID haben. Aber dann frage ich mich jetzt, ob dieses Komma
am Ende dieses System ist, das denkt, dass ich eine ID einfügen wollte. Also lass mich einfach o.com nehmen. Ich weiß nicht, ob Sie dieses Problem haben. Wenn du das tust, dann könntest du das auch versuchen. Wenn du es nicht tust, dann hast du es beim ersten Mal richtig gemacht,
jemand, der es erneut versucht. Und es gibt auch einen Fehlerbehebungsprozess. Nun, das hat nicht geholfen. Also, was ich dann tun werde, ist versuchen, explizit mit der ID zu sein. Okay, also einer der Vorteile, explizit mit der ID in beiden Fällen zu
sein, wäre , dass, wenn wir Datensätze erstellen würden, dass C Abhängigkeiten hatte. Also werde ich zum Beispiel in Standardfahrzeugen säen
und dann hinzufügen, um die Farbe zu setzen, tut mir leid, die Anrufer-ID und die Sanftmütige ID und so weiter. Dann, indem sie explizit mit dem MC und den ganzen IDs sind alle IDs in diesen Entitäten. Dann kann ich explizit sagen, dass das Fahrzeug diese Anrufer-ID haben sollte, diese Meek-ID, weil ich weiß, dass diese IDs standardmäßig vorhanden sein sollten. Also lassen Sie uns diese IDs eintragen. Und die Chancen sind, dass Sie wahrscheinlich in die gleiche Ära wie ich und das ist kein Problem. Wir können genau sehen, was der Fehler in der Warteschleife ist. Solide. Setzen Sie also diese ID-Werte in Farbe, Marke und Modell. Versuchen wir es nochmal und diesen Stil. Und da gehen wir. So kommen wir zu unserer Migration. Also nein, wir sehen, in Ordnung, also ja, ich habe dich ein bisschen irregeführt. Wir müssen diesen ID-Wert von Anfang an einfügen. Ordnung? Also würde unsere Migrationsdatei sagen, fügen Sie die Farben ein und dann sind es Rätsel der Spalten. Und dann gibt es uns die Werte, die in jede Spalte gehen. Also ID, ID-System, neue Datetime für die erstellte. Das gleiche für Datum aktualisiert und so weiter. Also tut es das für alle Tabellen, für die wir Seeding angegeben hatten, sehen Sie diese Daten, richtig? Und dann kehrt die Morgendämmerung das natürlich um. Also, wenn wir aktualisieren Datenbank und dann ausführen, dass. Und dann in der Zwischenzeit, was ich tun wollte, gehen Sie einfach zum Server Object Explorer und aktualisieren. Und wir können einfach einen Blick auf die Daten werfen, die jetzt in unserer Farbtabelle sind. Also, wenn ich mit der rechten Maustaste klicken und sagen Daten anzeigen, dann sehen wir unsere Datenmenge ACR IDs, obwohl es automatisch generiert wird, wenn
wir auf dem System von den Benutzern verwendet wird. Wir säen, wir müssen diese ID-Werte zur Verfügung stellen, was Sinn macht, richtig? Das ist alles, was wir für Farben tun. Also, wenn Sie wollen, können Sie versuchen, einige Daten für ein Fahrzeug, für einige Standardfahrzeuge, weil wir bereits einige Modelle machen. Und sagen wir, wir starten die Flotte mit zwei Fahrzeugen. Ich bin mir nicht sicher, ob ich unbedingt Fahrzeuge in das System einbringen möchte. Ich werde wahrscheinlich wollen, dass der Benutzer oder wer auch immer diese Verpflichtung täglich nutzen
wird, dies tatsächlich zu tun. Aber eine andere Sache, die ich definitiv in unsere Datenbank aufnehmen möchte, wäre Rollen, weil wir verschiedene Rollen im System haben
werden, werden admin user_roles haben, richtig? Also lasst uns einfach die Zeilen machen und dann können wir es einen Tag für diese Operation nennen. Also, Sie kennen den Bohrer, den ich noch einmal
herausfordere, machen Sie es selbst und wir können Notizen vergleichen. Also, wenn du Boss Don bist, bist du bei Teeny-winzigen stecken geblieben, das ist kein Problem. Und ich bin hier, um dir dabei zu helfen. Ordnung, also die Sache mit der Regel ist, dass ich Roll gesagt habe, aber der erforderliche Datentyp ist nicht Regel, nur wie, oh, Sie haben Identitätsbenutzer für die Benutzer, Sie haben Identitätsrolle für die Zeilen. Unsere Rollenkonfigurationsdatei würde also
Identitätsregel als Kontext oder als Entität haben , richtig? Und dann, wenn wir alles bauen, haben wir neue Identitätsregel und wir haben Namen und normalisierte Namen. Also dieses, das wir nicht, wir brauchen definitiv keine ID zu setzen, weil die ID für unsere ASP-Netztabellen GUID wäre, oder? Was bedeutet, es ist, es ist schwer für uns, die ID dort einzugeben, die wir könnten, aber wir müssen diesen Punkt nicht hinzufügen, es sei denn, wir würden die Benutzer sehen, die schweben,
waren, wir mussten die ID explizit angeben. wir mussten die ID explizit angeben.
sagen, etwas wie ID ist gleich dem Punkt neuen guten Punkt toString. Es würde also eine explizite GUID generieren und das dann setzen, aber dann ist das immer noch irgendwie zufällig, weil wir wirklich immer noch nicht sicher sind, welchen Wert dies bieten würde. Also kannst du eigentlich weitermachen und das Gutes woanders kriegen. Sie können das online finden und eine GUID generieren. Und du steckst einfach diese gute Valerie oder das Selbst ein. Dann wissen Sie, dass dies ein guter Wert für die Benutzerrolle ist. Und dann könnten wir sagen, dass dies etwas ändern könnte, das würde sich auflösen, um jede große Änderung zu sein, die Strophe vier zu 56, und es wäre nichts zu schickes. C, C T, T, T, T bis F, F, richtig? Und dann ist das unser guter. Also, dann haben wir von morgen, wir kennen die Ausweise. Wenn wir also später nutzen würden, können wir das tun. Also zeige ich Ihnen nur, dass es
so viele Dynamiken gibt , die viel weniger früh gemacht Araber es auf eine Weise tun, dann kann er es auf andere Weise versuchen und wir können unsere eigenen entsprechend arbeiten. Jetzt habe ich diese Rollen hinzugefügt. Ich muss die Rollenkonfiguration hier hinzufügen. Richtig? Wenn wir also noch einmal eine Migration hinzufügen
und dann
C C ist, und dann
C C ist sind die Rollen Standardregeln. Wenn wir dann nur einen Blick darauf werfen, werden
wir hier sehen, dass es uns die Rollen hinzufügt. Das wird alles tun. Und dann sieht es immer noch die Konfigurationen hier, aber es macht keine Updates. Es gibt nichts, was zu hart aktualisiert werden kann, oder? So können wir fortfahren und unsere Datenbank aktualisieren. Und wenn ich dann zu meiner Datenbank gehe und die Regeln ansehe, sehe
ich sie nicht mit den sehr angegebenen ID-Werten und den Daten entsprechend. Das ist also nur eine kurze Einführung denn das ganze Wochenende legt einige Standardwerte in unserem System fest. Denn wenn unsere Anwendung installiert ist, hätten
die Benutzer etwas zu verwenden. So etwas wie Regeln müssen definitiv an Ort und Stelle sein. Denn wenn Benutzer sich registrieren werden erstellt, müssen
wir sie zuweisen sind alle,
alle hart die Box, richtig? Es wird also gut sein, wenn Sie in Ihrer eigenen Zeit voran gehen und im Standard-Administrator, Benutzer, richtig? Jeder, der wir sind, sagt, wir müssen uns als unsere regelmäßige Nutzung von später registrieren. Das sehen wir uns aber an. Aber gerade jetzt möchten Sie sich darauf konzentrieren, zumindest in einem Standard-Administrator-Benutzer zu bekommen, so dass Sie den Benutzer ein erstellen. Aber wenn Sie dieses abgeben, müssen
Sie den Benutzer Andy sehen, um die user_roles zu Seed. In Ordnung, damit Sie das als Herausforderung tun können.
15. Standard-Benutzer- und Benutzerrolle – Vergleichbare Hinweise: Na gut, Jungs, willkommene Käfer. Da ich sicher bin, dass Sie aus dem Titel dieser Lektion abgeleitet haben, ist
es wirklich nur, um Notizen zu vergleichen, weil ich Ihnen
eine Mini-Codierungszuweisung hinterlassen habe und ich hoffe, Sie haben es versucht. Wenn nicht, dann die Schulgeschichte zusammen oder so. Die Zuweisung bestand also darin, sicherzustellen, dass Sie sowohl den Benutzer als auch die Benutzerrolle sehen. Denn was wir wollen, ist dieser Standardbenutzer mit der Admin-Rolle in unserem System. Also habe ich eine Konfiguration für den Benutzer und die Konfiguration für die Benutzerrolle erstellt. Also haben wir bereits die Rolle zusammen sind die Rollen, in denen wir hatten oder Identitätsrolle haben wir unsere eigenen guten Werte erstellt werden die IDs explizit gesetzt. Die Sache ist, dass Sie natürlich, wenn Sie Abhängigkeiten haben, immer noch Daten in der Reihenfolge der Abhängigkeiten einfügen möchten. Also die gleiche Regel, die angewendet wird oder die ich beim Erstellen der Tabellen ermutigt hätte. Es gilt beim Seeding von Daten Cozy Car B, Seeding, ein Benutzer, der mit unserer Rolle verbunden ist, wenn Sie nicht über die Regeln, sind die Benutzer, okay? Also haben wir die Rolle. Wir haben den Benutzer erstellt. Also habe ich die Benutzer-Seed-Konfiguration, in der ich einen Benutzer eingerichtet habe. Und ich meine, Ihr Benutzer könnte anders sein, als wenn Sie Schwierigkeiten mit diesem Zeug hatten, dann kein Problem. Deswegen sind wir hier. Was passiert ist, dass ich einen härteren verwenden musste. Wir haben also keine Bibliothek angeboten, die uns von den Identitäts-Kernbibliotheken, die das Passwort härter genannt werden, und wir kontextualisieren es dem Anwendungsbenutzer. Und dann mit diesem HobShare Wochenende, erstellen Sie die gehashten Passwörter. Also initialisiere ich das nur. Dann haben wir gesagt, Builder hat die, es wird eine neue Anwendung Benutzer mit der expliziten ID erstellen, die nur eine weitere gute ist, die E-Mail-Adresse, die normalisierte E-Mail. So werden E-Mail und normalisierte E-Mails gleich sein, außer normalisiert bedeutet, dass alles Großbuchstaben ist, oder? Wir geben ihm FirstName, Nachname, Benutzername, normalisieren Benutzername, gleiche Prinzip wie die E-Mail und Sie normalisieren E-Mail und dann ein Passwort-Hash muss eine Hash-Version von welchem Passwort sein. Dies ist also ein Standard-Boss oder den wir verwenden. Sicher. Aber wir können diesen Text nicht in der Datenbank speichern, aber wir können ihn in Quellcode sortieren weil unsere Kunden den Quellcode wahrscheinlich nie sehen werden. Aber dann auf Datenbankebene sollten wir nie,
niemand sollte jemals in der Lage sein, in unsere Datenbank zu gehen und diesen Prozessor zu sehen. Also in ein anderes Wort, sorry, Identitätskern mit immer Hash das Passwort. Und wenn wir sitzen, müssen wir
das ein Hash-Passwort angeben. Ordnung? Also stellen wir dieses Buzzword zur Verfügung und das ist der Benutzer. Und dann in der Benutzerrollenkonfiguration, dieselben Kopffüßer, die wir gerade durchgemacht haben, außer wir verwenden Identitätsbenutzer-Rolle und das muss zu String kontextualisiert werden. In Ordnung? Und dann, was wir hier einfügen werden, brauchen
wir die ID hier nicht, aber das wird wirklich,
ich glaube nicht, dass das Ding stabil ist,
verwendet eine ID, aber wir brauchen die Rollen-ID. Also ging ich über zu den Rollen-Seed-Konfigurationen und stelle sicher, dass ich die Charakter-ID bekam, die ich oben hatte. Lassen Sie mich diesen Mut auf der rechten Seite treffen, und alle Verwalter, okay. Id, die wir brauchen, ist die Verabreichung, die eine. Da gehen wir, und dann ist die Benutzer-ID falsch, alle möglichen. Ich zeige es Ihnen nur, stellen Sie sicher, dass Sie die richtig bekommen. Also ist die Benutzerkennung, die verwendet werden soll, dieses Recht? Also, nachdem wir diese Korrekturen gemacht haben, meine ich, diese Axone Cuz ich bin sicher, dass Sie bereits Truck unterschreiben. Dann können wir voran gehen und Seed unsere Benutzer-Standardwerte, richtig, so Updates, Datenbank. Und tut mir leid, wir müssen Migrationsapologen hinzufügen. Also fügen Sie eine Dash-Migration hinzu, richtig? Und dann sagen wir hinzugefügte Standardbenutzer. Ich lade diese Migration, um sie auszuführen. Und das ist das zweite Mal, dass wir diesen gelben Streifen gesehen haben. Wenn Sie es das erste Mal lesen, habe ich nicht darauf hingewiesen, dass es alt ist, aber es sagt im Grunde, dass es
einige verschlungen gibt und das zum Verlust von Daten führen könnte. Also habe ich früher darauf hingewiesen, als wir entdeckt haben, wie Migrationen funktionieren, dass manchmal Änderungen auftreten, die sich auf die vorhandenen Daten auswirken könnten. Also wirst du es schaffen, es ist eine Warnung zu sagen, hey, du weißt schon, sei vorsichtig, weil du Daten löschen könntest. Geben Sie einfach eine kurze Bewertung, nur um sicherzustellen, dass salzig wirklich will. Das ist alles, was es sieht. Und diese Migrationsdateien, wie wir sehen, können
wir sie immer ändern, wenn wir wollen, oder? Also hier sehen wir Einfügungen in diese Tabellen, diese Werte, kein Problem. Und dann wissen wir, dass der nächste Punkt der Aktion unser Update ist, das uns dann einige Standard-Benutzer geben sollte. So haben wir bereits registriert ich Benutzer. Und so, wenn ich in ASP-Netzanwendungen schaue, sollte
ich jetzt zwei Benutzer sehen. Die, die wir registriert haben, oder? Denken Sie daran, Test auf blazer.com, Das war der Benutzer, den wir zunächst eingerichtet. Und hier ist diejenige, die wir nur in die Datenbank aufnehmen, die unser Admin-Benutzer ist. Ordnung? So sehen Sie, dass das funktioniert und dann haben wir keinen Vornamen und Nachnamen angegeben, als wir den Benutzer registriert
haben, weil gut , wir brauchen es, wir müssen die Registrierung dafür ändern. Aber dann haben wir die Admin-Benutzerfelder hier, die Vorname, Nachname, nach dem, was wir sehen, dass die natürlich sie ohnehin optional waren. Und wenn ich dann zu Rollen gehe, wissen
wir, dass wir Nullen sind. Nun, lassen Sie mich nur auf die Benutzerrollentabelle konzentrieren, wo es uns zeigt, welche Verwendungen mit welcher Rolle verbunden sind. Also, wie ich sagte, es hat sowieso keine ID-Spalte, richtig? Also wollten wir nur wissen, dass diese Benutzer-ID, die unser Admin-Benutzer ist, es E für, für sie, E für, für ihre niedrige entspricht dieser Regel. Das ist im Grunde alles, was es gibt, um Standardregeln, Standardbenutzer in unsere Anwendung zu setzen.
16. Überprüfen und Hinzufügen von Änderungen in GitHub: Okay, Leute, also sind wir hier, und wir sind an einem anderen Kontrollpunkt, und wir wollen einfach alles
überprüfen, was wir für diesen Abschnitt getan haben. Erstens begannen wir uns mit unseren Identitätsserver-Identitätszertifikaten zu befassen. Wir haben überprüft, was sich in
der Startdatei befindet , die es uns ermöglicht, tatsächlich eine Verbindung mit der Datenbank herzustellen, sowie eine Verbindung zu unserem Identitätsserver und all diesen Funktionen herzustellen. Dann gingen wir in die Einrichtung unserer eigenen Datenbank Gerüstnotizen,
die Identitätsserver-Tabellen, so dass wir Benutzer unter Rollen speichern können und
all die unterstützenden Bits von Daten, die dazu kamen,
unsere eigenen Domänenmodelle zu erstellen und sie hinzuzufügen in die gleiche Datenbank. Und dann gingen wir voran und schauten uns das ganze Wochenende Seed an, unsere erstellt einige Standarddatensätze in unserem System zur Laufzeit. Also, nachdem ich all das getan
habe, bin ich sicher, dass Sie überhaupt absorbiert haben und er kann es
immer nicht überprüfen und versuchen, es zu bekommen, konkretisieren, wie alles funktioniert, was an diesem Punkt ist, wir wollen nur unsere Änderungen überprüfen in unser Repository, um sicherzustellen, dass wir einen schönen schnellen Überblick über die gesamte geleistete Arbeit behalten. Also, was wir hier tun, ist zu gehen, um Änderungen zu bekommen, und dann geben wir ihm eine nette kleine Commit-Nachricht. Und diese Botschaft
sollte natürlich klar genug sein,
um sich selbst in der Zukunft oder in Ihrem zukünftigen Selbst, sowie alle anderen, die kommen und ihnen sagen könnten, wissen
Sie, was genau getan wurde. So können Sie immer einfach durchblättern und sehen alles, was mit Gerüst aus unseren Identitätsseiten
passiert ist. Wir haben einen Blick auf die Seeding-Konfigurationen, all diese Migrationen. Also die coole Sache ist, dass, wenn jemand anderes nach Ihnen kommt und bekommt, was Sie im Begriff sind, in diesem Zitat, alten Software-Repository,
alles, was sie tun müssen, ist zu ändern, vielleicht sind sie bis settings.js Sohn zu jeder Datenbank Server- und Datenbanknamen, die sie haben möchten. Und dann sind sie ein Update braucht eine Basis. Und dann wird es automatisch durch alle Migrationen geht und alles in der gleichen Reihenfolge anwenden, dass es Notizen liniert ist. Ordnung, wenn Sie also diesen Computer verlieren, an dem Sie arbeiten, an null, aber Sie haben eine Kopie Ihres Projekts auf GitHub, dann haben
Sie an diesem Punkt zumindest an diesem Punkt keine Daten verloren, weil alle Daten
nur Standard sind Daten, die in diesen Migrationsdateien erfasst wurden. Also müssen Sie nur dieses Projekt aus diesem
Snapshot holen , wo sowohl das Huhn als auch dann meine Datenbank laufen. Sie werden fortfahren und die Datenbank erstellen, indem Sie alle Tabellen und die Struktur und die Big Data für Sie setzen. Und dann bist du am Platz eins, aber du hast Platz eins. Also jetzt lassen Sie uns einfach voran gehen und sagen, alles zu begehen und sinken. Also, das elende Komitee lokal und es wird es mit guten Job Stacy lokal verpflichtet
synchronisieren. Und dann wird es schieben und dann erfolgreich mit unserem GitHub-Repository synchronisiert. Also, wenn wir zurückkommen, werden
wir weiter lernen, mehr Mühe zu dieser ganzen Blazer-Anwendung funktioniert mit Entity Framework auf allen beweglichen Teilen.
17. Schnittansicht – REST API und Database: Hey, Leute, willkommen zurück. In diesem Abschnitt des Kurses
werden wir einen Blick darauf werfen, wie Rest APIs mit Blazer interagieren. Nein, ich hatte schon vorher auf diese Interaktion angedeutet und ich werde nur einen kurzen Überblick in diesem Überblick
geben, wo wir einen Blick darauf werfen werden,
die Tatsache, dass das Server-Projekt wirklich ein API-Projekt ist. Und was wir erstellen Ruby API-Controller, wie wir hier mit dem Beispiel Wettervorhersagen Controller sehen, wo wir einen API-Controller haben und was es wirklich unsere Endpunkte verfügbar macht. Wenn Sie also mit Rest-APIs nicht allzu vertraut sind, können
Sie sich meine Obwohl Kurse zur Rest-API-Entwicklung mit.NET Core Five oder meinen End-to-End-Blazer- und Web-API-Entwicklungskurs ansehen, in dem tatsächlich gelehrt wurde, über den Aufbau der API als separate Entität und Build-Clients, um eine Verbindung zu ihm herzustellen. Und diese Kunden werden Blazer-Clients sein. In diesem speziellen Kurs werde
ich mich jedoch nicht zu sehr auf Rest,
API und alle Praktiken konzentrieren , die gehen. Und ich möchte Ihnen nur wirklich versichern, dass, wenn Sie diese Projektvorlagen
haben und Sie eine Blazer-Anwendung wollen, Sie mit unserer Client-Anwendung enden werden, die wir gesehen haben Server-Anwendung und wie wir die API-Funktionalität, um diesen Client zu bedienen. Also alles hier ist intern für eine große Anwendung. Es sagt, dass es einige bewegliche Teile macht und ich möchte nur, dass wir
eine volle Wertschätzung all der verschiedenen Berührungspunkte haben und wie sie zusammenkommen. Wenn wir zurückkommen, werden wir unsere Diskussion über unsere API-Controller fortsetzen unsere eigenen
erstellen und sehen genau, wie wir es testen können, um sicherzustellen, dass es funktioniert. Und dann werden wir von dort vorwärts gehen.
18. Erstellen und Testversion von REST: Unsere Leute, wir sind zurück und in dieser Lektion werden wir uns mit der Erstellung unserer restlichen API-Endpunkte
auseinandersetzen. In Ordnung, also haben wir bereits festgestellt, dass oder Endpunkte durch das, was wir es als API-Controller nennen, verfügbar gemacht werden. Und noch einmal verwende ich nur den Wettervorhersagen Controller als gewachsen 0, weil das ist, was wir gegeben werden. Und wir sehen hier, Wenn Sie sie VC verwendet werden, es ist wirklich nur ein anderer Controller hat nur diese Annotation, um anzugeben, dass es ein API-Controller ist. Es erbt von der Controllerbasis, aber alles andere ist ziemlich gleich. Auch über die Axone behandeln
wir die Auktionen noch wie Endpunkte, und wir haben, was wir die restlichen Verben nennen. RS-Verben werden also „get“, post“, „put“ und „delete“ sein. Und so oder so, das sind in der Regel die krähten Operationen, die wir gewohnt sind, oder? Get würde gelesen werden, Post wäre erstellen, setzen wäre Update, und Löschen ist löschen, richtig? Das sind also die Verben, die uns helfen, unsere krähten Operationen zu erleichtern. Jetzt in der, in Bezug auf das Testen unserer Endpunkte, wenn wir unsere Anwendung hier ausführen. Wir wissen, dass wir unsere Webschnittstelle bekommen, richtig. Das ist es, was uns präsentiert wird, und das ist in Ordnung. Aber dann haben wir alle, wir haben bereits festgestellt, dass sowohl
der Client als auch die Server-Anwendungen laufen von der gleichen Adresse hier, die localhost Doppelpunkt 443 ist. Wenn ich Sie in meinem Fall haben, hätten
Sie wahrscheinlich eine andere Portnummer. Aber der Punkt ist, dass sowohl der Client als auch die Serveranwendung die gleiche Adresse verwenden,
was dann bedeutet, dass ich mein API-Test-Tool namens
Postman verwenden kann und die gleiche Adresse in einer Get-Anfrage erfreut hat. Und dann wollte ich testen, ob ich die Wetterprognose bekommen kann, richtig. Es sagt also, bekommen. Also, nachdem stellen Sie sicher, dass meine Anfrage ist, ich bekomme. Und dann wäre der Weg, um es zu erreichen, durch den Root-Controller. Und Controller bedeutet entweder den Namen des Controllers, was in diesem Fall ist, ob für Crop Prognosen, sorry. Also dann kann ich HTTPS Doppelpunkt localhost Doppelpunkt, Doppelpunkt Schrägstrich, Schrägstrich, sorry, localhost Doppelpunkt, die Portnummer und dann den Namen des Controllers sehen, was Wettervorhersagen ist. Dann, wenn ich diese Anfrage schicke, nun, in diesem Fall bekomme ich wieder einen Status für 01 auf autorisiert warum bekomme ich das Geld? Es liegt daran, dass wir diese autorisierten Anmerkungen haben, so dass Sie ein angemeldeter Benutzer und alles sein müssen. Und wir haben den ganzen Identitätsfluss und alles durchgemacht. Wenn Sie also kein angemeldeter Benutzertrend sind, um auf diesen Endpunkt zuzugreifen, werden Sie abgelehnt. Also, wenn ich das einfach auskommentiere, nicht autorisieren und es erneut versuchen, dann bekomme ich eine andere Antwort, wo ich ein 200 OK bekomme und ich die Daten aus der Datenbank zurückbekomme. In Ordnung, also das ist ganz und API funktioniert. Ich mache mich mit diesem JSON befassen, und das ist der JSON, der wird, na ja, das kommt nicht zuerst aus der Datenbank und das ist alles jemand, der in die,
in die Aktion oder den Endpunkt eingebacken wurde . Aber lassen Sie uns einfach das Betriebssystem darstellen,
das eine Abfrage ausführt, die Daten abruft und sie dann an wen zurücksendet, der die Daten anfordert, was in diesem Fall durch Postman oder unsere Blazer clientseitige Anwendung verloren gehen könnte, weshalb im Client -Projekt. Jetzt sehen Sie in mit den Abrufdaten der Seite, sie werden gehen und holen Daten. Es hat die gleiche Operation gemacht. Es ging und es sagte, ich will Daten von diesem Endpunkt. Also möchte ich nicht, dass du dir diesen Code gerade noch ansiehst. Ich zeige Ihnen nicht, dass diese Rede dafür ist, welche Daten tun. Sie konnten vorher nicht darauf zugreifen, weil es den Autor hat, den ich beginne. Und zu der Zeit haben wir nicht das gesamte Benutzeranmeldesystem eingerichtet und so weiter richtig. Jetzt können Sie es also tatsächlich testen, aber dies prognostiziert die clientseitige Anwendung. Während dieser Autor als Geruch, prognostiziert den Endpunkt von unbefugtem Zugriff, aber dann durch die Integrierte Authentifizierung in unserer Anwendung bisher, dann sind wir tatsächlich in der Lage, nur auf der Client-Seite zu authentifizieren. Und dann dieser Autor, den ich beginne, werden
wir sehen, dass es unser ist, es ist eine authentifizierte Anfrage, die durch den Client zu diesem Endpunkt kommt, also wird es erlauben, es zu unterbrechen. Also gebe ich Ihnen nur einen Überblick darüber, was in der Probe erhalten wird. Nirgendwo, um unsere eigenen zu erschaffen. Also lassen Sie uns S1 und eine einfache erstellen. Beginnen wir mit einem unserer einfacheren Tische wie mir. In Ordnung, also wollen wir die Endpunkte für, damit der Client mit unserer Datenbanktabelle für mich interagieren kann. Und der Client wird das über die API tun. Daher muss die API in der Lage sein, mit unserer Datenbank zu kommunizieren. Nun ist das Gute an Dante Corps, dass sie uns Gerüst
geben, damit ich einfach mit der rechten Maustaste gehen kann, gehen Sie zu neuen Gegenstand. Und dann kann ich das wählen. Ich möchte einen API-Controller. Ich werde drei wählen, oder? Also wollte ich zu Controllern
gehen, zu Hinzufügen gehen und dann Controller sagen. Und dann werde ich dieses Dialogfeld fragen, welche Art von Controller ich möchte? Nun, zuerst möchte ich einen API-Controller und dann möchte ich einen mit Aktionen mit Entity Framework. Nein. Ich ging, um es in zwei verschiedenen Arbeiten zu bauen. Führen Sie durch den Code und erklären Sie dann irgendwie warum Leute andere Muster
auf dem Entity Framework implementieren würden , so dass Minton Fähigkeiten auf lange Sicht einfacher. Aber aufstehen grundlegende Anwendung, die lesen, schreiben und mit der Datenbank und dem Client interagieren kann. Das ist alles, was du wirklich brauchst. So API-Controller-Aktionen mit Entity Framework, wir klicken, wir geben es Doyle, die die Modellklasse angeben müssen. Also bedeutet die Modellklasse hier, welche Klasse es nicht wirklich noch heilbar ist, die Wolken sind, welche Domäne nicht ist. Natürlich haben wir die Verantwortung dafür zu sorgen, dass wir das richtige wählen. Also will ich einen für Sanftmütige, oder? Die Datenkontext-Klasse wäre Anwendung im DB-Kontext, und dann degeneriert alles den Mix-Controller-Namen. Sie können das ändern, aber ich denke, es ist klar genug, was dieser Controller gezwungen sein wird, ihn zu verlassen. Und dann ging ich weiter und klicke auf Hinzufügen. Und dann nach ein paar Sekunden und etwas Buck gewachsen Ward, Wir werden jetzt unseren Controller haben. Sie werden also hier sehen, dass es den Root-API-Schrägstrich Controller hat. Wenn Sie das mit der Wettervorhersage vergleichen, diese eine Dosierung-Controller. Der Unterschied ist also, dass wir tatsächlich die Route angeben können. Also ich möchte nicht, dass es API-Schrägstrich sagt, ich wollte nur Kontrolle sagen. Mit anderen Worten, um zu diesem Controller zu gelangen, zu diesen Wurzeln, müssen wir nur Marken sehen, in Ordnung. Es gibt uns Annotation API Controller. Wenn wir es geschützt machen wollen, können
wir die Autorisierungsannotation oben hinzufügen, was wir noch nicht tun werden, also werde ich es einfach dort platzieren, damit Sie sich daran erinnern, es später zu tun. Und dann sagt der Rest wirklich nur, dass, okay,
wir haben eine Klasse mit diesem Namen, die von der Kontrolle übergewichtig erbt, wir haben einen privaten schreibgeschützten Anwendungs-DB-Kontext, und unser Objekt befindet sich auf den Partiturkontexten. Und dann, was hier passiert, ist die sogenannte Dependency Injection, wo wir den Anwendungs-DB-Kontext injizieren , der die gesamte Anwendung auf der gesamten API bereitstellt, wo sie in dieses spezielle Steuerelement injiziert und eine lokale Kopie. Und das ist es, was hier passiert. Also machen wir unseren privaten Bereich. Wir lassen den Konstruktor noch, dass es erwarten sollte, wissen Sie, das Objekt der Anwendung DB-Kontext
, der unsere Verbindungen zur Datenbank darstellt. Und dann wollen wir eine lokale Kopie machen. Also gleichen wir oder lokales Feld den Objekten, die in gesendet werden, und dann setzen wir unsere Operationen mit unserem lokalen Feld fort. Dann würden Sie feststellen, dass wir auch alle diese Verben für uns generiert haben. Wir haben das HTTP Get Verb, Web, HTTP Get mit der ID-Spezifikation und dann können sie ich Beispiele geben. Also NSA Schrägstrich Mix. Also sagt es API-Schrägstrich Mix, weil es standardmäßig ein API-Schrägstrich Controller ist. Wir haben den API-Schrägstrich Kyrillisch entfernt und sicherlich sollten wir nur mischen, oder? Das sind Kommentare, die Sie nicht unverändert durchmachen müssen, und ich
erkläre nur , warum wir es ausziehen werden, richtig? Wenn Sie also auf Mix klicken, wird
es standardmäßig die get drücken. Und dann wird es diese Methode aufrufen. Also der Endpunkt hier, diese Methode ist wirklich nur eine Methode, die jede Aktion hat, die ausgeführt werden muss. Der Funktionsname oder ein Methodenname ist jedoch nicht das, was wir in den Pfad einfügen. Alles, was wir tun müssen, ist dies zu nennen, denn dann wird es schließen, dass, wenn Sie diese Art von Qualität erfüllen, Sie eine Get-Anfrage stellen. Und so werde ich diese Methode automatisch aufrufen. Ordnung, dann würden Sie bemerken, dass dieser den gleichen Methodennamen erhalten
würde, außer dass er
einen Parameter vom Typ ID benötigt und sich in die ID zerstreuen wird, die Sie hoffen, zu erhalten. Und es führt all diese Operation aus. Das Gleiche mit dem Namen der Put Methode. Es erwartet, dass ID und erwartet Daten auf Karte 22. Was soll ich eine Firma mit dieser ID sehen? Und ich werde noch nicht zu viel vom Code durchmachen, weil wir damit einen großen Refactor machen werden. Aber ich möchte nur darauf hinweisen, dass all das aus der Box funktionieren wird. Also, was wir tun werden, ist das zu laufen und zu testen. Ordnung, also sind wir wieder in Postman und ich werde das ändern, um Mix zu sagen. Jetzt denken Sie daran, dass wir Gerüst Summe. Mischen Sie zunächst in die Datenbank. Das bedeutet, dass ich Daten habe, die in der Lage sein sollten, zurückzukommen, wenn ich diese Anfrage sende. Dort bekommen wir Bach oder Daten oder bekommen über Toyota mit der ID1 erstellt, wenn auch durch all diese wunderbaren Dinge. Siehst du, alle Daten kommen zurück. Nur für den Fall, dass Sie hier sind,
denken Sie, dass es nicht wirklich am Trend funktioniert den STM
zu ziehen, wenn Sie hier einen Haltepunkt auf diese GetMethod setzen. Also lassen Sie uns das noch einmal versuchen. Ich klicke auf Senden und dann wird Visual Studio mich
warnen, dass ich den Breakpoint für diese Methode getroffen habe, die dann diese Abfragedatenbankverbindung ausführt, mir die Makes-Tabelle bringt und alles in eine Liste bringt und sie zurückgibt. Das macht so ziemlich immer. Es wird es automatisch in JSON-Textblock serialisieren und zurücksenden. Du wolltest noch einen testen. Nehmen wir an, wir wollten die Get with the ID testen. In Ordnung, also kann ich sagen, Mischen Slush Tool. Und dann sollte mir das nur die BMW-Objekte zurückbringen, denn dann sagte die Methode, gehe in die Datenbank und finde den Datensatz in der Mix-Tabelle, die diese ID hat. Und dann, wenn es nicht ist, wenn du nichts gefunden hast, das zurückgegeben wurde, nicht angerufen, sonst drehte es die Beatles. Also, wenn ich diese in ID Tin
setze, habe ich nicht zehn Mix in die Datenbank. Also dann kehrt es zurück, nicht angerufen, wenn Aussage und es kehrte nicht falten, da er, alle diese Funktionalität kam aus der Box. Ich habe nur drei oder vier Mal geklickt und wir haben einen ganzen Controller. Und Tatsache ist, dass Sie diese Controller für alle Funktionen generieren können, alle anderen Tabellen und Endpunkte, die Sie Ihrem Client zur Verfügung stellen müssen, damit Sie alles tun können, wenn Sie möchten. Nur um zu erklären, was diese setzen nimmt die ID und es braucht die Daten für das Mikrofon,
was bedeutet, dass ich mein Boot dazu mache, einige Dinge zu aktualisieren um das Objekt mit den aktualisierten Daten zu senden. Es wird sicherstellen, dass die IDs übereinstimmen. Andernfalls wird ein Pfeil 500 oder eine schlechte Anfrage zurückgegeben. Dann wird es sagen, okay, Datenbank, suchen Sie nach dem übereinstimmenden Datensatz basieren auf der ID, dem Datensatz in der Datenbank Schnee, und ändern Sie dann seinen Zustand, um es zu ändern und dann speichern Sie einfach die Änderungen, weil ich gerade aktualisierte Daten, also NOR, die geändert wird und in CVE, was auch immer Änderungen gibt es am vorhandenen Datensatz. Und dann ist dies in einem Versuch Fang ausgebrochen, nur für den Fall,
dass unser widersprüchlicher Versuch, den gleichen Datensatz zu aktualisieren, widersprüchlich ist . Das ist so ziemlich alles, was es tut. Der Beitrag ist der Creates, richtig? Wenn wir also einen Beitrag machen, bedeutet das, dass ich das Verb ändern muss. Also muss das Verb in Postman geändert werden, um dies zu koordinieren, ich ändere es zu posten. Es wird der gleiche Schrägstrich Meeks sein. Aber dann die Leiche. Und was ich tun werde, ist eine Art von nehmen, die bereits hatte. Also muss ich ähnliche Daten in einer Post-Anfrage bereitstellen. Also in der Leiche. Ordnung, ich werde sagen, ich wollte dort insgesamt JSON und PS Punkt möglich machen. Diesmal werde ich einen Honda einlegen. Das ist also das neue Mikrofon. Und dieser Honda ist auf ID3 gestiegen. Nun, eigentlich sollte ich die ID nicht bereitstellen. Also an diesem Punkt
gebe ich keine ID an, weil ich tatsächlich etwas in der Datenbank erstelle. Also sollte die Datenbank für ihre eigenen Ideenpunktpunkte verantwortlich sein, richtig? Also honda erstellt durch die Analyse eines Systems genau die gleiche Weise, weil wir nicht ganz bereit sind,
den Benutzer zu sehen , der eingeloggt ist, macht die Operation, lassen Sie die Zeitstempel, die Sachen überwachen. Also, jetzt können wir damit durchkommen. Und was ich tun werde, ist, diese Post-Anfragen einzureichen. Das sollte mir also das Objekt zurückschicken, das erstellt wurde. Es gab Kredite, also ist es voll auf erstellt. Und es zeigt mir, dass Honda mit der ID3 erstellt wurde, mit all diesen Daten, richtig? Also, diese Endpunkte ist Datenbank, Holen Sie mir die Tabelle und fügen Sie ihr hinzu, was Objekt
über unsere Anfrage kommt und sehen Sie, ob sich diese Änderungen ändern. Und dann geben Sie created_at Aktion zurück, die die große ist. Und sag, du kannst mich mit diesem Ausweis besorgen, und das ist das Objekt. Ziemlich viel. All dies ist, was uns diese Rückkehr, dieses Ergebnis zurückgegeben. Und wenn ich hier gehe, Ort, wenn ich zu Kopfzeilen gehe und auf den Standort schaue, ist
das, was nicht gekauft auf einer Auktion erstellt. Das heißt, es ist sitzend, wo ich die Details holen kann, richtig. Löschen funktioniert. In ähnlicher Weise muss ich noch einmal die Löschungen übergeben. Was ich tun würde, ist sagen, mischen und sagen wir zwei. Aber dann löschen. Also hier ist, was ich nicht wollen, um dieses Dummy-Auto zu erschaffen. So ein Dummy-Auto. Okay, also werde ich noch weitere Post-Anfragen für unser Dummy-Auto schicken. Lassen Sie mich MCAR mit ID vier schicken. Mir ist klar, oh nein, das war ein Fehler. Das hätte ich nicht tun sollen. Also gehe ich zurück, gehe zu löschen und ich werde das Verb ändern um Marken zu löschen ist für ID für. Und dann, wenn ich schicke, wird Werkzeug für keinen Inhalt sagen. Alles, was ein 200-Code ist, ist erfolgreich. Und dann, weißt du, kann es variieren. Alles, was ein 400 ist, ist relativ erfolglos, in der Regel erfolglos, und 500 ist definitiv nicht erfolgreich. Also, dieses Tool für keinen Inhalt, obwohl es keinen Inhalt sagt und es könnte wie eine negative Antwort aussehen, wenn Sie die restlichen Verben
kennen und was sie bedeuten ADA-Risikoantworten eher. Und was sie bedeuten, Sie würden sehen, dass dieses Werkzeug tatsächlich eine gute Antwort ist. Was wir also bekommen, was wir in dieser Löschmethode tun, ist, wo sie gefunden wird. Wenn es null ist, dann entfernen wir es, wenn es nicht ist, nein ,
sorry, dann speichern wir die Änderungen und kehren dann zurück. Keine guten Ergebnisse. So ziemlich das ist es, was wir für unseren Controller aus der Box bekommen. Nun, wie ich schon sagte, es ist einfach genug, voranzugehen und diese Art von Kontrolle für all die anderen für mich gerettet zu haben. Also kann ich es wieder für unsere Models tun. Ich kann es wieder für Fahrzeuge tun. Nochmals, tun Sie es nochmal für alle von ihnen. Das Problem, wer auch immer kommt, wenn vielleicht gibt es bestimmte Anpassungen, die vorgenommen werden müssen. Wenn ich Änderungen speichere, möchte ich vielleicht etwas anders machen. Oder andere grundlegende Operationen, die ich bei 1 einschließen möchte und nicht einschließen möchte. Das ist ein weiterer Punkt. Es gibt bestimmte Dinge, die die Wartung erschweren. Da unsere Verpflichtung erweitert wird, wenn wir nur den Alt aus dem Box-Code verwenden, wie Sie hier sehen. Was wir also in der nächsten Lektion wollen, ist ein Muster namens Arbeitseinheit zu implementieren, wo wir dies abstrahieren, all diese Datenbankoperation direkt vom Controller. Wir werden nicht direkt mit der Datenbank vom Controller interagieren, aber wir werden eine weitere Schicht dazwischen setzen, die es uns ermöglicht, das zu orchestrieren, was los ist, landet auf Nitobi HIS-Ebene. Weißt du, es ist ein bisschen mehr Kontrolle und generischer. Also nicht schwer, all diese Dinge die ganze Zeit stark zu tippen. Und dann können wir sehen, wo die Wartung langfristig viel einfacher werden kann. Also bin ich noch nicht einer, der irgendeinen anderen abgekratzt hat. Ich werde voran gehen und in die Einheit der Arbeit setzen und dann können wir die Einheit der Arbeit Funktionalität in dieser einen Zeit verkraften, verhaften und implementieren.
19. Implementierung von Arbeitseinheit: Hey Leute, willkommen zurück. In dieser Lektion werden wir das beliebte Codierungsmuster implementieren, das als Arbeitseinheit bezeichnet wird. Wissen Sie, bevor ich in die Einheit der Arbeit gehen Potter und ich wollte nur darauf hinweisen , dass, während ich Ihnen
das Muster zeigen werde und während ich Sie ermutige, dieses Muster zu lernen, dieser Spotter und vielleicht nicht notwendigerweise für Sie auf Ihrem -Kontexte. Denn wie gesagt, und wir haben bereits etabliert, konnten
wir leicht mit ein paar Klicks, nur den Controller generieren,
der bereits eine Verbindung zur Datenbank hat und es uns ermöglicht, Daten zu manipulieren, Smoking Daten, alles aus der Datenbank und unserer Anwendung entsprechend. In Ihrem Kontext müssen
Sie möglicherweise nicht so weit gehen, wie Sie diese Art von Muster implementieren. Wenn Sie jedoch über Skalierbarkeit und Wartbarkeit,
Lesbarkeit des Codes nachdenken und bestimmte kritische Bibliotheken nicht überall wiederholen. Und wenn Sie jedes Mal zu viele Änderungen vornehmen müssen, wenn Sie ein Upgrade oder eine Änderung vornehmen möchten, beginnen
Sie, über Muster nachzudenken. Also meine Waffe der Wahl, wenn es um den Datenzugriff geht, wären
Muster die Einheit der Arbeit, weil es eine sehr generische Implementierung von
grundlegenden krähten Operationen über
mehrere Klassentypen hinwegermöglicht grundlegenden krähten Operationen über
mehrere Klassentypen hinweg , ohne zu spezifisch mit das Zitat. Je spezifischer Ihr Code wird desto mehr Wartung müssen Sie tun, wenn etwas geändert werden muss. Also, wenn Sie es generisch behalten können, dann ist es gut. Also werden wir
das generische Repository Potter implementieren und ebenso wie die Einheiten von Arbeitspoten sind. Und darüber hinaus. Also lasst uns hineingehen. Dazu werde
ich im Server-Projekt zwei neue Ordner erstellen. Also werde ich einen erstellen und ich werde es I Repository nennen, das die Schnittstellen speichern wird. Und dann werde ich noch einen haben. Ich werde einfach kopieren und einfügen und umbenennen, das dann zum Aufruf des Repositorys ging. Okay, also haben wir zwei Ordner, einen um die Schnittstellen zu speichern, einen um die konkreten Implementierungen zu speichern. Also die erste Schnittstelle, die ich haben werde, ist die, ist unsere Klasse. Ich werde es nur als eine Klasse ohne Goning erstellen, um generisches Repository hinzuzufügen. So können Sie Klasse oder Schnittstelle sagen. Wenn Sie Schnittstelle tun,
denken Sie daran, dass ich es in die Öffentlichkeit ändern muss. Wenn Sie Klasse machen, dann denken Sie daran, dass Sie es von der Glasschnittstelle ändern müssen. Also generierte ich einfach die Klasse und ändere sie dann weil ich manchmal das Interface öffentlich vergessen habe. Okay, also reden wir jetzt über Generika, wenn du neu in der C-Sharp bist, vielleicht sieben oder es, Generika wurden eingeführt. Und ich habe generische erlaubt mir zu spezifizieren, sind nicht schwer zu spezifizieren oder einen anderen Klassennamen. Ordnung, also möchte ich, dass dieses Repository
Funktionen hat , die mir erlauben, mit mehreren Klassen zu interagieren. Und wenn ich sage, Klasse ist, meine ich diese Datenmodelle, richtig? Also dieses generische Repository, er wird einen Schlüssel vom Typ T nehmen und dann
werde ich angeben, dass t unsere Klasse repräsentieren wird, was
bedeutet, dass es nichts anderes sein kann als Dr. classic gefunden beste Strich-Darren-Schnittstelle oder Testen
Sie das Rückglas. Dann innerhalb dieser Schnittstelle werde ich einen Kraftstoff Funktionen angeben, oder? Also werde ich es tun. Von einer Funktion, die mir erlauben wird, alles klar zu bekommen, und ich habe sie einfach getippt, sagte dir, dass du pausieren kannst,
repliziert es von selbst, richtig? Aber dann werde ich sowieso jede Zeile erklären. Und das ist wirklich nur eine Methode mit allen Parametern, die ich gerade die Zeile geschrieben habe,
weil ich nicht zu weit vom Bildschirm gehen wollte. Also habe ich eine Aufgabe. Wir geben eine Ionen-Liste vom Typ T zurück. Also T, das generische, welcher Datentyp auch immer übergeben wird,
das ist der Typ, auf den wir gehen, das ist der Datentyp, auf den wir uns konzentrieren werden. Wenn diese Methode ausgeführt wird. Es wird die Methode get all aufrufen. Wir öffnen Klammern, unsere Einnahme von Parramatta Nummer eins, was ein Ausdruck ist, richtig? Was wirklich nur ein Lambda-Ausdrücke ist. Ich gehe weiter und füge das mit ein. Also hatte ich einen Lambda-Ausdruck als Bare Metal genommen, wobei ich eine bestellbare Abfrage als Parameter und dann eine Liste von Strings namens Includes nahm. Also möchten wir vielleicht zu allen Parametern kommen. Ich habe immer gesehen, dass wir unterschiedliche Beziehungen zwischen unseren Tischen haben, oder? Es könnte also sein, dass wir alle Buchungen erhalten und alle Details der Fahrzeuge und des Kunden pro Buchung mitteilen wollten . Daher müssten wir sicherstellen, dass wir die zusätzlichen Daten einbeziehen. Und ich habe bereits erwähnt, dass diese Art von implizierter innerer Verbindung uns durch die Rechte zur Verfügung steht. Als Nächstes haben wir eine andere Aufgabe. Und bemerke, dass ich Aufgaben benutze. Dies ist also ein Teil der asynchronen Programmierung. Wir werden mehr davon sehen, wenn wir die Methoden implementieren, wir haben eine andere Aufgabe vom Typ T. wir haben eine andere Aufgabe vom Typ T. Und wir verstehen, wie wir diesen Ausdruck noch haben. Also die gleiche Art von Ausdruck, aber dieser ist nicht nullfähig. Also dieser sagt, dass Sie keinen Ausdruck übergeben müssen. Wenn du zu diesem weitergehst, wenn ich bekomme, das ist eine Einheit, dann musst du mir sagen, welche du willst. Also musst du mir den Ausdruck geben, okay? Und dann erlauben wir die Liste der Includes auch. Und dann werden andere Methoden einschließen und andere setzen sie dorthin und führen Sie durch sie. Oder fügen Sie T-Entität ein. Richtig? Wenn wir also der Datenbank hinzufügen möchten, rufen
wir unsere Insert-Methode auf. Wir können Liste von Entitäten einfügen, wenn der Bedarf jemals entsteht. Wir können eine basierend auf der ID löschen. Wir können unser Angebot Bossing in allen löschen, die wir löschen möchten. Und dann haben wir Update t Entität. Okay, das ist also unser generisches Repository. Nein, wir müssen die konkrete Klasse für unser generisches Repository haben. Also gehen wir zum Repository über,
nicht zum Repository zu diesem Zeitpunkt, aber Repository wird eine Klasse hinzufügen. Und es ist eigentlich ein Klassensystem. Wo gibt Ihnen diesen gleichen Namen nur mit allen I0,
I0 generische Repository und dann generisches Repository, klicken wir auf Hinzufügen. Und dann müssen wir das auch generisch sein lassen. Und es wird von meinem generischen Repository erben. Okay, was ist natürlich vom Typ T? Entschuldigung, habe ich versehentlich gebaut? Und dann machen wir dasselbe, wo wir sagen, wo t Glas ist. Ich werde das nur kopieren, weil wir nur sehr explizit sein
wollten , aber dann muss ich
das fehlende Referenzboard aufnehmen , das nach dem Einschließen der fehlenden Referenz die Schnittstelle implementieren muss. Also geh weiter und tu das. Und dann werden Sie sehen, dass alle
Öfen der Methode erzeugt werden, die mit den Methoden übereinstimmen, die wir alle ausgekleidet hatten. In Ordnung, also lasst uns in unserem generischen Repository arbeiten. Für diesen Abschnitt müssen wir auch unseren Datenbankkontext injizieren. Initialisieren Sie unseren DB-Satz auf den Datentyp, der in St. übergeben wird also werde ich mein eigenes lokales Feld privat schreibgeschützte Anwendung DB-Kontext erstellen. Also nach diesem einen Nichts Kontext,
denken Sie daran, dass Punkt unsere Verbindungen in der Datenbank
die fehlende Referenzverpflichtung für DB-Kontext darstellt , und ich werde diesen einfach in den Partiturkontexten aufrufen. In Ordnung. Darüber hinaus werde ich eine andere private
schreibgeschützt initialisieren , wo ich db sitzen habe. Schlüsselwort klingelt eine Glocke an Sie und TV ist vom Typ T, denn wieder, ich weiß nicht, was t zu irgendeinem Zeitpunkt sein wird. Ich mache das so generisch wie möglich und ich werde diese Unterstrich DB nennen. Also muss ich hier eine fehlende Referenz einfügen. Das ist in Ordnung. Und dann brauche ich ein generisches Projektarchiv im Konstruktorformat, damit ich die Tastenkombination CTO für
Stub zweimal schreiben kann und es generiert diesen Konstruktorstopp für mich und dann muss ich injizieren. So wie wir sahen, dass Injektion Hub Bandbreite macht Controller dort ist es. Dieselbe Art von Injektion müssen wir dieses Objekt in das generische Repository injizieren. Und dann bin ich buchstäblich nur Kopie auf Grundgesetze ist das gleiche Zitat ist das gleiche Konzept, das wir brauchen, um oder lokale Kopie auf das injizierte Objekt zu initialisieren. Und danach werde
ich meine DB-Objekte RDB-Feld initialisieren, um einen Unterstrich
Kontext-Punktsatz vom Typ T zu sein . Mit anderen Worten,
DB weiß, wann der verbundene Datenbanksatz vom Typ T dargestellt werden soll, was auch immer t geht um zu der Zeit zu sein. Das ist eine Methode. Also setzen Sie in Ihre Umweltabteilung tut und schließen Sie ab. Das ist sein oder sich für Generika oder Bluster entschieden haben. Jedes Mal, wenn dieses Repository initialisiert
wird, wird diese Verbindung in die Datenbank injiziert. Und dann muss es relativ zu einer bestimmten Klasse initialisiert werden. Dann wird es sagen,
OK, ich bin mit dem Stall verbunden. Und dann werden wir sehen, wenn diese Methoden aufgerufen werden, werden in Aktion gerufen. Was soll passieren? Lassen Sie uns also mit den einfachen beginnen. Löschen ist sehr einfach, ist eigentlich sehr, sehr einfach, denn was wir brauchen, um eine zu tun, ist die Entitäten zu finden. Ich werde sagen, var Entität, oder ich kann sagen, var rect Karte ist gleich. Und dann werden wir bei einer kann nicht asynchronen Programmierung in ein bisschen beginnen. Wenn wir also mit Entity Framework Core arbeiten, geben
sie uns eine Reihe von asynchronen Methoden, denn wenn Sie nur db dot sagen, werden
Sie asynchrone, iberische JS-Synchronisation hinzufügen sehen. All dies, die meisten von ihnen haben eine asynchrone Version zu ihnen. Wann immer wir etwas tun, das asynchron ist, müssen
wir diesem Aufruf das Schlüsselwort erwarten vorangehen. Okay, also will ich ein Waschbecken
finden, und ich werde nicht finden, wenn ich ein Waschbecken finde, oder? Der Unterschied zwischen den beiden besteht darin, dass asynchron bedeutet , dass D irgendwie auf verschiedenen Threads ausgeführt wird. Die Verpflichtung auf Büschel wird auf die Ergebnisse dieser Funktionsaufrufe warten. Das ist also, was die AC, das ist ein Vorteil, den die asynchrone Programmierung bringt. Also werde ich sagen, finden Sie eine Spüle und dann finden erwartet einige Objekte. Nun, ich werde den Ausweis übergeben. Also, wie wir im Hauptbereichscontroller gesehen haben, ist die gleiche Art von Logik, richtig? Im Löschen musste es den Datensatz finden. Und dann wird es das entfernen nennen, richtig? Aber dann werden wir nicht durch so viele Schritte Essay im Kontext, der dies macht, wir sind nicht so explizit, weil sie generisch sind. So EBWE verkörpert, was auch immer übergeben wurde, Finden Sie es asynchron Speicher und rote Karte. Und dann werde ich auf der Punktzahl db Punkt sagen, entfernen Sie dies erforderlich. Es gibt also keine asynchrone entsprechende Funktion zu entfernen. Also, das ist in Ordnung. Ich werde nur Benutzer bewegen. Und ich werde sagen, entfernen Sie die Platte. Nein, beachte, dass ich Zeilen gelesen habe. Eins. Ich brauche oh, ich habe gesagt, dass wir das mit warten vorangehen müssen. Ordnung. Also müssen wir sagen, oh, es ist bemerkt, dass Punkt-Punkt-Punkt verschwindet, aber dann erscheint dieser, denn wenn wir ein Warten machen, muss
die Methode eine Spüle sein. Also, sobald Sie
einen asynchronen Aufruf machen und Sie müssen das Schlüsselwort await verwenden. Stellt sicher, dass die Methode, die den Aufruf ausführt, das Schlüsselwort async hat. Beachten Sie, dass beide leuchten, wenn ich nur einen hervorhebt. In Ordnung, also gehen wir mit Löschen. Bereich löschen ist gut, weniger Codezeilen, weil ich liebe zu sehen ist ehrliche Punktzahl db Punkt entfernen Bereich. Und sie entfernen Bereich erwartet einen Parameter,
eine Sammlung von allem, was es entfernen sollte, die in Form von Entitäten übergeben wurden. In Ordnung. Also, das ist es zum Löschen. Eins. Wie gesagt, ich habe es mit einer niedrigen hängenden Frucht zu tun. Damit dieser hier wortwörtlich wird, wird diese eine Bande wortreich. Also lassen Sie uns runter springen, um in der Chirurgie in allgemeinen Updates einfügen, auf denen wir zurückverfolgen können. So einfügen ist relativ einfach. Alles, was ich für den Einsatz sagen muss, ist ein Gewicht d,
b, fügen Sie async und Entität hinzu. Und dann noch einmal, wenn wir ein Gewicht verwenden, muss
ich sicherstellen, dass die Methode eine Spüle ist. Wenn wir den Einsatzbereich machen, haben
wir ähnlichen Code, außer dass es jeden Zentimeter Blut ist, das man sieht. Also in Reichweite und noch einmal eine Spüle. Okay, und dann für ein bisschen, was wir hier tun müssen, also für das Update auf dieser Seite,
was es getan hat, war, dass ich gefunden oder getan habe, es sagte nur, dass Entropie den Status geändert, Ordnung, und dann Änderungen speichern, und Das ist in Ordnung. Ordnung? Was wir auf dieser Seite tun können, was ich dagegen tun werde, ist etwas anders. Nun, es ist eine zusätzliche Zeile, in der ich sagen werde, Unterstrich DB Dot-Touch-Entität. Und der Grund, warum wir diesen angehängten Entitätsteil machen, ist, dass, wenn wir das Get tun, sie alle dort bekommen, wo sie sich von der Datenbank trennen. Also grundsätzlich in der Mischung, wenn eine Abfrage nicht ist, werden diese Entitäten unsere eigenen geworfen, sie sind immer noch angehängt, die Datenbank beobachtet
immer noch alles, was dieses Objekt durchläuft, , die einige Auswirkungen auf die Leistung haben kann, wenn Sie Tausende von
Datensätzen haben , die in verschiedenen Märkten Trend Trend haben, um jederzeit im Speicher den Überblick zu behalten. Also, was wir tun werden, ist, wenn wir, wenn wir das Get machen, sagen
wir keine Verfolgung,
was bedeutet, dass sie losgelöst sind. Also, wenn ich im Begriff bin, ein Update durchzuführen, fügen Sie diese Entität erneut an. Also die Datenbank für die Sammlung. Dann fängt es an, es zu transportieren. Und dann, wenn es es läuft, nein, kann
ich diesen Entitätseintrag sehen. Was auch immer Entität unser Kontextpunkteintrag ist, die Entität, die in diesem Zustand übergeben wird, ist gleich Entitäten , modifizierte
Zustände, was dasselbe ist, was hier passiert ist. Wieder einmal, wo es generisch ist, so
geben wir kein Mikrofon an, weil ich nicht weiß, ob es auf mir ist, geben Sie ihm ein Modell. Wenn es ein vage ähnelt, können wir es nicht wissen. Deshalb sind wir sehr vage mit unseren Namen hier. Ich nenne es m Entitäten, im Gegensatz zu mir können modellieren und irgendetwas spezifisches Knoten. Lassen Sie uns ein wenig zurückverfolgen und gehen Sie zu unserem Git und bekommen alle. Also kommen Sie zu, bekommen ist einfacher. Fangen wir mit Git an. Die erste Zeile aus, um zu erhalten, besteht darin, eine Abfrage zu initialisieren. In Ordnung, also kann ich Tee abfragen, und ich abfragbar ist ein sehr spezifischer Datentyp, was bedeutet, dass im Grunde
den ersten Datentyp darstellt , den Sie erhalten, wenn Sie mit der Datenbank interagieren. Und von hier aus können Sie bestimmte Operationen effizienter gegen
die Datenbanksammlungen durchführen , als Sie könnten, wenn Sie eine Liste speichern lassen, die ich aufzähle oder etwas anderes, richtig? Also initialisieren wir unsere Abfrage dieser BB. Hier werden also alle Datensätze in den Speicher geladen. Und dann werde ich sehen, ob es einschließt. Also hätten wir Includes übergeben. Includes ist nicht gleich null, was bedeutet, dass etwas in dieser Liste gesendet wurde. Richtig? Dann wollten wir sehen, ob
ich für jeden einfach tun kann und Wanne, Wanne, Var sagen kann. Ich sag einfach rein, sagen wir Requisite. Lassen Sie uns ein Wort Requisite in der enthält Liste verwenden. In Ordnung, dann wollten wir eine Abfrage sehen, die die Datenbankverbindung darstellt. Sind die Datenbankabfragen gleich Abfragepunkte enthalten? Und dann werde ich nur Requisite retten. Es ist also ungestörte Zeichenfolge, alles, was Sie wirklich brauchen, ist der Name dessen, was es enthalten sollte, also werden wir versiegeln, die später funktioniert. Kein Problem. Und dann nach all dem, werden
Sie feststellen, dass dies, gelesen wird. Wir müssen eine Abfrage Punkte zurückgeben. Und dann wollte ich als mehr Tracking sehen. Also hier ist, wo ich sehe Trennung von der Datenbank. Aber ich möchte, dass Sie den ersten
unsere Standardeinstellung zurückgeben und ich werde die asynchrone Version dieser Methode wählen. Und dann übergebe ich den Ausdruck. Okay, wenn Sie also nicht mit Lambda-Ausdrücken vertraut sind, na ja, Lambda-Ausdruck, ist der Lambda-Ausdruck, der hier eingerichtet worden wäre. Wir bossen es durch, richtig? So können Sie auf einigen Bluff Lambda-Experten sehen hier in diesem Mikrofon existiert Methode, wo wir Kontexte dot,
dot n0 sagen , und dann ist dies ein Lambda-Ausdruck. Es ist also diese Art von Ausdruck oder diese Art von Wert, die in dieser Methode übergeben wird. Und dann wird es diese Operation ausführen. Richtig? Natürlich habe ich hier eine Spüle gesehen. Das heißt, ich brauche das Schlüsselwort, ich warte. Und wenn ich das Schlüsselwort o h brauche, bedeutet
das, dass ich meine Methode hier zu einer Spüle machen muss. Da gehen wir. Okay, das ist also die „Get Juan, Juan“ -Platte, richtig, basierend auf diesen Lambda-Ausdrücken. So könnte es nach ID sein, es könnte mit Namen gleich b für Jahr sein. Ich meine, ich weiß es nicht. Es könnte das Fahrzeug von Vin vivo sein, das über ICO von Vin schaut, du weißt
schon, stellen Sie sicher, dass wir den entsprechenden Ausdruck einfügen, um sicherzustellen, dass wir den Wert zurückbekommen, den wir suchen, richtig? Vier bekommt alles null. Wir beginnen tatsächlich mit den gleichen weniger Codezeilen. Also brauche ich die, naja, ich brauche die Abfrage zuerst, richtig? Und dann bin ich mir nicht sicher, ob ich zu einem Ausdruck komme, also möchte ich nicht voran gehen und es ausprobieren, einen Ausdruck
spielen, besonders wenn er null ist, das wird mir einen Fehler geben. Also werde ich sehen, ob der Ausdruck nicht null ist. Versuchen Sie das noch mal. Wenn Ausdruck aktiviert ist, wenn sie ausdrücken werden, ist nicht gleich null, dann möchte ich die Abfrage filtern. Denken Sie daran, dass dies alle Tabellen in der Datenbank darstellt. Also werde ich sagen, dass die Abfrage nicht nach dem Ausdruck gefiltert werden soll. Also haben wir nicht alle diejenigen, die wir wissen, dass wir nicht brauchen, wenn ein Ausdruck gegeben wurde. Wenn wir also sagen, geben Sie mir alle Fahrzeuge den ganzen Block, dann übergeben wir das, um mir den schwarzen zu geben. Also alle Fahrzeuge, die nach unten filtern würden, um diejenigen, die nur Block sind. Und dann. Basierend auf dem Feld. Und sobald wir das gleiche tun, also werde ich nur diesen Block hier kopieren. Also, wenn er einschließt, dann gehen wir voran und fügen die Details, die wir brauchten. Und dann haben wir auch die Bestellung durch lassen Sie mich einfach alle Abteilungen runterbringen, damit wir uns an sie erinnern können. Also haben wir den Ausdruck, dann haben wir die Reihenfolge BY. Also nach dem Einschließen, dann können wir auf Bestellung gehen. Also werden wir sagen, wenn die Reihenfolge nach nicht null ist, dann wollen wir Query gleich ist. Und dann haben wir diese Methode Reihenfolge nach Abfrage, richtig? So mögen Rabbiner wirklich eine Methode und es wird sie
nur nach dem, was angegeben wurde, neu anordnen. Dann möchten
wir am Ende all dessen nur Abfragepunkte zurückgeben. Trennen Sie sie erneut von der Datenbank-Punkt-Liste. Und ich werde diesen einen asynchronen treffen, wenn es eine Synchronisierung ist, muss
ich warten. Und wenn ich warte, dann muss meine Methode eine Spüle sein. Okay, und da haben wir ein generisches Repository, das so weit gut aussieht, richtig? Jetzt ist die Sache mit dem generischen Repository, während es ein generisches ist, ja, wir müssen es immer noch irgendwie
jedes Mal instanziieren , wo es mit dieser anderen Tabelle unterbrochen wurde. Was bedeutet, dass, wenn wir in einem Kontrollgesetz mit mehreren Tabellen interagieren müssen, wir es mehrmals instanziieren müssen. Also werde ich auf eine andere Ebene der Behinderung setzen. Und eine andere Sache, die fehlt, ist die Änderungen speichern. So wird eine weitere Ebene der Arbeit eingehen. Und ich ging, um das in den IRE-Repository-Ordner zu implementieren. Und ich werde eine andere Schnittstelle erstellen. Also lassen Sie mich einfach erstellen, da eine Schnittstelle Zeit ist, und ich werde es nennen, ich brauche eine Gabel. Und noch einmal, denken Sie daran, es öffentlich zu machen. Jetzt diese i Einheit der Arbeit, Ich werde nur von Einweg erben weil was wir passieren wollen, ist, dass, wenn Sie fertig mit den Einheiten sind Kraft, stirbt
es im Gedächtnis. Wir wollen es nicht durchhalten, indem wir es verändern. Also, das ist in Ordnung. Aber was wir in diesem Abschnitt tun können, ist
null tatsächlich wie unser Register für
alle möglichen Implementierungen des generischen Repositorys erstellt , so dass wir nur eines haben würde es nur einmal gut genug tun, um Tag jedes einzelne Mal, wenn Sie mit
mehreren Tabellen interagieren müssen, wird nur wie ich ein Mal registriere. Also würde ich ij generisches Repository für mich erstellen. Geben Sie ihm zum Beispiel seinen Namen. Also werde ich es nennen, ein paar Leute zu mischen. Wenn Sie, wenn Sie sich dieses Muster ansehen, sonst kann er sehen, dass einige Leute es nennen, das Repository sehr explizit macht. Aber noch einmal, das ist nur der NIMA-Punktpunkt. Aber die Klasse ist das, was wirklich wichtig ist. Also sehe ich ein generisches Repository für unser Mikrofon implementieren, richtig? Und denken Sie daran, generische Repository erforderliche Klasse, Cool und dann mischen. Jedes Mal, wenn wir IU harten Wortmix nennen, wird
es dies automatisch implementieren. Und es wird automatisch durch diese Verbindung mit der Datenbank gehen. verbinden Sie den Tisch. Okay, also können wir das für alle Tische wirklich tun. Also können wir Modell sagen. Wieder sehen Sie Fahrzeug, alle, richtig? Wenn wir eine neue Tabelle hinzufügen, muss
ich ein neues Repository haben. Wir fügen es einfach zum Register hinzu. Wir müssen das nicht jedes Mal wieder durchmachen, wenn wir einen neuen Tisch haben. So können Sie fortfahren und alle hinzufügen. Aber jetzt arbeite ich einfach mit denen, die ich gerade mit mir arbeite. Aktivieren Sie diese Bedürfnisse, weil wir den Mix-Controller haben, also werde ich nur mit mir arbeiten und Ihnen zeigen, wie das Refactoring passieren wird. Okay, danach brauchen
wir keine konkrete Klasse für unsere Einheiten. Ich werde auch Aufgabe speichern implementieren. Dies wird also unsere Änderungen speichern und was auch immer andere Operationen darauf ist, dass wir möglicherweise einen Zwilling durchführen müssen, wo Speichern. Lassen Sie mich also die konkrete Klasse noch für die Arbeitseinheit schaffen. Also gehe ich zurück zum Repository, füge eine neue Klasse hinzu und ich rufe jede Einheit aus der Arbeit auf. Also ich Einheit der Arbeit und Einheiten sind Fork erstellen, dass dies von IU erben wird und es ist alles Gabel. Und dann müssen
wir natürlich die gleiche Art und Weise wie alles andere, was geerbt aufdie gleiche Art und Weise wie alles andere, was geerbthat, voran gehen und implementieren oder Schnittstelle. Ordnung, hier wird es versuchen, den generischen Mix zu initialisieren, rechts auf die entlegene Methode, die
erstellt wird , weil wir die Vererbung an die Entsorgung hatten, und dann haben wir die Speichermethode generiert. Von hier aus werde ich ein paar Dinge tun. Ich werde die gleiche Art von schreibgeschützt haben, die wir für den Kontext hatten. Jemand, der diese Anwendung DB-Kontexte erstellt, verweist hier. Und dann werde ich auch eine private Version dieses öffentlichen Repositorys für mich x haben. Also lassen Sie mich das einfach tun. Also mache ich privat schreibgeschützt. Ich habe Repository-Mikrofon entwickelt, aber dann ist es in diesem Schlüsselwort oder
dieser Namenskonvention so privat , eher ich nenne es einfach Mix, richtig? Ich werde auch einen Konstruktor brauchen. Also c Bar, okay? Und dieser Konstruktor, wenn ich erwarte,
dies zu verwenden muss ich definitiv das Objekt injizieren, wie ich es vorher getan habe. Und fahren Sie fort und instanziieren Sie es, unsere Initialisierung auf die injizierte. Da gehen wir. Ordnung, es ist all das wird Abhängigkeitsinjektion genannt, wieder einmal, Standardverfahren und es ist sehr einfach durch dominate Core gemacht. Also lassen Sie uns konzentrieren, bevor ich mich auf die Spitze konzentrieren, konzentrieren
wir uns auf das, was mit der Entsorgung passiert, auf das, was mit dem Speichern passiert. Also in dieser Pose, was ich tun werde, ist zu sagen, erstens, holen Sie mir den Kontext und entsorgen Sie ihn. Also, egal welche lokale Kopie des Kontexts ich verwende, wenn die Arbeitseinheit ihre Arbeit erledigt ist, entsorgen Sie sie
einfach. Und dann werde ich auch die Garbage Collection aufrufen und unterdrückend sehen, das analysieren. Diese Einheiten des Arbeitsobjekts töten es im Speicher, aber das ist ziemlich genau das, was dort passiert, richtig? Für den Speichervorgang werde
ich sagen, ich werde warten, Kontexte Änderungen speichern asynchron. Na gut, das sind natürlich unsere Gewichte, also brauche ich ein Waschbecken. Wissen, was hier passiert ist, ist, dass
wir können, wir haben die Möglichkeit, tatsächlich mehr Dinge
in unsere Sparoperation zu setzen , wenn wir diese Methode haben, richtig? Weil wir haben, wo wir tun wollen, zuletzt aktualisiert und erstellt durch eine all diese Dinge. Stellen Sie sich vor, wir fügen alle diese Controller hinzu, nur so gebaut wurden. Und dann jedes Mal, wenn etwas passiert, nicht wie ein Update. Ich muss mich daran erinnern. Ich muss sagen, sanfter Punkt aktualisiert die aktualisierte Datum-Zeit, keine Punkte von Beta-bys gleich wer auch immer eingeloggt war. Und das muss ich religiös machen, oder? Und oft tun Sie das überall. Wenn ich zehn Controller habe, um es in Alton-Controllern zu tun, wenn sich etwas ändert, ein Feld ändert, sind
die Namensänderungen etwas danach. Denken Sie daran, es zehnmal zu ändern. Wenn wir die Möglichkeit haben, all diesen einen Ort zu setzen, bringt
es einen großen Vorteil, denn hier kann ich diese Methode anpassen,
um diese Anpassungen vorzunehmen, bevor ich die Änderungen speichere. Und so mache ich es einmal. Und das ist die Macht eines Musters. Aber wir sind noch nicht bereit, dorthin zu kommen. Was ich tun werde, um dieses Video abzuschließen, ist Ihnen zu zeigen, was für diese Zeile erforderlich ist. Für die öffentliche Methode und den einfachen Weg,
diese Initialisierung zu tun , besteht die Verwendung eines Lambda-Ausdrucks. Und dann werden wir das benutzen. Und sehen Sie auf der Partitur Mix war die private Version. Score macht, dass verbreitet fors auf diese. Und dann werden wir nur sehen, ob es nicht null ist, dann sollte es gleich sein. Dieser Operator bedeutet also nur, wenn er null ist, dann mach es gleich. Und dann werden wir
ein neues generisches Repository vom Typ mic in dieses Objekt initiieren , richtig? Und dann werden wir in dem Kontext übergeben, der hier initialisiert wurde. In Ordnung, so sieht das bisschen Code aus. Und oh, das sollte keine schreibgeschützten Entschuldigungen sein. Das sollte also nicht schreibgeschützt sein. Und das sagt, dass es braucht, okay, okay, also lass mich, lass mich zurückverfolgen und Karten so Fehler. Also, wenn wir die Seife in das Register der i Einheiten angeboten setzen, sollte
dies nicht Gets it sein, dies sollte nur bekommen. Also lasst uns das Set ausziehen, richtig? Diese sollten keine Sets sein. Ich habe alle diese Bilder Bereiche dann aus Nr. In Ordnung, also sollte das einfach ein mich überall bekommen, nur das Objekt bekommen. Und dann wird der öffentliche Knoten dieses Objekt abrufen und dort ablegen. So sieht unsere Arbeitseinheit so aus. Wenn wir jetzt zurückkommen, werden wir sehen, wie Sie
unseren Makes-Controller umgestalten , um die Arbeitseinheit zu nutzen und dann einige Tests durchlaufen zu lassen. Und dann können wir für
jedes einzelne Domänenobjekt, das wir in unserem Programm haben werden, auf der ganzen Linie implementiert .
20. Refactor für bestehende Steuerungen, um die Einheit der Arbeit zu verwenden.: Na gut, willkommen zurück. Jetzt, da wir unsere Arbeitseinheiten eingerichtet haben, wollen wir anfangen, unsere Controller neu zu gestalten. Aber bevor wir unsere Controller zur Arbeitseinheit unterbrechen lassen können, müssen
wir das Bootstrap lassen oder wissen, dass dies ein injizierbarer Diensttyp
in unsere Anwendung ist und alles andere, das es befürchten könnte. Was wir also tun müssen, ist zum Start zu gehen. Und dann direkt auf den Knien, die Anzeigenidentitätsserver, JWT, Ich werde eine Zeile hinzufügen, transiente i Einheiten aus Arbeitseinheiten
hinzugefügt 04. Wir können voran gehen und alle fehlenden Referenzen entsprechend einbeziehen. Und was passiert ist, dass wir tun, ich würde Indianola Trends, ich würde vorübergehend, Scoped hinzufügen und Singletons hinzufügen. Singleton bedeutet, dass es ein Weihrauch für
das gesamte Runtime Angebot Ihrer Anwendung sein wird. Sculpt bedeutet, dass es schaffen wird, na ja, es wird eine Instanz für die Lebensdauer eines bestimmten Satzes von Aktionen sein. Und dann würde ich vorübergehend bedeutet, dass jede Aktion ihren eigenen Rand auf so ziemlich drehen
wird. Wir wollen also sicherstellen, dass die Arbeitseinheiten nicht, du weißt schon, es ist, dass sie jedes Mal einzigartig ist. Und nun, wir haben bereits die Garbage Collection, also sobald sie nicht mehr benötigt wird, wird
sie sich ohnehin selbst entsorgen. Also, das ist ganz oder Einheiten oder vier, es wird injiziert oder wird für die Injektion vorbereitet. Also eine Null überall, wo wir das gleiche wollten, können Sie Anwendung DB-Kontexte oder einen anderen Dienst injizieren. Ich kann wissen, injizieren Sie meine i Einheiten, also 4k, also werde ich Snyder Factoring direkt hier in den Mix-Controller, wo ich sagen werde, i Einheiten der Arbeit. Ich möchte also nicht mehr direkt mit meinem Kontext interagieren. Ich möchte anfangen, die i-Arbeitseinheit als Vermittler zu verwenden, richtig? Es geht voran und enthält alle fehlenden Referenzen. Und dann werde ich diese Arbeitseinheit nennen. Und so wird die Injektion null nicht verpflichten DB-Kontext-Aufzählungszeichen sein. Du gehst von der Arbeit, oder? Und dann folgt die Initialisierung so ziemlich dem gleichen Muster wie bei allem anderen, was wir getan haben, das eine Injektion beinhaltet. Beachten Sie also, dass wir die i-Einheit TO zum Ersetzen von RDB-Kontexten haben. Wir haben eine Reihe von Fehlern, die wir durcharbeiten müssen. Und mal sehen, was genau passiert. Also hier sagte es, eine Aufzählung von Mick zurückzugeben und es ging in die Datenbank, die Tabelle und dann konvertiert, dass. Das wäre also Lead II abfragbar in eine Liste gewesen. Also, was ich hier tun werde, ist sagen, i Einheiten, also vier mischen. Und dann sehe ich, gib mir die Gänge. In Ordnung. Da gehen wir. Nein, ich erhalte hier einen Fehler und es ist teilweise auf den Rückgabetyp im Vergleich zu dem zurückzuführen, was ich tatsächlich zurückgebe. Also werde ich tatsächlich ein bisschen mehr tun als jene Refactor, die eine Grundfarbe benötigen. Und ich werde diesen ganzen Controller
so bauen , wie ich mich wohler fühle, wenn mein Controller aussieht. Also wollte ich dies ändern, um nur eine Aufgabe des Typs zu sein. Aktion führt dazu, wann dieser starke Datentyp entfernt werden soll. Also geben Sie die tatsächlichen Ergebnisse ein. Und dann erwartet es eine Form von HTTP. Antwort zurückgegeben werden,
jemand, um dies ein wenig zu erweitern. Var Mix ist gleich, und dann haben wir diesen Anruf gemacht. Und dann sehe ich die Rückkehr. Und ich wollte es gut machen. Denken Sie also daran, dass, wenn wir uns die Rückgabetypen angesehen haben, wer den alten Schlüssel oder den Inhalt gesehen hätte und so weiter. Also ist alles k eine 200 Antwort, die es mir erlaubt, die Daten einzugeben
, die es zurückgeben sollte, wenn alles in Ordnung ist und das ist alles, was Sie haben, richtig? Also ja, mehr Codezeilen sind weg. Die eine weitere Codezeile. Aber für mich ist das viel lesbarer und es ist einfacher für mich zu pflegen. Und basierend auf dem, was wir implementiert haben, sehen
Sie, dass alles ohnehin funktioniert. Es ist also nichts falsch daran, den generierten Code zu ändern, solange Sie verstehen, warum Sie sich ändern und sobald Sie verstehen, was Ihre Änderung in der Nähe oder auf der richtigen Spur. Also lassen Sie uns eine ähnliche Operation für die Get mit dem Parameter. So Aufgabe I Axon Ergebnisse. Ich entferne den starken Datentyp. Und dann, was wir hier tun werden, ist viel zu harte Arbeit Punkt-Mix zu sehen. Also werde ich das alles ersetzen. Aber dieses Mal ist es ein Get. Und dann, anstatt die ID zu übergeben, noch
einmal, hätten wir gehabt, dass ich vier bekommen, mit dem Ausweis. Wir hätten etwas anderes durchkommen können, oder? Also die Flexibilität des Ausdrucks ist, dass wir in
die Lambda-Experten hier setzen und q Punkt sagen können. Und dann kann ich sehen, ID ist äquivalent zu ID. Das ist mein Lambda-Ausdruck. Diese Bedingung wird so ausgeführt, wie wir es gesehen haben, wie wir es im generischen Repository implementiert haben. Und es wird voran gehen und das ein Mikrofon zurückgeben. Und dann kann ich hier zurückkehren, okay, mit dem Mikrofon als die Daten zurückgegeben werden. Wieder einmal, wenn Sie an das Handgelenk, Design Risiko-Prinzipien,
Rest API, Entwicklung gewöhnt sind , dann wird all dies für Sie Sinn machen. Wenn nicht, dann kein Problem, deshalb sind wir hier. Deshalb sind zwei Endpunkte nicht nur ein paar zu gehen. Also für unser Update, die Änderungen, die ich machen werde, werden auf der Partitur Einheit 04 Punkt sein, macht Punkte. In Ordnung, also wegen des Registers, können
wir direkt zugreifen und mischen für etwa 2, die früher erzählt. Nun, dann können wir sagen, Update und dann übergeben wir einfach die Entität, die aus dem Mikrofon ist, oder? Also ich, das ist das MIC, das durch den Parameter hier hereinkommt, und wir schicken alles. Diese Codezeile wird also im Projektarchiv betreut. Niemand muss also auf unseren Controller schauen und
die tiefen dunklen Geheimnisse dessen kennen , was wirklich passiert. Okay, das ist diese Abstraktion. Und dann für eine Operation wie diese, wenn wir die Daten geändert
haben, müssen wir unsere Änderungen speichern aufrufen. Also werde ich das alte nehmen und ich werde dich sehen, wenn es aus vier Punkten ist. In Ordnung. Und dann war's das. Also lasst uns weitermachen. So sehen Sie, das Refactoring ist wirklich nicht so viel, aber für mich ist es, es gibt nicht viele Datenbanken schwere Aktivitäten in unserem Controller. Wir wollen sie leicht und klar wie möglich halten. Also für die Post, wir wollen Einheit aus Arbeit, um Punkt zu mischen und dann werden wir einfügen sehen, richtig? Und was wir einfügen, ist das Mikrofon. In Ordnung. Das ist asynchron. Oh, und es ist asynchron und ich vergesse, auf das Warten zu setzen, sehen
Sie eine grüne gespritzte Linie. Also und dann gibt es alle asynchron, die bereit sind, mir zu antworten, zurück zu gehen und eine Spüle zu setzen. Und dann von hier gehe ich zu SI-Einheiten sind vier Punkte speichern. Und dann kann ich diese Linie entfernen und alles andere wird entsprechend fließen. Für den SAC ist wieder der Knopf da. Es funktioniert, aber Sie brauchen es vielleicht nicht. Also sage ich dir nicht, dass du dich damit entwickeln musst, aber ich führe dich nur als Ganzes. Sie können es umsetzen. Was wollen wir also löschen? Denken Sie daran, dass Löschen, Löschen nur die ID benötigt, oder? Also, was wir hier tun können, ist, dass Sie von der Arbeit,
Punkt, Mix , Punkt, Löschen, übergeben Sie die ID null, wo tatsächlich irgendwie einige der essentielleren Ticks umgehen, die wir hier sehen. Denn was es tut, ist zu finden, ob die Platte existiert, wenn nicht, dann wird sie zurückkehren, nicht angerufen. Und dann wollten sie natürlich Änderungen danach speichern. Richtig? Also reduziert all diese in mehr wie zwei Codezeilen. Aber dann, wie ich schon sagte, ist
dieser Scheck irgendwie von wesentlicher Bedeutung. Also können wir wahrscheinlich das überprüfen, wo wir Mikro sagen. Also holen wir uns das Mikrofon. Und dann denken Sie daran, dass wir das schon irgendwo hier oben gemacht haben, wo wir das geschafft haben. Also können wir das gleiche machen, machen Sie sich bereit. Wir sagen nur, hol mir das Mikrofon. Wenn das Mikrofon gleich null ist, dann geben NOT_FOUND auto zurück, wie wir damit fortfahren. Und dann können wir einfach alles entfernen, was da ist. Und es war C. Und dann haben wir diese Methode, die sagt Make existiert Seele. Sie könnten in der Arbeitseinheit C implementieren Wenn Sie in ID übergeben, überprüfen
Sie, ob vorhanden. Aber wir haben bereits diese Methode, die überprüfen wird, ob irgendetwas gibt es jemand, der
dies verwendet und ersetzt dies irgendwo existiert, um zu sagen, var me eq ist gleich dem,
um , und dann sollte es einen booleschen Wert zurückgeben. Also werde ich sagen, dass mir zurückgegeben wird, ist äquivalent zu null. In Ordnung? Unsere Seele hier, das ist asynchron, Methode ist es nicht. Was ich also tun kann, ist, dies zu einer asynchronen Aufgabe zu machen, die ein boolesches C
zurückgibt, das ich weiß, dass jeder glücklich ist. Und dann muss der Methodenaufruf natürlich das überwiegende hier oben haben. Also das ist alles, alles fließt, oder? Das ist also nur das Reflektierende für die Mikrofone. Wenn du erzeugt hättest, werden
sie Kontrolleure und er kann weitermachen und das tun. Sonst machen wir es trotzdem zusammen. Aber lassen Sie uns diese überarbeitete Kontrolle für einen Spin nehmen. Beachten Sie, dass wir verwenden sind Einheiten der Arbeit. Und vergewissern Sie sich, dass es vom Postboten funktioniert. Okay, also beginne ich mit einer Get-Anfrage. Also, wenn ich schicke dann bekommen wir alle Fahrzeuge oder sorry, alle Modelle oder die Mischung oder andere im System. Sie sehen also, es funktioniert, es funktioniert immer noch. Es macht unser Zitat zu sauberer und Segmentierung ist irgendwie vorhanden. Wenn wir es schaffen wollten, ist
es das gleiche Prinzip. Ich kann hier zur Schule gehen und Send sehen, und dann schafft es ein neues Dummy-Auto. Die Kinder werden genauso arbeiten. Alles wird behaupten. Mal sehen, was passiert, wenn ich eine ID lösche, die nicht da ist, Ursache Entfernung. Wir haben bereits den Mix mit der ID gelöscht für lässt uns sehen, was passiert. Siehe 404 Nicht Telefon. Wenn ich es auf fünf schiebe, das ist der Dummy-Kerl, den wir gerade erschaffen haben. Es ist Nullinhalt, also funktioniert alles noch. Niemand, was ich darauf hinweisen wollte, ist, dass, wenn wir unser, weißt du, irgendetwas erschaffen, wir wirklich nicht erwarten, dieses Zeug von all unseren Kunden zu bekommen, okay, also erstellt von Big erstellt, all das sollte nicht vom Client
verhindert werden und Postbote sollte wirklich emulieren, was ein Kunde tun würde. Also in dieser Situation, wenn ich das Auto machen wollte,
alles, was MCAR ID sucht, und dann sollten diese Felder wirklich automatisch ausgefüllt werden, oder? Also sehen Sie hier null, ich weiß nicht, wer geschaffen hat. Ich weiß nicht, wann es erstellt oder aktualisiert wurde oder so. Ich weiß so etwas nicht. Also sollten wir das wirklich umsetzen. Nein, ich hatte darauf hingewiesen, dass das, was wir
tun müssten , um so etwas zu erleichtern wäre, dass auf
dem Punkt, das ist das Update, ich müsste sehen, dass es zu
schaffen, unsere digitalen Daten gleich ist. Das wollen wir nicht tun. Wieder einmal wollen wir das nicht über
zehn Controller tun müssen , jedes Mal, wenn wir zu unserem Controller kommen, müssen
wir das gegen die Entität manuell tun. Was wir also tun werden, ist in unserem sicheren Betrieb
die Möglichkeit zu implementieren , die HTTP-Kontexte zu erhalten und die Objekte zu modifizieren, bevor sie zu C gehen Ordnung, also konzentrieren wir uns auf das Hinzufügen der Taten. Das Szenario ist also, dass, wenn ich
etwas erstelle , das D erstellt hat und die aktualisierten Daten gleich sein sollten. Allerdings, wenn ich etwas an diesem Datum getan, aktualisiert und aktualisiert von sollte ändern. Okay, also was wir tun wollen, ist diese sichere Operation, wir werden Var retten. Ich werde es nennen Einträge ist gleich, um mir den Kontext Punktwechsel Trucker zu bekommen. Denn denken Sie daran, dass ich sagte, sobald die Daten hereinkommen ,
oder ich meine, wenn Sie etwas erschaffen, sobald wir etwas umkreisen, das Objekt nicht verfolgt. Sobald wir es abgerufen haben, weil wir als North Tracking gesagt haben, gibt es kein Tracking. Zufallsstruktur wird also wirklich nur gut sehen. Alles, was ich lkw, besorge mir alle Einträge und das ist eine Methode. Und dann werde ich es einfach sagen, dass wir sind, also werde ich einen Lambda-Ausdruck in der Datenbank oder Abfrage ausführen, um zu sehen, wo der Lambda-Ausdruck Q-Punkt-Zustand dem NTT State entspricht, was wirklich eine Enum ist. Ich mag es also nicht, die ganze, volle Qualifikation zu haben. Es gibt Entitäten Theater und enthalten die fehlende Bibliothek, wo Entitäten, Zustände Punkt geändert. Oder ich gehe zur nächsten Zeile für das sind der q dot Zustand. Der Staat, der es ist, ist also nicht. Also denken Sie daran, wenn wir das Update, das ist der Zustand, rechte Werkzeug Entity Status DOT geändert. Also kann ich sehen, dass Punkt geändert wird, unser Entitätszustand ist dot tot. Das bedeutet also, dass es sich um Kunst handelt. Es wurde nur Werkzeug hinzugefügt, dass Tracking, oder zumindest, was es betrifft, es sagt wenig ID für zu viel. Dann werde ich alle durchlaufen. Also wollte ich für jeden Eintrag sagen, was in den Einträgen zurückkam. Denn die Realität ist, dass, wenn wir c nennen, Wenn wir vielleicht viele verschiedene Dinge berührt haben, richtig, wir haben die ganze update_many, die auf make und model modifiziert haben könnten. Und wir versuchen, einen Sparvorgang durchzuführen, und wir wissen es nicht. Deshalb bekommen wir nur von allen Einträgen. Das ist unser Boot gespeichert werden, um mir alle Ergebnisse geändert werden und alle von denen, die hinzugefügt werden. Und dann für jeden von ihnen, möchte
ich ihre modifizierten es ändern und modifizieren, indem wir,
richtig, wir sind nicht bereit für die Modifizierten, indem wir uns auf die Datenretinale konzentrieren. Was ich also tun müsste, ist Eintrittspunkte zu sehen und dann Entität zu sagen. Aber dann ist das Problem, dass Entitäten sehr generisch. Es weiß nicht, was es fühlt,
seine , es weiß nicht, richtig? Einer der Vorteile bei denen, die dieses BCE-Domänenobjekt verwenden, ist, dass wir immer Kosten und Entität in diesem Basisdomänenobjekt, was uns diese Auditgebühren gibt, die wir wissen, was jedes einzelne Feld, jede einzelne Domäne Objekte sind erlaubt. Also kann ich sagen, b ist Domänenmodell hier. Und dann kann ich all dies in eine große Klammer umschließen, also wird es es als ein großes Objekt des Typ-Baseline-Modells sehen. Dann kann ich sehen, Punkt aktualisiert, Daten aktualisiert. Lassen Sie uns auf den Trichter konzentrieren ist Zeit, Datetime Punkt Naught C. Und dann werde ich sehen, ob der Zustand, so in Baum. Wenn dieser Zustand äquivalent hinzugefügt wird, dann neigt es dazu, eine spezielle Behandlung zu erhalten, da zusätzlich zu der Datenzeit, es muss auch die erstellte Bedrohung bekommen. Also werde ich das kopieren und ich werde
dies nur ändern , um erstellt, Datum, Datum erstellt. Okay, also im Grunde sage ich, dass jedes Mal, wenn der Speichervorgang ausgeführt wird, alles bekommt, was geändert oder hinzugefügt wurde. Und dann für jeden von ihnen, dass Sie die Daten wissen weil es eindeutig aktualisiert wird und jeder von Ihnen hinzugefügt wurde, gehen Sie vor und füllen Sie es aus Also, wenn es aktualisiert wird, muss
ich den hinzugefügten Teil nicht aktualisieren. Und nach all dem werden
wir fortfahren und unsere Änderungen speichern, unabhängig davon. Alles klar, es wird nicht mehr, viel komplizierter als das dafür. Also noch einmal, dieses Scanner-System zu dieser
Zeit zu erinnern, dass bei jeder Steuerung, bei jeder Operation, ich versuche, all dies zu verfolgen, weil es einfach hier automatisiert. Gehen wir also einen Schritt weiter und schauen wir uns an, wie wir den Benutzer verfolgen. Da ich als Benutzer angemeldet bin und meine täglichen Operationen durchführe, weiß
ich wahrscheinlich nicht, dass Sie mich verfolgen.
Daher sollte ich meinen Benutzernamen nicht
neben jeder Arbeit eingeben müssen, Daher sollte ich meinen Benutzernamen nicht
neben jeder Arbeit eingeben müssen die ich mache, wenn ich auf Absenden klicke, Sie sollten das verfolgen. Ich bin derjenige, der auf Absenden klickt und unsere Auditfelder tun das. Aber wie bekommen wir dann die Daten von der Person, die den Blazer benutzt, bis zur Datenbank? Nun, wir werden die Einbeziehung von dem, was wir einen HDTP-Kontext nennen, zulassen. Okay, also weißt du, ich spare operativ, wir setzen diesen Parameter HDTP-Kontext ein
, der von unserem Controller kommt. Ordnung? Weil wir wissen, dass wir das sicher nennen. Jedes Mal, wenn wir gespeichert anrufen
, ist es, wo wir es finden. Also natürlich, wenn ich es hier aktualisiere, werde
ich es in der Arbeitseinheit aktualisieren müssen. Daher wird erwartet, dass C-F Parameter vom Typ HTTP-Kontexte hat. Gehen Sie also bald zurück und aktualisieren Sie die Controller entsprechend. Also, wenn wir die HTTP-Kontexte erhalten, die uns Zugriff gibt. Also vielleicht der Benutzername, unsichere Dinge, ein Boot, ein Controller, also alle Anfragen kommen rein. Also kann ich sagen, var Benutzer ist gleich. Und dann kann ich HTTP-Kontext-Dot-Benutzer sehen. Wir haben diese Punktidentität, Punktname. Das gibt mir also den Benutzernamen. In Ordnung, also wollte ich lkw, welcher Benutzer viel braucht. Nun, hier ist es. Ich weiß, wie der Benutzername. In Ordnung, also kann ich auch sehen, dass immer etwas aktualisiert wird, dass das Aktualisierte von Benutzer ist, richtig? Und dann ist der CreatedBy Benutzer. Und dann von unserem Controller muss
ich sicherstellen, dass ich jedes Mal, wenn ich speichere, diesen Punkt-HTTP-Kontext übergebe. Und dann muss ich sagen, nun,
ja, dieser Punkt HTTP-Kontext. Also ist das eigentlich ausreichend. Ich denke, ich brauche nicht einmal das Schlüsselwort, das eigentlich ausreichend ist. Da gehen wir. Also habe ich nur Boston die HTTP-Kontexte, so dass es automatisch zum LKW geht. Okay, dieser Benutzer war derjenige, der die Anfrage stellte,
weil die HTTP-Kontexte alles über irgendetwas passiert, passiert, die Verbindung, die verwendet wird, der Benutzer, sie fordern das ansprechende Writhing in diesem Objekt, so dass es ohne Objekt möglich war. Und dann sind die Einheiten Gabel CM-Betrieb wird nur
ein großer Krieg Autos sein , während es Dinge in die Datenbank und setzen es auf alle Audits. Dies ist also eine nette Möglichkeit, die Audit-Protokollierung in Ihrer Anwendung zu erhalten. Oh, vielleicht abhängig von den Entwicklern, um sicherzustellen, dass sie es in oder abhängig von sich selbst zu erinnern, dass bringt es in die ganze Zeit. Also lasst uns das testen. Mal sehen, wie Postman gesehen werden wird. Wir versuchen, Daten an die Datenbank zu senden. Also werde ich hier einen Haltepunkt in
unseren sicheren Betrieb setzen und dann versuchen wir, ein weiteres Dummy-Auto zu erstellen. Also werde ich Send sehen. Und dann springt unsere Sparoperation in Aktion. Also, wenn ich mir den Namen anschaue, mal sehen, welcher Name da ist. Lassen Sie mich einfach F 11 und dann Benutzer tun, während der Benutzer null ist, weil niemand angemeldet ist. Also gut, deshalb ist der Benutzer immer noch neu, aber das ist in Ordnung. Also, wenn ich mir die Einträge anschaue, meine
ich einfach F 11. Wenn wir also die Einträge betrachten, wir in der Lage sein zu sehen, dass wir diesen einen Eintrag hinzugefügt haben,
C, das ist ein Zustand, der hinzugefügt wird. Ordnung, Sie können versuchen, zusammenzubrechen, aber noch einmal, alles auf dieser Ebene, ist
es sehr generisch, also wird es nichts Spezifisches oder Bestimmtes zeigen, weshalb wir all diese Typisierung tun mussten, um Geh zum Blechdose. Aber ich werde nur F5 drücken. Lasst uns weitermachen. Und dann, wenn ich Ergebnisse sehe, sehen
Sie Dummy-Auto und Daten. Wir wissen, c, unser D, es kommt zurück. Also habe ich keine Bits zur Verfügung gestellt, aber die Daten kommen zurück, weil sie automatisch von unserem Code eingegeben und von unserem null aktualisiert und erstellt wurden. Weil, soweit es weg ist, Absender und alle Benutzer, die mit der Anfrage verbunden sind, die Anfrage nur skimming. Okay, das ist eine der Möglichkeiten, wie wir unsere Protokollierung und Audit-Protokollierung automatisieren, tut mir leid, mit der Einheit der Arbeitsmuster. So haben
wir zu diesem Zeitpunkt einige sehr kritische Dinge getan. Wir haben eine implementiert oder Einheiten der Arbeit Perlen. Ich habe Ihnen gezeigt, wie man es für eins in einer Tabelle macht, aber wir haben bereits festgestellt, dass diese i Arbeitseinheit wirklich wie ein Register ist. Was auch immer wir gerade für das eine getan
haben, wir können es über die anderen replizieren. Für die Arbeitseinheit muss
man hier dasselbe für Fahrzeuge tun,
für Modelle wo auch immer, obwohl man. Und wir müssen nicht zum Startup zurückkehren, weil wir uns dort bereits mit unserer Injektion befasst haben. Also, das ist in Ordnung. Wir müssen dort nicht mal etwas mehr tun. Und so ziemlich, wenn Sie es andere Controller zertrümmert haben, dann müssen Sie sie umgestalten. Andernfalls, wenn Sie sich nicht auf andere auseinandergesetzt haben, würde ich vorschlagen, dass
Sie, wenn Sie app.controller tun, einen API-Controller nur mit den Lese-,
Schreibaktionen erstellen , so dass wir wahrscheinlich tun und hart, so viel Arbeit zu tun, was Sie mit das Entity Framework und er hat nur ein paar Änderungen vorgenommen, dann ist das auch kein Problem. Also werde ich dich herausfordern, das im nächsten Video zu tun, wir werden zurückkommen und ich werde nur Notizen
mit dir vergleichen , nur um sicherzustellen, dass sie dir zeigen, was ich getan habe. Und so können Sie sich einfach ansehen, was ich hinzugefügt habe, und stellen Sie sicher, dass Sie auf dem richtigen Weg sind.
21. Umrechne bestehende Steuerungen für die Verwendung von Einheit – Vergleichbare Hinweise: Hey, Leute, willkommen zurück. Also habe ich euch letztes Mal mit einer ziemlich großen Aufgabe überlassen, aber wir sind hier, um Notizen zu vergleichen und ich werde nur auf
bestimmte Dinge hinweisen , die ich sicher bin, dass ihr bekommen habt, wenn nicht, dann kein Problem. Ich werde sie für Sie darauf hinweisen und Sie können fortfahren und die Aktivität abschließen. Also, was ich Ihnen gezeigt hatte, war eine Einrichtung der Einheiten sind für, und wir haben es nur im Kontext der Mix-Tabelle getan. Also zunächst hätten wir nur 11 Sache, Zitat unquote registriert in diesen Einheiten der Arbeitsoberfläche. Also gingen wir voran und registrierten alle anderen für Modellfahrzeug, Farbbuch, König, Kunde und andere Domain-Objekt. Jetzt können Sie die Notwendigkeit haben, einzuschließen, Sie können voran gehen und einfach diese Liste fortsetzen. Zusätzlich zu dem in der konkreten Klasse, wer müsste unsere privaten entsprechenden Felder für diese machen. So machen, wir fügen mic, Boa für Modelle treffen, Farben, Buchungen, et cetera. Und dann mussten wir natürlich irgendwie die Initialisierung der öffentlichen Objekte durchführen, oder? So eine Art Raum, der uneingeschränkt zu übernehmen ist, damit Sie sie alle leichter sehen
können, oder? So wie wir es gemacht haben, buchstäblich habe ich einfach kopiert und eingefügt und dann einfach das Mikrofon in Modell und den entsprechenden Text
geändert. Das ist wirklich alles, was getan werden musste und ist stark getippt. Wenn du also einen Fehler gemacht hättest, würdest du eine rote Linie sehen. Das haben wir also für die konkrete Arbeitseinheit getan. Nun, nachdem ich all das getan hatte, ging
ich voran und baute alle anderen Controller aus. So sehen Sie auf den Steuerelementen sehen Sie Buchungen, Farben, Kunden, Modelle und Fahrzeuge, die wir erstellt mischen zusammen. Und um ehrlich zu sein,
alles, was ich getan habe, war,
den größten Teil des Codes vom Mix-Controller zu kopieren und dann zu
Modellen zu gehen und dann zu steuern F, wo ich nach etwas in diesem aktuellen Dokument suchte das sagte Mick und ich änderte es in C-Modell oder gut, Ken Pienta und Modell. Okay, und das ist alles, was ich getan habe. Und dann ersetzen, denn was passiert ist, dass wir die Arbeitseinheit bereits haben. Wenn es sagte, holen Sie mich x, dann nach dem Tun würde ersetzen wissen,
sagen, bekommen Modelle, wenn Sie gesagt haben, macht hier wird jetzt Modelle zu sehen. Alles ändert nur diese AS sogar die Variablen. Jetzt, wenn Kapital m ist, der wenig Folgen des großen Schemas der Dinge angeboten wird. Also zeige ich Ihnen nur, dass, wissen Sie, wenn Sie sich durchgearbeitet haben, sie die Kopie nicht gemacht haben und basieren und so weiter, das ist in Ordnung. Vielleicht wolltest du es tun, um ihre Erfahrung zu sammeln, und das ist gut. Kein Problem. Wir fangen dort an. Ich teile nur mit Ihnen Hawaii eine Art beschleunigtes Verfahren. Wenn ich also bin, bist du noch nicht fertig mit der Operation und du findest sie mühsam, dann ist das ein Hinweis. Um Ihnen dabei zu helfen, das schneller zu tragen. bei der Wurzel daran, dass wir keinen API-Schrägstrich verwenden. Sonya hat sie abgekratzt, Sie würden API-Schrägstrich Controller bekommen. Also ging ich durch und sorgte dafür, dass ich den API-Slash Alltop aufrufen musste, alle von ihnen. Also sagen sie auch nur Controller. Ordnung? Und das ist so ziemlich es für unsere Ruhe-API. Es gibt nicht viel, was wir tun müssen, sondern viel mehr, was wir hier tun müssen. An dieser Stelle ist es gut vorbereitet und bereit, unsere Web-Assembly-Client-Anwendung zu bedienen. Und so werden
wir im nächsten Video einfach unseren Checkpoint treffen, wo wir voran gehen und unseren Code einchecken.
22. Überprüfen und Hinzufügen von Änderungen in GitHub: Seid ihr alle? Wir sind zum Ende dieses Abschnitts gekommen, wo wir unsere Zeit damit verbringen unsere Rest-API für unsere Client-Anwendung zu
bereiten. Was wir getan haben, war, um sicherzustellen, dass wir getestet oder Endpunkte. Wir haben Endpunkte erstellt, die direkt mit der Datenbank gesprochen haben, und wir sahen, dass es funktioniert. Aber dann hatten wir eine Diskussion darüber, warum es gut ist,
andere Muster auf dem Gerüst zu implementieren , was für uns aus dem Kasten gerüst ist. Und aus diesem Grund war der Grund dafür wirklich die Wartbarkeit und bestimmte Arten von Automatisierung, die wir in Zukunft setzen können. Die Waffe der Wahl war also die Arbeitseinheit auf dem generischen Repository-Muster,
wo wir das generische Repository implementiert haben, um,
wie das Wort schon sagt, dieses generische Repository zu sein . Also wir, wir geben es nicht stark zu einer Klasse,
aber jeder Klassentyp, der sein Fasten ist, haben
wir diese Operationen, die entsprechend durchgeführt werden können. Und dann haben wir die Arbeitseinheit, in der wir die verschiedenen Implementierungen registriert haben, sind die starken und
die typisierten Implementierungen dieses generischen Repositorys. Und das erlaubt uns, sie nach Belieben anzurufen. Wir haben auch auf Customizing onreceive Methode, wo wir gehen und injizieren unsere HTTP-Kontexte, so dass wir den Benutzer, der eine Operation durchführt zu bekommen. Und dann gehen wir methodisch durch alle Aufzeichnungen,
ein Boot, das gesiebt werden soll, und überprüfen, welches modifiziert wird, welches hinzugefügt wird, und setzen diese Prüfwerte entsprechend alle vor dem Schnabel speichern. Nachdem wir uns das alles angesehen
haben, haben wir darauf geachtet, es in unserer Startdatei zu registrieren, damit es in andere Teile der Anwendung injiziert werden kann. Und insbesondere schauen wir uns unsere Controller an, bei denen wir den, den wir abgenutzt haben,
umgestaltet haben, um dann die Arbeitseinheit
zu verwenden, anstatt direkt mit dem Anwendungs-DB-Kontext zu sprechen. Nach diesem Beispiel werden wir Gerüst erstellt Controller für jeden anderen Datenzugriffspunkt, den wir möglicherweise in Zukunft haben. Das ist der Standard, den wir verwenden werden, wenn wir diese Anwendung erweitern müssen. Also an diesem Punkt wir nur voran gehen und alle unsere Änderungen überprüfen, damit
ich Änderungen aufbringen kann, die einige es hier nicht sehen. Was ich tun werde, ist nur zu Ansicht gehen und sie sind gute Veränderungen. Also von hier schreibe ich meine Rakete und es ist eine einfache Nachrichten-Editoren, API-Endpunkte und die Einheit des Arbeitsmusters. Und dann gehen Sie weiter und übergeben Sie alle und synchronisieren Sie. Und an diesem Punkt haben wir unsere aktualisierten Code-Bits. So sehen wir uns in der nächsten Lektion.
23. Section – Arbeiten mit Blazor und Daten: Hey, Leute, Willkommen zurück. Ich wollte Ihnen nur einen kurzen Überblick darüber geben, was wir in diesem Abschnitt tun werden. Also habe ich die Fetch-Datenkomponenten geöffnet, die als Teil der einigen Anwendung von der Erstellung dieser Blazer-Projekte
gekommen wären . Also wollte ich nur auf ein paar Dinge hinweisen und uns einen
Überblick darüber geben , was wir in diesem gesamten Abschnitt behandeln werden, wo wir über Blazer sprechen
werden, um
mit unserer API zu kommunizieren und die Daten entsprechend zu manipulieren. Also diese holen Daten-Arrays oder Komponente eins, stellt eine Komponente ähnlich dem, was wir erstellen werden. Wir haben schon irgendwie durchgemacht, wie wir eine Komponente oder
eine Versickerung und unsere gemeinsamen und all diese Dinge erstellen . So haben wir eine grundlegende Vorstellung von ganzen Komponenten Erstellungsziele. Aber worauf wir uns wahrscheinlich nicht konzentrierten, war, was in Fichte-Daten passierte, wo wir autorisieren. Sie haben also gesehen, dass wir uns anmelden müssen, wenn
wir versuchen, Daten zu holen , um fortzufahren. Das ist einer. Nun, dann bemerken Sie, dass wir auch dieses neue Bit Code namens HTTP-Client injizieren. Wissen Sie, dass dieser HTTP-Client nur eine Bibliothek darstellt. Und die Art und Weise, wie Sie die Konfigurationen für
diesen HTTP-Client hier in unserer program.cs gesehen hätten. Und es ist so konfiguriert, dass das Serverprojekt,
die Server-API als Adresse, betrachtet wird. In Ordnung, also mit anderen Worten, es wird automatisch auf die API schauen. So ist der HTTP-Client konfiguriert, um die API zu betrachten, die uns über das Server-Projekt gegeben wird. Und dann ermöglicht es uns, einige der Funktionen zu nutzen ,
die es uns ermöglichen, mit der restlichen API zu interagieren. Also werde ich nur zum letzteren Teil
des Codes überspringen , wo es tut, ist,
dass es eine Liste von Daten initialisiert , die Spitzen nehmen sollen. Und dann, wenn es initialisiert wird, wird
es versuchen, über unser HTTP-Client-Objekt abzurufen. Und dann hat es integrierte Funktionen für alle Verben, die wir in der API durchgemacht haben. Sie bekommen den Posten, den Putt, all die, die wir uns ansehen würden. Und dann war es C erkennen, dass JSON-Daten, die wir von Postboten aus unseren Tests gesehen haben. Sie werden irgendwie die Daten serialisieren, die sie zurück in die übereinstimmende Klasse erhalten. Bisher werden alle Feldnamen so viel es tatsächlich füllen wird die, diese Klasse und es wird nur all
das in Form dieser Objekte abrufen und sie in Prognosen speichern, die wir nur eine Sammlung der Daten sehen, die aus der API-Aufruf. Nun, was hier in der Zeichenfolge ist, wäre die Adresse, dass es
eine Wettervorhersage hier verursacht , entspricht dem Wetterprognose Controller in der API. Also unser HTTP-Grant bedeutet, dass GET-Anfragen und wir sehen, wir sehen unser Verb, HTTP GET, das wirklich nur einige zufällige Sachen in Form eines Arrays zurückgibt. In Ordnung, also ist das wirklich eine Zusammenfassung von Ganzen. Wir werden die Blazer-Komponenten tatsächlich mit der restlichen API sprechen lassen. Man kann sehen, dass es wirklich nicht so schwierig ist. Wenn wir zurückkommen, werden
wir beginnen, indem wir eine Listenkomponente erstellen, in der wir alle Daten in der Datenbank auf einem Blazer pH
auflisten und den Daten angezeigt werden können . Und dann schauen wir uns all die anderen Rohoperationen an.
24. Blazor – Liste: Hey Leute, willkommen zurück. Nach unserem schnellen Überblick über diesen Abschnitt werden
wir direkt darauf hineinspringen und wir werden uns ansehen, wie wir eine Komponente
erstellen können , die die Daten aus unserer Datenbank auflisten. Es ist also immer eine gute Idee,
Ihre Dateien in Ordnern zu organisieren , wie wir es bis auf die Nase getan haben. Also werde ich beginnen mit der Seite ist Teile
des Autos und Management-Punkt-Client-Projekt. Und ich werde einen Ordner erstellen, den ich mit Mikrofonen anfangen werde. Natürlich möchten Sie die Möglichkeit haben, alle Dateien pro Tabelle in Ihrer Datenbank mit einigen Ausnahmen zu sehen , oder? Aber der Punkt ist, dass wir Buchungen haben, wir haben Farben, wir haben Kunden von Mix, wir haben Modelle, wir haben Fahrzeuge. Das bedeutet, dass wir für alle groben Operationen, die
wir ausführen werden, sie über jeden dieser Datentypen ausführen wollen. Also möchte ich alle verwandten Komponenten pro Tabelle oder pro Satz von Operationen in einen Ordner zusammenfassen. Also, wenn ich einen Mix-Ordner habe, dann werde ich einen Modellordner haben und so weiter. Also werde ich einfach weitermachen und den ganzen Ordner erstellen. In Ordnung, das ist also die Art von Organisation, die ich aufrechterhalten werde. Wissen Sie für diesen Abschnitt, ich werde zwei Beispiele zu tun. Wir werden ein Beispiel mit dem Mix machen, was einfach genug ist, weil Sie wissen, es hat wirklich nur ein paar Felder. Und dann machen wir eins mit vielleicht etwas komplizierterem wie Fahrzeugen, die verwandte Entitäten haben, richtig? Also ging ich, um die beiden zu machen. Und dann, weißt du, unser Muster ist, dass ich dir das Konzept zeige und dann du es selbst ausprobierst, und dann kommen wir zurück und vergleichen Notizen. Also lasst uns direkt hineingehen. Also in dieser Lektion, noch einmal, wir schauen auf Flur gehen, um Daten abzurufen und in einer Liste oder in
einer Tabellenform für unsere tabellarischen Form für unsere Benutzer anzuzeigen . So beginnen wir mit der Erstellung unserer neuen Komponenten. Also beginne ich mit Mix, ich werde eine neue Rasierkomponente erstellen. Dann werde ich diese Komponenten nennen, wie ich denke, der pH-Wert sollte genannt werden. Also wollte ich es Index nennen. In Ordnung. Es ist immer, eigentlich, ich werde sagen, es ist empfehlenswert zu denken, dass es tatsächlich erforderlich ist. Aber ich bin, wenn es nicht erforderlich ist, die Lambdas empfehlen, dass wir immer oder Komponenten mit Großbuchstaben benennen. Alles klar, also Index wie Epithel, ich gehe voran und drücke OK. Und jetzt haben wir unsere Komponente. Wir haben Komponenten schon einmal gesehen. Wir haben es uns bereits angesehen, als wir unsere Beispielkomponente früher gemacht haben. Das ist also nichts Neues für uns. Allerdings werden wir versuchen, sicherzustellen, dass unsere Wurzel gibt es jemanden, der auf der Zeichenseite öffnen und Anführungszeichen schließen? Und das hier, ich werde nur Schrägmischung sehen,
was bedeutet, dass jeder, der stößt und sagt, Schrägstrich Mix sollte in der Lage sein, diese Komponente zu treffen. Und alles, was ich sicherstellen werde, ist, unseren HTTP-Client zu injizieren. also zurückgehen, um Daten zu holen, sehen
Sie, dass der HTTP-Client in das Loch,
in das, in die Komponente injiziert wird, damit sie mit der API sprechen können. Also brauchen wir das definitiv. Wir können auch versuchen, einige von ihnen zu injizieren, aber die setzen diese mit Aussagen als würden wir definitiv Zugriff auf die geschoren benötigen. Und sie werden sexuell bedeuten, und was zeigen wir Ihnen nicht nur, wie man
das auf sauberere, globalere Art und Weise macht . Wir müssen das also nicht jedes Mal tun, wenn wir es in jeder Komponente brauchen. Also werde ich mit der Injektion beginnen. Und ich nenne meine Unterstrich-Klienten, das ist meine Namenskonvention, aber du weißt, du kannst es nennen, was auch immer du dich wohler fühlst, wenn du es benennst. Ich wollte diesen h3-Titel in Klassenkartentitel ändern. Und ich werde den Text ändern, um „Make list art“ zu sagen, oder, du weißt schon, wahrscheinlich eine Liste von Mix. Unser Auto macht etwas, dass der Benutzer es tut mir leid, ich bin nur eingeladen über diese winzigen Dinge. Und ich meine, wir können an bestimmten Designelementen arbeiten. Sie könnten alle Ideen im Kopf haben, aber ich bin nur in diesen Elementen schön, dass die horizontale Regel und dann ein Breakpoint, unser Break-Tag, sorry, um den Titel an der Spitze vom Rest des Inhalts zu trennen. Wissen, worauf ich mich konzentrieren werde, ist das, was wir in den Code setzen. Also werde ich in dieser Gerichtsabteilung anfangen. Was wir tun müssen, ist im Voraus zu sehen, dass wir ein pH-Modell haben, um welchen Datentyp es sich handelt. Also werde ich sagen, privat. Und da ich es mit Mikrofonen zu tun habe und ich weder eine Liste von Mix bin, werde
ich die Liste des Typ-Mikrofons initialisieren, richtig? Beachten Sie, dass Mikrofon nicht kosmisch mischen ist der Datentyp der Tabelle, mit der wir es zu tun haben, oder? So sanftmütig. Und dann werde ich nur das Objektmodell nennen. Man könnte es machen nennen, man könnte es nennen, wie ich es gerne nenne, denn das ist das Modell für den Peach. Jetzt werde ich einen Pfeil geben, weil
ich noch einmal in den using-Anweisungen sitzen muss, damit es weiß, woher es darauf verweisen kann. Anstatt es so zu tun, wie ich gerade darauf hingewiesen habe, tun
Fitch-Daten es dort, wo es
die using-Anweisung direkt innerhalb der Komponente macht . Was ich tun werde, ist auf Importe zu gehen. Und dann kann ich von hier aus eine Art globaler Aussagen setzen, richtig? So kann ich unter hier mit aktuellem Management docked, geschert dot Domain sehen. Und dann wird
jede Komponente, die
etwas von der Domäne benötigt , das wissen, während sie bereits im Import ist. Also muss ich nicht hierher kommen und es wieder sehen. Also habe ich es einmal getan. Ich mache es nur auf dieser Komponente, aber in Zukunft werden Sie feststellen, dass Sie diesen Teil nicht noch einmal machen müssen. In Ordnung, jetzt, wo wir unser Modell definiert haben, wollen wir unser geschütztes Spüle außer Kraft setzen, Aufgabe außer Kraft setzen. Und diese Aufgabe, die ein Vielfaches ist, aber keine Sorge, wird nicht initialisiert async genannt. Das ist also eine integrierte Methode, die jede Komponente nicht initialisiert asynchron hat. Was soll ich tun, wenn ich initialisiert werde? Das ist so ziemlich es. Beachten Sie, dass es eine Überschreibung ist. Also die Basisklasse, auf der jede Komponente basiert, genau da ist sie. Komponente b ist. Entschuldigung, Aufgabenkomponente basierend auf initialisiertem asynchronen. Also überschreiben wir den Standardwert und wir werden sagen, was wir tun wollen, wenn diese Komponente initialisiert wird. Was ich tun wollte, möchte ich die Datenspeicherung und die Modelle bekommen. Also werde ich sagen, ein Modell ist gleich und dann kann ich,
ich warte, mein Klient einen Anruf tätigen. Also der Client, der HTTP-Client hat die Methode integriert. Also kann ich sagen, von JSON eine Spüle zu bekommen. Alles klar, es ist, es wird automatisch gehen und deserialisieren, was immer es bekommt. Also, was wird es bekommen? Gehen Sie raus, um anzugeben, welche Art von Wert ich erwarte. Also wollte ich sagen, nun, ich erwarte, eine Liste von Typ Mikrofon zu bekommen. Alles klar, dann wird das sagen, okay, du willst das Mikrofon auflisten, wo willst du es von soft in die Adresse des Ortes setzen, von dem ich erwartet habe. Und sie Adresse wäre der Endpunkt. Also denken Sie daran, dass, wenn wir uns die program.cs angeschaut haben, es bereits den HTTP-Client angesiedelt hat, um die Basisadresse unserer Anwendung zu betrachten, oder? Basisadresse, was bedeutet, was ist die Adresse? Beachten Sie also, dass der Server und der Client
beide die gleiche Adresse teilen, nur für den Fall, dass Sie Rasen
settings.js auf dem lokalen Host für 4385 vergessen haben . Und wenn wir dasselbe für den Server tun, ist
es die gleiche Adresse. Also die Basisadresse, es weiß, wo die API ist. Wir müssen jedoch sagen, welche Endpunkt-Offset-API. Und dann basierend auf unserer Benennung hier, was meiner Meinung nach zu einem Konflikt führen wird. Also werden wir uns wahrscheinlich ändern müssen, aber lasst uns einfach den Fehler sehen und ihn danach nicht beheben. Aber wir haben gesagt, dass Endpunkt die Namen der Controller sein sollte, was in diesem Fall bedeutet, ist, wo ich gehen will. Wo sind sie getestet API und haben sich all diese Endpunkte angesehen. Also werde ich sehen, gehen Sie zum Endpunkt macht. Diese Komponente, sobald sie initialisiert
ist, wird diesen API-Aufruf an diese Adresse durchführen und die Liste abrufen. Und wir wissen, dass es in JSON zurückgeht. Diese Funktion oder diese Methode wird also
automatisch die JSON-Daten in eine Liste von mir rekonstruieren, stark typisiert, sorry, so dass wir sie verwenden und alles manipulieren können, was wir wollen. Ordnung, also kümmert sich das so ziemlich um diese API, wird mir die Liste der Marken in der Datenbank geben und sie hier innerhalb dieses Objekts namens Modell
gespeichert. Also nein, wie zeigen Sie das alles an, richtig? Ich werde zuerst sehen, ob Outside-in-Modell sind,
sorry, ich brauche nicht, dass mein Hintern gerettet. Also, wenn das Modell gleich null ist, dann möchte ich etwas anzeigen, das Laden sieht oder es wird in ein div eingefügt. Und ich werde es geben, dass die Klasse geht,
denken Sie daran, dass wir Bootstrap verwenden, also alarmieren und warnen Sie mich, vollständig zu sein. Alarmierung in voller Höhe. Ich glaube, ich habe es bestanden. Da gehen wir. Und dann werde ich sagen, dass das Laden eine Mischung macht. Das ist blau, was auch immer Ladenachricht Sie wollen. Der Punkt ist also, dass wir immer leer anfangen werden. Dies wird null sein, weil dies bedeutet, dass es null ist. Aber dann, wenn dies abgeschlossen ist, dann wollen wir eine Tabelle anzeigen. Das wird also sein. Wird angezeigt, während all dies geschieht, lange es dauert, bis zur API zu gehen, dies wird angezeigt. Dann die coole Sache über Blazer, die die Daten ändern wollen. Es sendet eine Nachricht zurück an die Benutzeroberfläche, um zu sagen,
Hey, Sie wissen, was sich die Daten geändert haben. Also der bloße Gedanke, das ist wieder diese, wissen Sie, es überwacht, wenn sich diese Daten ändern, ich kann sehen, ob es null ist, tun Sie das. Und dann, wenn es sich ändert, wird
es immer neu bewerten, ist es das Normale. Nein, ist es nicht. Okay, was soll ich hier tun? Richtig? Es ist also fast wie eine while-Schleife ohne die Schleife, es ist so cool. Alles klar, was wir also tun werden, ist C, vielleicht einen Tisch
wollen. Und dann verwende ich Bootstrap-Klassen für meinen Tisch. Also werde ich dies so einstellen, dass Tisch und Tisch reagieren. Und wenn Sie nicht so vertraut mit Bootstrap sind, können
wir uns die anderen ansehen, die Sie wahrscheinlich einschließen wollen, aber ich wollte den Tisch ansprechen und vielleicht SM Nun,
nein, lassen Sie mich Ihnen einfach geben, dass Tabelle und Händler reagieren. Und dann definieren halten diese Tabelle sollte aussehen, so dass wir unseren T-Kopf haben, einen TR hat, dann
das th hat, ist ich werde th für Namen wie in MC haben,
Name, nur auf der Suche nach Backup-Mikrofon, machen wirklich oder Layer-Namen und ID basierend auf dem basierten Domain-Modell und erstellt von einer slowenischen Anzahl von Details, die Sie einschließen wollen,
gerade jetzt durchzugehen , brauche ich nur den Namen und ich werde eine andere Spalte namens Auktionen haben, die Host wird, wissen Sie, Buttons bearbeiten, Anleihen löschen, et cetera. Dann, nachdem ich den Kopf definiert
habe, werde ich den TI-Körper anziehen. Und dann im Team Körper ist, wo wir den Spaß Teil wo wir durch unsere Daten schleifen müssen, zurückkommen, wissen Sie, Modell, das wir wissen, ist vom Typ, Liste aus Mix, richtig? Also werde ich für jedes Element im Modell sagen, ich möchte eine neue Rolle, TR, wobei die erste Zelle nach Hause spielt, um item.name. Okay, du siehst also, dass ich alle Objekte aufgebe, weil Handy vom Typ ist, mach. Jedes Element stellt den Hersteller es dar. Und dann wollte ich noch ein T d haben, sorry, in der gleichen Regel, die dann alle meine Tasten speichern wird. Jetzt möchte ich, dass meine Knöpfe aussehen. Ich will Anker-Tags. Ich habe zwei Anker-Tags an, ich habe eine Schaltfläche, damit Sie pausieren können, einen Blick darauf werfen, was dieser Code ist, und dann fortfahren können. Alles klar, also hat mein erstes Anker-Tag den HRF, um Schrägstrich zu mischen, richtig? Also werden wir all diese einrichten,
aber das würde bedeuten, dass ich mir die Details dieses Datensatzes ansehen möchte. Also erstelle ich die Ansichtsschaltfläche und übergebe ich in die Element-ID. Das bedeutet, dass ich vielleicht bearbeiten möchte. Also übergebe ich den Ausweis. Dies ist das Löschen, aber beachten Sie, dass es kein Anker-Tag ist, es ist eine Schaltfläche. Sie verwenden alle die gleichen Bootstrap-Klassen. Shore sind nur Variationen basierend auf Betrieb. Aber dann hat die Schaltfläche ein onclick-Ereignis. Wenn Sie also jemals mit Windparks oder sogar Webforen gearbeitet haben, wären
Sie gewohnt, auf Events zu klicken. Das ist also wie ein kleines Klick-Ereignis, bei dem es sehen wird, dass ich diese Funktion namens delete und PaaS in der make dot ID aufrufen
möchte. In Ordnung, tut mir leid, ich habe ihn geschlagen. Ordnung. Na gut, ich hatte ein Mikro. Der Punkt ist, dass Sie das wahrscheinlich tun wollen, weil, wissen
Sie, wenn Sie Modell sehen, wenn ich Mod 2 sehe, sie hatten 10 oder 12 das. Also lasst es uns einfach ein bisschen leserfreundlicher machen, oder? Das ist also eine Liste von Mix. Alle Mikrofone kommen rein und machen das. Und dann überall, wo ich sagte, mod lambda wird mich x statt sehen. Alles klar, und dann, anstatt Artikel zu sehen, weil Sie wissen,
der Code, wenn es ein großer Vorsprung ist, der schwieriger sein kann, für jemand anderes zu lesen, der ansieht. Also lassen Sie es uns einfach so leserfreundlich wie möglich machen. So ändern Sie alle vage oder zum Beispiel, das Element auf Modell, um etwas mehr wie mich zu sagen. In Ordnung, also machen Sie Punkt-ID und dann haben wir unsere Delete-Methodenreferenz hier, aber es gibt keine Löschmethode zum Aufrufen. Was ich möchte, ist, dass, wenn die Person auf Löschen klickt, wenn der Benutzer auf Löschen klickt, wir ihnen nur eine schnelle Aufforderung geben. du sicher, dass du löschen willst und wenn sie ja sagen, dann gehen wir weiter und haben nicht gegessen, oder? Also brauche ich hier ein Methadon, das ich als asynchrone Aufgabe definieren werde. Und es wird löschen oder sein, und ich werde es einen Parameter int ID nehmen lassen. Alles klar, jetzt, was wollen wir diese Löschmethode sagen, so dass verschwindet, weil ich eine Methode aufrufe. Es hat es nur noch nicht gesehen. Wissen Sie, dass es da ist. Damit ist es in Ordnung. Richtig. Und das machte es zu einer Spüle. Du siehst, warum in einer Minute. Und beachten Sie, dass ich keinen Zugriffsmodifikator brauche, da er privat sein könnte. Es ergibt keinen Sinn. Du machst es öffentlich. Aber ohne Privat zu sehen, bedeutet
dies, dass dies privat ist. Also brauchten Sie diesen Teil nicht. Also wollte ich das Mikrofon aufsuchen. Ich werde sagen, var MC ist gleich der und ich habe bereits die geringste Off-Mix. Also hier ist eine coole Sache. Ich kenne die Mischung bereits. Da sind die Anhörung, die Komponente. Ich muss nicht gehen und eine Modell-API aufruft um den Mythos abzurufen, der gelöscht werden muss. So kann ich einfach in die Liste schauen, die bereits haben und sagen, geben Sie mir die erste, die sie für einen Laden sitzen wollen, für ein Geschäft Standardwerte. Ich mache es nur zuerst und ich sehe meinen Lambda-Ausdruck. Versuchen wir es nochmal. Erstens, wobei Q dot ID entspricht der mic ID, die
gerade den Parameter durchbrochen hat, der von unserem Button
Click-Ereignis gegen diesen bestimmten Datensatz in dieser gesamten Tabelle kam . So sehen Sie, dass alles einfach schön widersprochen wird. Also dann werde ich sagen, wenn ich eine Bestätigung vom Benutzer erhalten möchte, also lass es uns einfach zuerst tun, ohne eine Bestätigung, Schauen wir uns einen Code ohne Bestätigung an. Nachdem ich dies getan
habe, kann ich sagen, warten Sie auf einen Client-Aufruf, um eine Senke zu löschen. hat er gesagt. Für jedes Verb hat
der HTTP-Client also eine Methode. Ordnung? Und dann werde ich meinen Mix anrufen. Also möchte ich Mix-Schrägstrich aufrufen,
denken Sie daran, dass das der Name des Endpunkts ist. Richtig? Macht Schrägstrich und macht für das Löschen nahm einen Parameter. Also gehen wir einfach zurück und schauen. Also haben wir einen Parameter für unser Löschen genommen, so dass es in Mix Schrägstrich Fiverr übergeben muss. Also werde ich sagen, macht Schrägstrich und dann die Meek-ID einzufügen, die übergeben wurde. Und dann geht es, um die initialisierte asynchrone Methode zurückzurufen. Und weil wir unsere Gewichte verwenden, Deshalb haben wir diese Methode asynchrone Kunst gemacht. Also im Grunde löschen wir und dann wird es die Seite aktualisieren. Jetzt habe ich gesagt, ich wollte den Benutzer auffordern, weil Sie nicht möchten, dass der Benutzer gelöscht werden soll. Und ich habe mich gerade aktualisiert und sie sind wie:
Nun, was habe ich angeklickt? Also alles, was wir tun werden, ist wahrscheinlich eine kleine Aufforderung zu geben. Und Sie wissen, wie in JavaScript können Sie immer wie Alarm sehen, so etwas. Das werden wir tun. Wir werden in eine Warnmeldung oder JavaScript-Eingabeaufforderung setzen. Um mit JavaScript durch Blazer zu unterbrechen,
müssen wir eine andere Bibliothek namens IGS Runtime oder JS Interrupt injizieren. Das ist die Technologie oder die Bibliothek hinter dieser JS Runtime. Mit diesem Objekt können
wir mit etwas JavaScript-Code bei der Verwendung von C-Sharp interagieren. Es ist nur, ich habe einen schönen hybriden Weg, um nicht hart die Knochen sind anfällig viele Sprachen zu erreichen, mit allen von ihnen zu erreichen, oder? Also werde ich sagen, ob, und wir werden oft, ich werde warten, JS Dot ruft eine Spüle, richtig? Und ich erwarte einen Boolean, also werde ich ihm sagen, dass Sie nach diesem Aufruf einen Boolean erwarten. Und innerhalb dieser Methode tut Methoden. Also nach den Winkelklammern mit bool, öffnen und schließen
wir einfach Klammern. Ich habe den ersten Parameter, der sieht, welche Art von Methode von JavaScript es nennen soll. So ziemlich, welche Parameter für SCID-Methoden benötigt werden. Also bestätigen Sie, das ist die Methode, die aufgerufen wurde. Und dann übergebe ich den Text, willst du löschen und, ähm, diese super oder interpolierenden Mikrofonpunktnamen dort drin? In Ordnung. Das ist also eine if-Anweisung. Also, wenn ja oder nein, so bestätigen Sie, dass es ja oder nein sein wird, also wartet es auf die Antwort und es speichert sie dort. Also all dieser Sauerstoff, so dass ein Hybrid, jede Aussage, einfach in einer Zeile schreiben. Wenn Sie es trennen wollten, könnten
Sie sagen, var Entscheidung oder var bestätigen ist gleich, lassen Sie mich einfach sagen, dass in dort von NOW gleich diesem Gen ist beteiligt, so dass Sie wissen, Sie können irgendwie Pseudo-Code ein bisschen mehr, Richtig? Und dann, wenn wir bestätigen, dann rufen wir an, okay, das ist
so ziemlich das, was nicht. Und das ist ein einfaches, sehr einfaches Beispiel für alle js-Interrupt-Läufe. Später werden wir uns
fortgeschrittenere und wahrscheinlich schönere Möglichkeiten ansehen , dies zu erledigen. Aber für null, haben wir ziemlich viel getan. Lasst uns gehen und testen. Ich denke, wir hatten bereits eine Mischung in unsere Datenbank gesetzt, wenn ich mich nicht irre, richtig, also sollten wir zumindest ein paar Mix zu sehen haben. Mal sehen, wie das funktioniert. Also habe ich es gerade geladen und mir ist klar, dass ich keinen sofortigen Weg habe, dorthin zu gelangen. Also lasst uns Bit aufschlagen und sicherstellen, dass wir unsere Navigationsleiste aktualisieren. Überspringen Sie den Schritt. Also, was ich tun werde, ist,
diese Beispielseite loszuwerden und sogar die Abrufdaten brauchten diese wirklich nicht. Was ich anfangen wollte, indem ich die Abrufdaten ändere, werde
ich sagen, Meeks, okay? Und H ref hier würde mit einem Schrägstrich gemischt werden, richtig? Also das heißt, Gehe in den Mix-Ordner Schrägstrich und dann wird uns bereits gesagt
, dass du an dieser Adresse bist , ziemlich richtig? Also das einfach neu starten. Alles klar, also keine Möglichkeit unseres Menüpunkts, wenn wir dorthin gehen, wird
es anfangen zu laden, was es einen Fehler geben wird. Dieser Fehler liegt wirklich daran,
dass wir versuchen , diesen API-Aufruf mit der richtigen Sicherheitsfreigabe sowie Luke durchzuführen. Also habe ich auf die Tatsache hingewiesen, dass wir möglicherweise ändern oder Adresse für die API müssen. Das sieht also tatsächlich Schrägstrich Mix. Was haben wir gesagt, die Komponente, die auch ein schnappen mich x ist. Also, wenn meine anfängliche oder
falsch zu schreiben , wo ich vorgeschlagen hätte, dass wir einfach durch den Controller gehen. Denn was passiert, ist, dass, wenn wir zurück
zum Controller gehen und dann unsere Ordner mit den gleichen Namen benennen, dann wird die Aufwärtsbewegung irgendwie verwirrt. Werde ich auf dem Server und dem BIA mischen oder gehe ich zu ihm in einem Client? Also für Korrekturmaßnahmen und das ist nur wieder, sind
diese Roebuck, unser Standard für die API,
api Schrägstrich Controller, richtig? Und ich möchte das auf eine einfache Art und Weise tun, wo ich nur ein finden und ersetzen werde. Also werde ich nur sagen, dass
quadratische Klammer Controller eckige Klammern finden und es durch api Schrägstrich ersetzen. Quadratische Halterung Und ich suche im aktuellen Projekt und ich werde nur eins nach dem anderen
ersetzen, um sicherzustellen, dass ich es nicht tue, also muss ich das nicht ersetzen. Aber ich muss das ersetzen. Überspringen Sie oder so andere. Ja, alles, was ersetzt werden muss, mache
ich das einfach. Und wir sollten gut sein, diese Botschaften zu verfolgen. In Ordnung, also zeige ich nur auf ein potenzielles Klassenzimmer, kein Potential in einem Knast, dem wir begegnet sind. Und wir können das Wetter verlassen, weil wir es sowieso nicht brauchen, und das war's. Also eine andere Sache, eine weitere Änderung von ihnen ging zu mir, es Lärm zu der API-Adresse, die aufgerufen wird, weil ich nur Mikrofone sagte. Also muss ich den API-Schrägstrich hier oben und den API-Schrägstrich an dieser Stelle sehen. Also lasst uns das nochmal tun. Nein, ein weiterer Punkt der Information, bevor wir fortfahren. Während wir keine Autorisierung auf unsere Ansicht auf unsere Komponenten gesetzt haben, Entschuldigung, wir haben auch keinen Autor wie auf der API gesetzt, oder? Aber wir haben es tatsächlich abgenommen. Die Sache ist jedoch, dass die Konfiguration des HTTP-Clients in der Client-Anwendung und program.cs sagt, dass es Autorisierungen benötigt, also wird es immer versuchen, die Autorisierung zu symbolisieren. Und es ist nur so konfiguriert, dass es sich um einen autorisierten Anruf handeln sollte,
was bedeutet, dass jeder, der anruft, angemeldet sein sollte. Obwohl wir den Schutz nicht auf die Seite gesetzt haben, funktioniert
es möglicherweise nicht, weil es versuchen wird, einen autorisierten Anruf durchzuführen. Alles klar, da gehen wir. Obwohl es uns das API-Zeug nicht zeigt, werden
wir das beheben, aber wir haben immer noch ein Problem. Es ist also ein einfaches Problem, unser eigenes zu bekommen, weil wir bereits einige Benutzer
haben, die wir erstellt haben. Also bin ich irgendwie langsam. Und nachdem ich mich eingeloggt
habe, werde ich es noch einmal versuchen und da gehen wir. So schnell hat dieser Anruf gemacht. Nun, ich meine, alles sitzt auf einer Maschine und seele es der Fonds, der auf API-Aufruf ausgegeben wird und zurückkam, ist für den Benutzer transparent. Also hier schauen wir uns alle unsere Karten an, sind, sorry, unsere Meeks in der Datenbank, richtig? Und dann, wenn ich löschen wollte, denn das ist die einzige andere Funktionalität des Systems bisher. Versuchen Sie es nochmal. Ich bekomme die Bestätigung. Möchten Sie Dummy-Auto löschen? Ich klicke auf OK, und dann sieh dir das an. Es ist also, als ob alles in Echtzeit passiert. Kein wirklich sichtbares Nachladen oder so etwas. Ich kann das andere Dummy-Auto löschen und wir haben unsere Daten. Also alle kosmetischen Änderungen, die Sie an dieser Stelle vornehmen möchten, können Sie vornehmen und so weiter. Aber das ist die grundlegende, sind
die grundlegenden Schritte, um die Liste zu erhalten und sie in tabellarischer Form anzuzeigen.
25. Blazor Displaydaten – Liste – Vergleichen: Hey Leute, willkommen zurück. In unserer vorherigen Lektion gingen
wir durch die Einrichtung der Benutzeroberfläche, so dass wir Daten aus der API
abrufen und unseren Benutzern anzeigen können ? Nein, ich wollte dich nur durch einige der kleinen Änderungen führen,
die ich an der Mikrofonsprache vorgenommen habe. Und dann führe ich Sie durch, wie wir das Wissen über das, was
wir gerade von der Mischkomponente als pH-Komponente gemacht haben, übertragen haben. Ich benutze sie an dieser Stelle austauschbar. Aber alle Techniken und wir werden aufzeichnen wollen, wer an Ort und Stelle
setzen, um die Mix-UI funktionieren zu lassen. Ich wollte Sie durch, wie ich hoffe, dass wir dieses Wissen übertragen oder dieses Wissen in die anderen Teile unserer Anwendung übertragen
können. Jetzt vermisst du mich einfach, Mix zu kritisieren und dann merkst du, dass es direkt auf die Login-Seite ging. Warum hat es das getan? Das erste, was ich tat, war, ein autorisiertes Tog
oder Flagler-Attribut oben auf unserer Mix-Seite hinzuzufügen , richtig. Also bringe ich es nur auf. Also sagte ich Attribute autorisiert. Denken Sie also daran, dass wir darauf hingewiesen haben, dass jedes Mal, wenn der API-Aufruf durchgeführt wird, es eine bestimmte Art von Tool haben muss, das anzeigt
, dass es sich um einen nicht autorisierten Benutzer handelt, der diesen Aufruf tätigt. Also habe ich nur, indem ich dies an die Spitze stelle, diese autorisierten Attribute oben auf der Benutzeroberfläche. Es sendet die Benutzeroberfläche, die Sie autorisiert werden müssen, um darauf zugreifen zu können. Und das ist, was in der Komponente „Getched Dates sind“ passiert ist, weshalb wir uns anmelden müssen, bevor wir zum Endtermin gelangen können. Also habe ich das einfach eingefügt, um sicherzustellen, dass wir eine Institution eines
jeden Trends vermeiden , um diese Seite zu laden und diesen Fehler zu
bekommen, wenn sie sich nur einloggen müssen. Also zwingen wir sie, sich mit diesem Attribut anzumelden. Und obwohl die Änderung, die ich hier gemacht habe, war zu schleppen, wir bildeten die Endpunkte. Also musste ich api Slash Mix setzen und dann zögern Sie nicht Api Slash Mix wieder
zu sagen, MC ID zu schrägen. Und so ziemlich das ist ein Muster in der Zeit. Wir wollen eine Adresse, wir müssen sagen, api Schrägstrich die Adresse. Was ich also tat, war, dass ich eine Endpunktdatei erstellt habe, die ich in einen Ordner namens statisch abgelegt habe. Also habe ich einen neuen Ordner im Client-Projekt erstellt, der ihn statisch nennt. Und dann habe ich C, C-Sharp-Klasse Endpunkte genannt. Diese Klasse ist also eine statische Klasse, die
nur eine Reihe von statischen Strings
eingelesenhat nur eine Reihe von statischen Strings
eingelesen , die dies privat machen könnten, aber das ist in Ordnung. Aber ich setze das Präfix, das API ist, was ich meine, es ist für alle von ihnen anwendbar. Und wenn Sie es von der API ändern, ist
es etwas anderes, dann müssen Sie nur ein Präfix einmal ändern. Aber dann
habe ich für jeden potenziellen Endpunkt eine andere statische Zeichenfolge erstellt, damit Sie pausieren können, all das noch einmal
tun und einen Ordner erstellen können. Gehen Sie vor und erstellen, sorry, es erstellt einen Ordner namens statisch erstellen die Datei namens Endpunkte sind C-Sharp Klasse eher. Und dann können
wir in dieser Klasse einfach dieses Stück Code einfügen. Und dann, nachdem Sie all das getan
haben, möchten Sie natürlich zu den Importen gehen und Ihre Client-Anwendung über diesen Namespace
wissen lassen , damit wir das Kreuz alle Komponenten bequem verwenden können. Das heißt, das sind zwei Änderungen, die ich an der Mischung vorgenommen habe. Jetzt in Bezug auf die Übertragung des Wissens oder der Techniken in Mix verwendet, und ich werde mich einfach anmelden, so dass Sie sehen können. Wenn man sich Modelle und die Lookout-Farben anschaut, sind
sie ziemlich dasselbe wie Mikrofone. Sie hatten nur eine Eigenschaft, die Name ist, oder? Also habe ich das Gleiche für Modelle gemacht, das gleiche für Farben, oder? So hatten wir den Ordner vor erstellt. Alles, was ich getan habe, war einen neuen Index zu erstellen. Und so ziemlich stellen Sie sicher, dass der Pfad, das ist Farben und alle würden sicherstellen, dass Pfad wir die gleichen Bibliotheken benötigen, das gleiche autorisieren, dass wir die gleichen H3-Karte Titelfarben verwenden. Wirklich und wirklich ist dies identischer Code, aber für die Tatsache, dass wir den verschiedenen Endpunkt verwenden. Und wahrscheinlich ist die Verbiage hier und da anders. Wieder einmal ist es Ihre Anwendung. Sie können ITO optimieren, müssen Sie. Ich zeige Ihnen nur, dass die gleichen Techniken, die für die Mischung verwendet wurden, wir sie für jeden anderen verwenden können. In Ordnung. Also in aller Fairness,
alles, was ich getan habe, war aus Mix zu kopieren, fügen Sie diese Indexdatei innerhalb von Farben und innerhalb von Modellen. Und dann machte ein Control F und fand jedes Mikrofon und ersetzte es durch das Wort Farbe. Und ich habe das für Groß- und Kleinbuchstaben getan, nur um die Bearbeitung viel einfacher zu machen. Und dann irgendwelche Fehler auf dem Weg, wir reinigen sie einfach. Das war es wirklich nein, ich bin fortgeschrittener Situation würde in Form von Fahrzeugen kommen. So Kunden ist nicht sehr anders. Ich meine, du weißt, dass wir nicht viel für Kunden hatten. Ich meine, wir hätten ein bisschen mehr Daten einfügen können, vielleicht für Dan einfach den ID-Kontakt auf E-Mail-Adresse versteckt, vielleicht Vorname, Nachname. Aber das ist in Ordnung. können wir später tun, wenn die Notwendigkeit entsteht. Aber wieder einmal, es war genauso einfach wie für den vorgefertigten Swan, unsere vorherigen, außer Sie müssen sich der Säulen bewusst sein, die Sie einfügen. Und der Vater, du brauchst diese zusätzlichen Säulen und alles andere ist ziemlich gleich. Und ich hatte nur eine geringfügige Anpassung. Also natürlich werden Sie sehr vorsichtig und
akribisch sein wollen , wenn Sie kopieren und einfügen, weil sehen, ich wurde schlampig mit meinen. Aber es ist gut für dich zu sehen, was schief gehen kann. Also stelle ich nur sicher, dass alles, was MIX Nein sagte, Kunden und denken, dass sanftmütig und auch seinen Kunden sagte, oder? Und im Grunde ist alles andere versteckt und an Ort und Stelle. Damit wir vorankommen können. 1 obwohl mit dem authorize-Attribut, wird
es Ihnen sagen, dass Sie eine Bibliothek benötigen. Ich habe vergessen, das zu erwähnen. Und Sie können sich auch um diese Anforderung kümmern, indem Sie diese beiden Zeilen zu Ihren Importen hinzufügen. Also egal wo Sie den Autor als verwenden, sollten
Sie in Ordnung sein. In Ordnung, also können Sie voran gehen und das tun, wie Sie in die Autorisierung setzen, wissen Sie für die fortgeschritteneren Situationen, wie wo wir verwandte Felder haben. Also im Falle von Fahrzeugen und im Falle von Buchungen. In Ordnung. Also schauen wir uns Buchungen an. Schauen wir uns Fahrzeuge für uns an. Ich denke, Fahrzeuge, ich mache weniger komplizierte Dinge. Also in Fahrzeugen, richtig. Wir wissen, dass wir oder Seite oder Injektion des Kunden auf ihre eigene Zeit und autorisieren. Fahrzeuge, wenn sie nicht null sind, dann laden wir den Tisch. Jetzt in der Tabelle habe ich Modell und ich könnte, wissen Sie, Farbe haben. Also lassen Sie uns Farbe hinzufügen. Eigentlich wäre dies,
nun, lassen Sie uns keine Farbe hinzufügen, nein, aber wir hätten Farbe des Punktes haben können, ist, dass wir Felder haben die wir anzeigen müssen, die verwandte Felder sind, die aus einer anderen Tabelle kommen. Also Fahrzeug hat natürlich ID gemacht, aber ich möchte die Make-ID nicht anzeigen. Das bedeutet niemandem etwas. Beachten Sie, dass ich keine der IDs anzeige. Ich zeige nur die Namen und irrelevante Daten an, also muss ich sagen, was der Make-Punktname ist und der Modellpunktname. So einfach ist es also wirklich, Felder in der verwandten Tabelle zu referenzieren, richtig? Also drucken wir nur, aber diese Felder und alles andere bleibt ziemlich im Smoking wie, Oh, wir wissen es, es ist die gleiche Schleife, es ist die gleiche Tabelle CAM weit. Es ist die gleiche Art von Service-Aufruf auf initialisiert und alles. Aber wir mussten eine Anpassung an die Daten tatsächlich kommt zurück, wenn wir für die Fahrzeuge aufrufen. Also gehe ich rüber zur API, wenn ich den Endpunkt der Fahrzeuge heraufbringe und zu dem Teil gehe, wo wir die Fahrzeuge bekommen. Dann wirst du bemerken, dass ich ein paar Anpassungen an unserer Einheit vorgenommen habe oder vier Anrufe. In Ordnung. Also beide vergessen Fahrzeuge und bekommen Fahrzeug durch Idee nur sie die gleiche Zeit, weil die Notwendigkeit ähnlich ist. Was wir tun müssen, ist,
den Includemechanismus zu nutzen , den wir in die Arbeitseinheiten gesetzt hatten. Also denken Sie daran, und ich werde nur Control F 12 tun, was mich zur Implementierung von get all bringt. Denken Sie daran, dass wir diesen Parameter für eine potenzielle Liste von Includes aufgenommen hatten. Und was wir taten, war zu sagen, dass, wenn die Includes NICHT null ist, wir gehen voran und schließen alle damit verbundenen Daten ein. Alles klar, hier ist ein praktisches Beispiel dafür, wie das verwendet wird. Was ich hier in diesem API-Aufruf mache, ist zu sagen, dass, wenn ich einen Anruf tätige, wenn jemand einen Anruf macht, um Fahrzeuge zu erhalten, einfach automatisch die zugehörige Marke, das zugehörige Modell und
die zugehörige Farbe einschließen , so dass, wenn dieses Fahrzeug Objekt zurückkommt, ist
es einfach genug für uns, auf
die verwandten Felder zuzugreifen , sind die Felder aus den zugehörigen Spalten. In Ordnung, also verwende ich hier keine Farben. Ich hätte leicht die Farbe diszipliniert werden können, aber dann schiebe ich den Umschlag, um zu antworten, wenn ich eine Ansicht richtige Karte bekomme. Ich möchte auch alle diese Details angeben und möchte die Liste der Buchungen hinzufügen, oder? Denk daran noch einmal,
du siehst, ich zeige dir nur, wie alles miteinander verbunden ist. Als wir unser Fahrzeugmodell erstellt
haben, sagten wir, dass wir die Liste der
Buchungen wollen , sind wir wollen wissen, dass es eine Liste der Buchung. Also bei der Buchung, ein Fahrzeug sorry, hat viele Buchungen. Wenn ich wollte, dass eine Buchungshistorie auf diesem Fahrzeug angezeigt wird, wenn ich das Fahrzeug anschaue. Also sehe ich, wenn Sie das Fahrzeug abrufen, Liste der Buchungen
abgerufen, ich brauche sie nicht dieses Zeug Buchungen jedes Mal, wenn ich
alle Fahrzeuge bekomme , weil es vielleicht keinen Fall dafür geben könnte, aber Sie könnten Legen Sie es dort hin. Das ist alles, was ich wirklich und wirklich tue. Das kann bedeuten, dass ich nur ein Fahrzeug mieten und während wir hier sind, können Sie das treffen. Ich wollte nur auch buchen, oder? Entschuldigung für den API-Aufruf für die Buchung. In Ordnung. Also Buchung hat verwandte Felder auch. Das ist also, was wir wissen und was wir werden ist, es so zu modifizieren, dass wir wissen, einschließlich Fahrzeug und Kunden. Und dann, wenn wir anrufen, werden passieren, dass der Parameter eindringt. Alles klar, und weit buchen. Wieder einmal, wenn Sie zu einer Buchung kommen, ist
es das Gleiche. Wir haben unsere Lambda Ausdruck enthalten. Der Grund, warum ich Doppelpunkt-Includes eingeschlossen habe, ist, dass wir tatsächlich einige Parameter haben, die übergeben werden könnten. Wir haben diesen Lambda-Ausdruck, wir haben die Arterie oder unten wir haben
die Sachen , die ich nicht in die Experten setzen will, ich will Sie nicht in das setzen. Ich wollte nur Includes einbinden. Mit den neuesten Versionen von C Sharp können
wir eigentlich nur
den Parameter angeben , den wir einfügen möchten und dann den entsprechenden Wert eingeben. Und weil die anderen besonders sind, wird es sie sowieso umgehen und ignorieren. Das wollen wir also sowohl für Buchungen als auch für Fahrzeuge tun. In Ordnung, also noch einmal, wenn wir uns unsere Indexseite ansehen, tut mir leid, wenn wir uns unsere Indexseite für unsere Fahrzeuge ansehen, können wir das erreichen. Es nein, für die Buchung, ich mache ein bisschen mehr so ja, ich lade die Buchung. Ja, wir tun all die anderen Dinge, die wir wissen. Aber dann zeige ich den Kunden, der das Fahrzeug gewährt hat. Erneut können wir dem Kundendatensatz weitere Details hinzufügen. Ich habe keinen Vor- und Nachnamen eingegeben. Wir können das tun, wenn du willst. Aber für Nautilus, begleichen Sie sich mit der Smoking-Idee und Kontaktinformationen. Wir geben das Datum der Buchung an. Ich werde die Dauer eintragen, die ich beabsichtige, die Anzahl der Tage zu verstehen, für die diese Person die Buchung gemacht hatte. In der for-Schleife die Daten, die präsentiert werden, anders nachschlagen. Ja, wir haben Buchungen. Nun, das sollte gebucht werden. Lassen Sie mich einfach diese Anpassung vornehmen. Wenn ich es predige, muss ich üben, oder? Lassen Sie mich also nur sicherstellen, dass mein Code dem gleichen Standard entspricht, der Zeit ermutigend ist. So var Buchung in Buchungen. Und dann sagen wir Booking dot Kunde, dot-dot-dot Gesellschaft. Sehr ähnlich wie das, was wir mit dem Fahrzeug, dem Mikrofon und dem Namen gemacht haben. Dann haben wir Booking Punkt Datum erstellt, weil das ist das Datum, richtig. So können wir sicher davon ausgehen, dass an diesem Datum eine Buchung erstellt wurde. Dies war der Tag, an dem das gesamte Buchungsdatum erstellt wurde. Was ich nicht will, das Datum und die Uhrzeit. Ich will nur das Date. Das ist also das Datum. Und dann können wir dies ein bisschen weiter schieben, um zu wollen und zu formatieren. Dies wird wie ein Werkzeug sein, ein Format. Also habe ich in der Regel gerne meinen Tag ist der Tag oder der Tag tut in der 29. oder der erste oder der zweite, der Tag, die Buchstaben, der Berg, wie im Namen des Monats, und das vierstellige Jahr sind fertig. Das sollten doppelte Anführungszeichen sein. Das würde also so etwas wie den 29. von mir sehen, 2020. Das ist alles, was wir wollen, unser Anzeigedatum. In Ordnung. Und dann für die Dauer, werde
ich sagen, dass ich so ziemlich diese Mathematik will. Wir können diese Mathematik mit Fälligkeitsdaten machen, richtig? Ich kann sagen, Booking Punkt Datum in, das wäre die höhere Gottheit, weil Sie bringen, aber in das Auto, nachdem Sie es genommen. Also brachten die Daten es zurück in Säugetieren an dem Tag, an dem es Itos brauchte, ich wollte nicht die Tage zwischen
diesen beiden Daten insgesamt und wir wollen das in eine Schnur werfen. In Ordnung? Und ich erkannte gerade, dass ich das alles tatsächlich in
eine große Klammer setzen muss , weil Arrays von Seiten funktionieren. So wie ich es hatte, weiß
nur, ob wir das nur zwischen Klammern hatten,
dann würdest du diesen Wert tatsächlich ausdrucken und den wörtlichen
String-Punkt sehen , um diese Punkt-zwei-Zeichenfolge zu summieren, was nicht das ist, was ich will. Ich will das alles, weil das alles ein C-Sharp-Code ist. Ich werde all das in Klammern wickeln, damit Sie die gelben Marker sehen können ,
die ich zu C-scharfen Zitat war, beginnt und endet. Und ich bin bereit, das Semikolon in Klammern zu setzen. Und das wird mir die String-Darstellung
der Gesamtzahl der Tage zurückbringen , die die Dauer sein wird. So könnten Sie dies quantifizieren, quantifizieren und Dauer in Tagen sagen, wenn Sie möchten, das ist in Ordnung. Und dann stimmt alles andere so ziemlich mit dem gleichen Standard überein. Und dann gehen wir ein bisschen weiter und dann haben wir unsere Code-Bits dasselbe tun, die Buchungen
abrufen, all diese Löschlogik machen und alles im Voraus. In Ordnung, also siehst du,
dass es nicht schwer ist, das Wissen außerhalb von uns zu übertragen , das mit Berechnungen schick wird. Und vielleicht nur das zusätzliche Bit zu tun, um sicherzustellen, dass wir die zugehörigen Daten erhalten, was für uns wirklich einfach ist, weil wir die Datenzugriffsschicht konstruiert haben. Abgesehen von diesem Zeug ist
es ziemlich einfach und Standard-Loch, um Bach-Daten
aus der API zu erhalten und eine Struktur in einer schönen, benutzerfreundlichen Art und Weise zu halten. Wenn wir zurückkommen, schauen wir uns an, dass unsere Ansichtsschaltfläche funktioniert. Also diese Person Taste, unser erster Link in jeder 10 für Details Tabellen. Es dient dem Zweck, unsere Rekordanzeige von selbst auf seinen eigenen Komponenten zu machen. Also werden wir eine andere Komponente einrichten oder wir werden es Ansicht nennen. Und wir werden sehen, wie wir die Komponente senken, akzeptieren Wohnung oder ungenutzten Umfang, um abzuleiten, welche Daten auf der Seite sein sollten.
26. Erstellen von Formularen – Teil 1: Hey Leute, willkommen zurück. Wir werden also mit der Erstellung von Daten in dieser Lektion fortfahren. Und die Realität ist, dass ja, wir wissen, wie wir Daten sehen, aber das sind wirklich Standarddaten. Die Realität der Situation ist, dass Benutzer, wenn
sie mit unserer App interagieren, die Fähigkeit benötigen, Daten zu erstellen. Wir müssen ihnen also ein Formular geben, das es ihnen ermöglicht, es auszufüllen, den Informationsspeicher und die Datenbank zu
übermitteln und es ihnen entsprechend anzuzeigen. Also werden wir mit Fahrzeugen im vorherigen Beispiel beginnen, ich beginne mit dem weniger komplizierten und gebe Ihnen dann die Chance, die komplizierteren zu machen. Und dann haben wir Notizen in diesem verglichen, ich werde mit den komplizierteren beginnen und dann können Sie dieses Wissen im Umgang mit den weniger komplizierten
übertragen. Der Grund, warum wir mit Fahrzeugen anfangen werden
, ist , dass wir das Mikrofon, das Modell anzeigenmüssen
und dem Benutzer
die Möglichkeit anzeigen müssen, müssen
und dem Benutzer
die Möglichkeit anzeigen müssen diese Datenpunkte einzugeben, wenn er sie erstellt. Und wir haben bereits festgestellt, dass diese verwandt sind. Die, dies sind verwandte Datenpunkte, die aus anderen Tabellen gehen. Offensichtlich können wir dem Benutzer nicht erlauben, sie einzugeben. Und sie müssen Dropdown-Listen und so machen. Aufgrund dieser komplexeren Situationen werden
wir mit den Fahrzeugen beginnen und dann können
Sie die anderen auf eigene Faust ausprobieren und wir vergleichen Notizen. Jetzt bemerken Sie, dass meine Schnittstelle ein paar Änderungen ist. Erstens, ich gebe diese Taste ein oder ich habe diese Taste in den Code eingefügt. Und es ist wirklich nur ein Knopf mit BTN sekundär drauf und ein Pluszeichen. Ich zeige Ihnen den Code in ein paar, aber auch die Tabelle. Was ich getan habe, war, die ansprechende Klasse der Tabelle zu entfernen. Also jetzt streckt es sich sowieso direkt über den Bildschirm, was eher dem entspricht, was ich wollen würde. So können Sie die Anpassung erfüllen, wenn Sie es wünschen. Aber lassen Sie uns einen Blick Code für die Schaltfläche. Und wir sehen hier, dass es wirklich nur ein Anker-Tag ist. Ich habe die HRF gleich Schrägstrich Fahrzeuge Schrägstrich erstellt. Das ist also unsere Komponente, die wir dieses Mal erstellen müssen. Und die Klasse btn sekundär abgesponnen oder Armaturenbrett plus und erstellen Fahrzeuge. Also noch einmal, es ist Ihre Anwendung, die Sie überhaupt gestartet haben, Sie fühlen sich das Bedürfnis, Sie experimentieren. Es liegt an dir, aber wir werden einfach mit dieser Seele fortfahren. Was passiert, wenn ich auf die Schaltfläche klicke, ist, dass es für zwei Seiten weitergeht, einige, sorry, es gibt nichts im Zentrist, es gibt nichts da, weil wir voran gehen
und die Komponente erstellen müssen , zu der es navigieren wird. Also lasst uns damit anfangen. Also, jetzt bin ich sicher, dass Sie wissen, wie man eine Komponente erstellt es bereits erstellen, aber nur als Auffrischung, können Sie mit der rechten Maustaste, gehen Sie zu Hinzufügen und dann Serie oder Komponente und wir nennen es erstellt die Arrays sind so können Sie voran gehen und erstellen dass in den Fahrzeugen. Und für jede andere Seite oder, wissen Sie, erstellen Sie Piazza, die
wir brauchen, wir tun es einfach in den entsprechenden Ordnern. Also das erste, was wir in
dieser Komponente wollen , und ich habe es erstellt, ist unrein alles daraus. So können Sie einfach anhängen, was ich Ihnen zeigen werde, an den Standardinhalt der Rede. Wir haben die Seitennavigation oben, um es wissen zu lassen, dass es
Werkzeug durch diese Adresse Fahrzeuge Schrägstrich erstellt werden kann . Ich werde auch meinen HTTP-Client injizieren, sowie einen Navigationsmanager, der nur eine Bibliothek ist, die uns hilft, zwischen Komponenten in unserem Blazer zu navigieren. Wir werden unser h3-Tag ändern. Und ich werde nur die gleiche Kartentitelklasse dazu bringen. Und es wird sagen, erstellen Sie ein neues Fahrzeug, anstatt nur erstellen. Und dann kommen wir in das Fleisch davon. Natürlich, wissen Sie, Sie haben dieses Zitat, das ich einfach dort setzen werde. Das ist also im Grunde, was Ihre Komponente an dieser Stelle aussehen muss. Wenn wir also über Farmen sprechen, müssen
Sie die integrierte Komponente verwenden, die uns von einem Blazer namens Formular bearbeiten gegeben wird. Nun nimmt dieses Bearbeitungsformular einige Parameter an. Eins, es nimmt Parameter sind unsere Attribute, na ja, ein Modell. Also im Grunde sagt
das, was soll ich Datentyp wollen, sollte ich verwenden, um abzuleiten, welche Felder ich auf ein Formular achten soll. Wenn wir also Fahrzeuge erstellen, dann muss unser Modell eine Form von Fahrzeugobjekten oder Fahrzeugwerten sein. Also werde ich sagen, am Schild Fahrzeug. Aber dann wollen Sie natürlich kein Objekt mit dem Namen Fahrzeug haben, also wird es lügen, um zu operieren. Um das zu beheben, werde ich einfach voran gehen und dieses Objekt hier unten erstellen und es gleichzeitig zu einer neuen Instanz des Fahrzeugs initialisieren. Und dann sehen wir, dass die rote Linie verschwindet. Jetzt weiß es, dass es mit Fahrzeugen zu tun hat. Schauen Sie hier, um zu sehen, auf welche Datenpunkte es achten muss. Das nächste, worauf ich jetzt hinweisen wollte, wäre, was passiert oder was bei einer Unterwerfung passieren sollte. So können wir sehen, dass wir
auf, bei ungültigem Submit-Ereignis wollen , wollen
wir ein onsubmit Ereignis. Ich möchte auf gültige Einreichung. Was wollen wir also tun, wenn die Daten nicht den Anforderungen entsprechen? Was möchten wir tun, wenn jemand im Allgemeinen auf „Senden“ klickt
und was wollen wir tun, wenn jemand auf „Senden“ klickt? Und es gibt keine Validierungsverletzungen so ziemlich. Also, das ist, was auf gültige senden Sie mich. Und so werde ich nur mit ungültigem Einreichen arbeiten. Und dann werde ich sagen, dass ich möchte, dass Sie diese Methode namens create aufrufen. Wenn ich nun noch einmal auf diese Methode verweise, muss
ich sicherstellen, dass sie in Anführungszeichen steht. Ich gehe nach unten und erstelle dann diese Methode namens Create Vehicle. So können Sie voran gehen und das tun. Linie geht weg. Dieser ist jedoch da, weil er nichts tut, aber wir werden das bald Remy getan haben. Und dann können wir anfangen, die verschiedenen Teile des Formulars einzugeben. Also die beiden obersten Komponenten, die ich in die Form
unserer Tags setzen werde , wären für den Datenannotations-Validator sowie die Validierung. Und jetzt schenken wir der Validierung noch nicht allzu viel Aufmerksamkeit. Aber die Sache ist, dass wir Datenanmerkungen haben, die wir tatsächlich Modelle übersetzen können, aber im Moment teilen wir die Modelle mit der Datenbank. Später werden wir sehen, warum es eine gute Idee ist, sie irgendwie getrennt zu haben. Aber Farnell, während wir sie teilen, und wir behalten es so. Also Datenannotationen Validator wird nicht die meisten sein, es wird jetzt nicht viel tun, aber wir werden es dort für die spätere Verwendung setzen. Validierungszusammenfassung bedeutet, dass, wenn wir versuchen,
eine Einreichung zu tun und sie ungültige Datenpunkte sind, dann wird dies Art von zeigen, dies ist erforderlich, die dies nicht erfüllt, et cetera. Also arbeiten diese beiden irgendwie Hand in Hand, aber wenn wir uns später auf die Validierung konzentrieren, dann werden wir sie in besserem Axon sehen. Wissen Sie, was wir tun möchten, ist unsere Farmstruktur ähnlich zu erstellen, wie Bootstrap jemand gebildet hätte, um zu sagen, div Klasse ist gleich Bindestrich Gruppe zu bilden. Und dann in diesem Form-Gruppendiv werde
ich ein Label haben. Die erste Schleife wird also für das Mikrofon sein. Und dann tut mir leid, das wissen wir für das Mikrofon. Wir wollen kein Textfeld. Sie möchten eine Form von wählen Sie die Dropdown-Liste, wählen Sie die Liste. Also, was ich tun werde, ist, dass ich das einfach in
ein anderes div setze und dann werde ich ein ausgewähltes Tag verwenden und andere öffnen und schließen. Aber dann innerhalb dieses select-Tags kann
ich sagen, dass bind gleich ist und woran möchte ich es binden? Es wird an den Wert Öl an das Modell und den Wert im Modell gebunden sein, wir werden ID treffen, weil dies für mich ist. Also binde ich diese Let-Liste an die Mikrofon-ID, richtig? Und natürlich, im Einklang mit den Pilzen, machen
wir eine Bootstrap-Form. Ich gebe diesem nur die Klasse gleich gebildet. Also das nächste, was wir zur Kenntnis nehmen müssen, ist die Tatsache, dass dies ein leerer Slot Listen ist, wo die Optionen kommen aus. Wenn Sie also grundlegende HTML kennen, wissen
Sie, Sie haben Ihre Auswahl, dann haben Sie
Optionen, Optionen, Optionen, natürlich, wir wissen nicht, was in der Datenbank sein wird. Also müssen wir diese Option Listing so dynamisch wie möglich erfüllen. Also müssen wir auf die Datenbank schauen, aka durch die API geschaut, um uns die Liste der Mischung zurückzugeben. Und dann können wir das verwenden, um dynamisch zu generieren, was die Optionen sein werden. Also lassen Sie mich einfach zum Codeabschnitt gehen und ich
werde ein Objekt der Typliste initialisieren. Also listet ich auf. Ich kann sie auswechselbar benutzen. Ich wurde darauf hingewiesen, dass das wahrscheinlich nicht das Beste ist, um Boote in dieser Situation zu machen. Es ist in Ordnung. Also können wir einfach sagen, ich liste Mikro auf, ich würde es Mix nennen. In Ordnung. Und dann wollen wir, dass, wenn die Komponente geladen oder die Seite geladen wird, dass die Mischung gefüllt und bereit für die Verwendung durch die Schnittstelle. Also genau wie das, was wir mit Index zu tun hatten, als wir zwei hatten, lass mich einfach da rüber springen. Wir mussten auf initialisiert sagen, ich möchte, dass Sie die Liste der Fahrzeuge holen. Ich muss etwas Ähnliches tun und uninitialisierte erstellen gehen holen Sie die Liste der Mischung. Also werde ich das einfach kopieren. Sie müssen es nicht wirklich kopieren, aber Sie könnten geschütztes Async über eine Aufgabe bei initialisiertem async erneut eingeben. Und was ich tun werde, ist, anstatt nach Fahrzeugen zu suchen, weil ich das gerade von der Fahrzeug-Index-Seite kopiert habe. Aber anstatt nach Fahrzeugen zu suchen, bin
ich auf der Suche nach einem Mix. Das heißt, ich mache Klienten. Ja, HTTP gewährt client.connect von JSON löscht die Liste von mic. Und mein Endpunkt hier wäre Mix-Endpunkt. Da gehen wir. In Ordnung, also eine Null, im Grunde, wenn wir initialisiert werden, wir den Mix aufrufen. Also muss ich dies mit den Daten füllen, sobald die Mischung aus abgerufen wird. Also, was ich tun werde, ist in eine Standardoption setzen, die besagt, wählen Sie das Mikrofon. Also der Benutzer weiß, dass, okay, Sie müssen das Mikrofon auswählen, gut. Aber dann werde ich sehen und mit dem at-Zeichen beginnen, wenn die Mischung nicht gleich null ist. Alles klar, also mischen oder Objekt hier, was die Liste der Mischung ist. Hier ist es null. Wir haben das durchgemacht, wissen nur mit dem Index. Also wird es als null beginnen, aber dann wird es schließlich gefüllt werden. Also, wenn es nicht gleich null ist, dann kommt für jeden, sagen wir mir, das zurück. Anstelle von Mix möchte ich eine Option erstellen, richtig? Und der Wert für die Option wird außerhalb von mir Punkt-ID sein, weil wir die ID verfolgen möchten. Denken Sie daran, dass, wenn wir das Fahrzeug erstellen, wo wirklich in der Mikrofon-ID speichern, nicht der Name. Dieser Name ist es, was wir aber anzeigen wollen. Also in dem Abschnitt für die Disziplin ging zu sehen Anzeige der Mikrofonpunkt-Namen. Da gehen wir. Es wird also so viele Optionen generieren, wie es Mikrofone zur Auswahl aus dieser Dropdown-Liste gibt. Und das war's wirklich. Wir haben gerade unsere erste Dropdown-Liste erstellt. Jetzt haben wir noch eins und drei mehr zu gehen, denn es ist das Gleiche für Modell und es ist dasselbe für Farbe. Sie sind alle in Datenbanktabellen gespeichert, die wir dynamisch laden müssen den Inhalt von, wenn wir mit diesem Formular zu tun haben. Was ich also tun werde, um die Dinge einfach zu machen, ist,
diese Struktur hier für das Formular zu replizieren . So weiter war MC. Dieser wird Modell sein. Und ich werde nur im Grunde alles ändern, was MC ID gesagt ist, ich werde Modell Punkt-ID speichern. Dies wird Modelle, Modelle sein, und dies wird gängige Modelle, Modelle,
sorry, und model.py, model.py Name sein. Und wo wirst du dasselbe für die Farbe tun? Also mache ich hier nur einige ausdrückliche Änderungen, um diese Operation zu beschleunigen. Also Farben, Farben, das ist eine gemeinsame Samenfarbe und wir machen diese Änderungen nur schnell. Also nein, wir haben Vorkehrungen für die Mikrofon-Dropdown-Liste, für die Modul-Dropdown-Liste
und für die Farbe getroffen, die darauf fiel. Rote Linien weisen jedoch darauf hin, dass wir diese entsprechenden Objekte benötigen. Und zweitens wissen wir bereits, dass wir keine API-Aufrufe für sie eingerichtet haben. Um diesen Vorgang abzuschließen, können
wir die Zeile für das Model-Objekt sowie das Farbenobjekt einfügen. Und dann auf die gleiche Weise, wie wir
sicherstellen mussten , dass wir den API-Aufruf durchgeführt haben, um Mix zu initialisieren. Wir müssen das für Modelle tun, und das müssen wir auch für Farben tun. Alles klar, so ziemlich einfach, das zu beheben. So ziemlich viele Modelle. Wir warten auf den Client-Aufruf, um die Liste der Modelle von den Modellen Endpunkt, Farben tun die gleiche Sache, Liste der Farben von Farben Endpunkt und mischen die gleiche Sache. In Ordnung, das war's also für die Dropdown-Listen. Und wirklich, wirklich, das war ein komplizierterer. Aber Sie können sehen, dass, wenn es einmal getan hat, Sie es für die anderen tun können. Alternativ
gibt es für die Auswahl tatsächlich eine Komponente im Blazer namens input select, die ziemlich ähnlich funktioniert. Und ich habe keine Parteiähnlichkeit gesagt, aber statt zu kaufen, müssen
wir sagen, bindet Bindestrich, Wert. Okay, jemand, der einen als Eingabe wählen lässt, und ich werde die anderen beiden als Select verlassen. Das war also unser ursprünglicher Code. Dies verwendet die Rasierkomponente und dann wird diese auf den ursprünglichen Code abgebildet. Aber wir werden nur unser Formular ausfüllen. Und dann werden wir sehen, wie alles auf Bindungen zu zusammen funktioniert. Also unser nächstes Feld, das wir wollen, dass der Benutzer eingeben würde, ist vielleicht das Jahr des Fahrzeugs. Also werde ich der gleichen Format-Formulargruppe folgen und dann dem Label und dann einem div, das meine Eingaben haben wird. Aber dann, weil Jahr ist ein, lassen Sie mich einfach diese Großbuchstaben Bs korrigieren, richtig? Da Jahr vom Typ Integer ist, werde
ich die Eingabenummerkomponente verwenden, richtig? Also Eingabe Nummer von n Wert Fahrzeug Punkt Jahr. Und dann wollen Sie nicht sagen, ich setze in diesem neuen,
neuen Abschnitt hier, der Validierungsnachricht sagt für, und dann öffnen wir oder ist eine Syntax siehe Fahrzeug Punkt Jahr. Also tatsächlich könnten wir diese Validierungsnachricht nehmen und sie auf alle anderen anwenden. Denn der Punkt ist, dass wir
eine Form der Validierung benötigen , um sicherzustellen, dass diese Täler ausgewählt werden. Wieder einmal schenken wir der Validierung nicht zu viel Aufmerksamkeit, aber ich setze sie nur von null ein. Also werde ich die Validierungsnachricht für speichern. Und dann haben wir außerhalb offene Klammern und dann
öffnen und schließen Lambda Pfeil Fahrzeug Punkt und dann den Feldnamen. Also, dass man für Meek ID ist, wird
dieser für Modell-ID sein. Dieser wird für Farbe-ID sein. Und dann ist dieser für das Jahr, wie wir sehen. Ordnung. Das nächste Feld wäre die Kennzeichennummer, wieder im gleichen Format. Und dieses Mal werden wir Eingabetext verwenden und wir sind immer noch der Wert, aber dieses Mal auf Nummernschild Nummer. Ordnung. Allerdings Validierungsnachricht für so habe ich Nummernschild Nummer wir Jahr Ich denke, nächste Haltestelle wäre wahrscheinlich die Fahrzeug-Identifikationsnummer oder VIN sein. Also, dass man der Nächste ist. Also Form-Gruppe Label, Eingabetext, weil unser Vin eine Zeichenfolge ist. Und dann, um alles abzuschließen, denke
ich, die Tagespreise sind intolerant, also werde ich das
einfach reinlegen und dann ist die Mietpreise wieder doppelt. Die Eingabenummer ist also diese. Alles klar, aber der Punkt ist, dass, wenn Sie nur die Winkelklammer
öffnen und schreiben Sie die Worteingabe, Sie werden sehen, alle verschiedenen Optionen sind in Komponenten,
die Ihnen zur Verfügung stehen, Checkbox, Datum, Datei, Radio, Optionsfeld, Gruppe, Eingabe, Text, Bereich, et cetera. Alle diese Komponenten sind also in den Foren integriert und stehen Ihnen zur Verfügung. Also in unserer Situation haben wir was verwendet, 33 verschiedene, die wir Nummer,
Text und Auswahl verwenden , und das ist in Ordnung. Lassen Sie uns nun von unserem Design übergehen und uns ein
wenig mehr auf das konzentrieren , was wir passieren möchten, sobald Sie uns einreichen. Also natürlich brauchen wir einen Submit-Button, weil Sie alle Felder haben, aber wir haben nicht in einen Sowjet gesetzt. Also meine Submit-Button, nur eine Schaltfläche Typ senden und setzen Sie es in der Klasse Treffen und geschlagen niederländischen Erfolg und Fleischindustrie Block erstellen Fahrzeug. Es ist also nur eine einfache Schaltfläche, aber dann müssen wir die Logik nicht hier tun, um sicherzustellen, dass,
sobald sie angeklickt wird, diese Logik aufruft und tatsächlich weitergeht und das Mandat ausführt. Lassen Sie uns also untersuchen, was hier passieren muss. Denken Sie also daran, dass wir beim Erstellen von Daten einen Beitrag Anrufe tätigen müssen. Also habe ich bereits das Modell, das benötigt, oder das Objekt in irgendeinem Submit Postel an die API erstellt effektiv die Ressource. Was passiert, ist, dass es leer beginnt. Es, es setzt den Kontext für das Formular, aber dann, was auch immer Daten darin gelegt werden, Deshalb haben wir diese Bindung. Also, was auch immer Daten auf dem Weg eingefügt werden, wir werden tatsächlich nur an
das gleiche Objekt gebunden und dann würde onCreate diese Werte haben. Was wir hier tun müssen, wäre, den
Client-Aufruf zu unserem Beitrag als JSON async zu erwarten . Wieder einmal gibt es eine Methode pro Verb, also haben wir uns die „get nulled“ angesehen. Wir schauen uns die Post an. Wo rufen wir an? Was wir Endpunkte nennen, Punktfahrzeug, Endpunkt. Und ich werde das Fahrzeug als Objekt übergeben, das gepostet werden muss. In Ordnung, dann, nachdem es erstellt wurde, möchten
wir zurück zu unserer Index-Seite gehen. Also hier ist, wo wir jetzt diese NEF Monaco verwenden können. Kollapiere das einfach. So können wir jetzt den NEF-Manager verwenden und sagen Genug Manager Punkt navigieren. Und dann sehen wir nur, Entschuldigung, wir sagen nur Schrägstrich Fahrzeuge Schrägstrich. Richtig? Also lasst uns all das nehmen, für eine Drehung
arbeiten und es überprüfen. Okay, also lade ich auf mein Formular und sehe hier
einige eklatante Fehler, und das ist kein Problem,
das hat sie zusammen behoben. Also zuerst sollte das sein, dies sollte mehr Kontexte sein, aber ich hatte nicht genug Disziplin, um durchzugehen und sagen Modell auswählen, Farbe wählen. Außerdem müssen meine Steuerelemente wie das Bootstrap-Steuerelement aussehen. Also lasst uns sie zusammen beginnen, denn wenn du den gleichen Code
hast, den ich habe , würdest du auch diese sehen. Wenn du nicht in meine Fallen gefallen bist, dann plaudert dich an. Also für die Auswahl, für die Standardauswahl, ändere
ich sie, um eine Farbe für Farbe
auszuwählen, wähle Mikrofon für mich. Und ich werde diese Bootstrap-Klasse setzen, die Formularsteuerung auf jede
dieser anderen Komponenten ist , um sicherzustellen, dass sie alle das gleiche Styling teilen. Mit all dem erledigt, sehe
ich nur ein paar kosmetische Veränderungen. Lass mich einfach neu starten. Und hier sind wir. Das sieht also viel besser aus. In Ordnung, also wählen wir, OK, hier ist unsere Dropdown-Liste mit unserem Mix aus der Datenbank. So Toyota Modell. Okay. Prius Farbe, es ist schwarz. Es ist 2020 Modell. Das Kennzeichen,
jemand, der die Lektionen mit Nummern lenkt, die ähnlich sind, was wir in Jamaika und der VIN
haben würden . Nun, das ist oft numerisch, also denke ich nicht danach, du weißt schon, zu streng damit zu sein. In Ordnung. Und dann für die Tageszinskredite, wieder, im Zusammenhang mit Jamaika, werden
Sie wahrscheinlich ein Auto für $3.000 pro Tag mieten. Und dann, wenn wir auf Erstellen Fahrzeug aussehen, navigiert
es Werkzeug oder Index Seite, und es ist hier für uns zu sehen. In Ordnung, also haben wir einfach
unsere erste Ressource mithilfe der Benutzeroberfläche im Gegensatz zur API erstellt , wie wir es in der Vergangenheit getan haben. Also werde ich Sie ermutigen, dieses Wissen zu nehmen, es auf die anderen zu
übertragen. So müssen Sie immer noch sicherstellen, dass die Personen gehen und pflegen die Liste der Mischung, weil wir bereits wissen, dass Sie sie sehen können. Aber wir können Netzhaut sehen und löschen. Wir müssen in der Lage sein, Cm-Formelmodelle,
gleiche vier Farben für Kunden sowie für Buchungen zu erstellen . Alles klar, Buchungen, wir können Buchungen später zusammen überprüfen, weil man vielleicht etwas mehr Fitness braucht, aber im Wesentlichen weitergehen und das Wissen übertragen und diese tun. Und dann können wir Notizen nur Comeback vergleichen.
27. Erstellen von Formularen – Teil 2: Hey Leute, willkommen zurück. Also hast du einen Auftrag und ich hoffe, du hast ihn
abgeschlossen, so wie wir es gemeinsam durchmachen werden. Die Herausforderung bestand also darin, das Wissen zu übertragen, das bereits aus dem Sitzen auf den Fahrzeugen gesammelt wurde, Form zu
erstellen und voranzugehen und diese festzulegen, Komponenten für alle anderen Ressourcen zu
erstellen, die wir den Benutzern ermöglichen möchten, in der Lage zu sein, einzugeben. So macht Modelle, Farben, Fahrzeuge, Kunden und Buchungen. Nun, wir haben Fahrzeuge zusammen gemacht. So wie eine kurze Überprüfung, könnten
wir zur Fahrzeugkomponente navigieren. Wir haben unsere Dropdown-Listen, die dynamisch mit Daten
gefüllt werden, basierend auf dem, was in der Datenbank ist. Mit freundlicher Genehmigung für API. Also machen Modell, Farbe. Alle diese sind API und gebildet. Und dann haben wir unsere Eingangsnummer. Die Eingabe nimmt eine Eingabenummer. So sahen wir, dass wir die verschiedenen Eingabekomponenten haben , die uns durch Spiele oder out of the box
gegeben wurden. Und wie wir andere mit
dem ausgewählten HTML oder dem Select-Tag, das uns von einem Blazer gegeben wird, anpassen können. Nun, was wir tun wollen, ist durch die anderen Bildschirme
zu gehen , nur um sicherzustellen, dass wir alle auf der gleichen Seite sind. Also werde ich mit einigen der einfachsten beginnen, die gemischte Modelle
und Farben sein würden , weil alles, was wirklich in dieser Form ist Name. Also, ein anderes Mikrofon wäre WWF dir gesagt worden, du sollst Nissan einsetzen. Lassen Sie uns testen, erstellen Sie Mikrofon. Da gehen wir. Jetzt haben wir Nisan auf der Liste. Also, wenn wir einfach zurückgehen und den Code dafür überprüfen, sieht
es ziemlich identisch mit Fahrzeugen an den oberen Teilen wo wir die Seite mit dem Pfad haben, macht Schrägstrich 12 Stunden HTTP-Client und Nav Manager
injiziert werden oder wenig Tag der Spitze, damit die Leute genau wissen, wo sie sich in der Anwendung befinden. Und dann haben wir unsere Bearbeitungsform, die das Modell eines Objekts namens Sanftmütig verwendet. Und dann wissen wir, dass unser Hauptobjekt im Code initialisiert wird. Und dann haben
wir bei gültigen Einsendungen ein Mikrofon erstellt, das wir auch im Code haben. Und dann haben wir unsere Anmerkungen, während die Daten und Validierungszusammenfassung. Dann gehen wir weiter, um Eingabetext zu sagen und Bindestrich Wert zu binden, machen dotnet. Okay, und wir geben ihm das Formular-Steuerelement und haben die Validierungsnachricht. Und wir haben unseren Knopf. Das war's wirklich. Nun, die nicht initialisierte Methode ist tatsächlich leer und wahrscheinlich könnten wir darauf verzichten. Ich meine, es tut nichts. Wir mussten es nicht neu eingeben. Aber nur für den Fall, dass Sie etwas
tun möchten , bevor die Seite geladen wird oder wenn die Seite geladen wird, können
Sie diese Methode immer einfügen. Ordnung, also habe ich es in allen Komponenten gelassen, nur für den Fall, aber ich habe Sie nur wissen lassen, dass Sie es nichts tun können oder für einen saubereren, wohl saubereren Code, Sie könnten es einfach weglassen, da dies
wirklich nur eine Überschreibung ist Weise in Create mic, gehen Sie zu sagen erwartet client.read post als JSON async, und erinnern Sie sich an die entsprechende Endpunktübergabe des Objekts, das wir erstellt möchten, dann navigieren wir zurück zu unserer Indexseite. Nun, das ist das allgemeine Thema für Modelle und Farben. Also nur nachgeschaut Marken, wenn wir uns Modelle ansehen und wir uns Farben ansehen, ist
es ziemlich das gleiche Zitat. Kopieren Sie buchstäblich von mir, klicken Sie auf Erstellen und fügen Sie dann im nächsten ein. Also dieses ein würde Modelle durchgeführt werden und alles, was ich tat, war Control F und finden Sie alle Dinge , die MEIN Kapital M mit viel Fall auf und ändern Sie sie zu. Und Modell, und ich habe dasselbe mit Kleinbuchstaben Mikrofon und Kleinbuchstaben gemacht. Und damit musste ich keinen anderen Code ändern, weil alles andere nur
in der Schlange fiel , weil die Felder ziemlich gleich sind und es einfach genug ist, sich zu replizieren. Das ist also das Gleiche für das Model. Und noch einmal, das gleiche für Farbe. Wir werden Farbschrägstriche erstellen, und alles andere sieht ziemlich genauso aus. In Ordnung, also die, die Modelle sind eindeutig anders für die verschiedenen Seiten erstellen. Sehen wir uns nun die Kundenforen an. Also auf dem neuen Kundenformular, es ist nicht zu viel Sorgen. Ein Boot haben wir Tucks, Identifikationsnummer, E-Mail-Adresse, Kontaktnummer, sowie Adresse. Nun, eine Sache zu beachten, stellen Sie sicher, dass Sie die Warenkorb-Komponente relativ
zum Warenkorb-Datentyp verwenden , denn obwohl dies Steuer-Identifikationsnummer ist, heißt
es Nummer, aber die Realität ist, dass in verschiedenen Gebieten Diese Zahl könnte nur alphanumerisch sein, haben Sonderzeichen. Zum Beispiel neigen
wir in Jamaika dazu, Bindestriche zwischen unseren Zahlen zu verwenden. Ordnung? Sie möchten also nur vorsichtig sein, dass Sie kein eigenes Feld für diesen Datentyp verwenden. So oder so, lassen Sie uns einfach voran und erstellen einige Buch Kunden tatsächlich diesen Kunden bereits erstellt haben, aber ich werde nur dies tun und Kunden erstellen. Sagen Sie, hier haben wir unsere Kunden angezeigt. In Ordnung, also schauen wir uns Buchungen an. Also Buchung, links für zuletzt, weil es wohl das komplizierteste bisschen Code hatte. Aber ich werde das Kundenformular überstreichen, nur damit Sie genau sehen können, was getan wurde. So haben wir jeden Formularabschnitt, Eingabetext für die Steuer-ID, E-Mail-Adresse, Kontaktnummer oder Adresse, Epochen Eingabetextbereich. Angenommen, Sie möchten diese Art von nicht größer als
das normale Textfeld starten , weil es nur Ära braucht. Und dann ist der Rest so ziemlich im Einklang mit dem, was wir gesehen haben. Sonst würde niemand zur Buchung gehen. Wir sehen eine andere Jahreszeit. Eins. Es ist eine Dropdown-Liste für die Fahrzeuge. Aber beachte, wie ich alle Fahrzeuge aufliere. Ich liere sie im Grunde nach ihrem Namen auf, oder? Toyota Prius. Und dann habe ich da oben und das ist die Lizenznummer. Könnte mehr Details haben, aber lassen Sie uns einfach mit dem für null arbeiten, der Kunde, wir setzen die Punkte-ID eine Pipe und die E-Mail-Adresse für den Kunden und dann das Datum,
beachten Sie, dass es tatsächlich das heutige Datum anzeigt, das Datum wie zu der Zeit. Und dann haben wir diese Callender-Kontrolle, die es uns erlaubt, es zu ändern. Und dieser Kalender wird in jedem Chrom-Browser grundsätzlich gleich aussehen. Also, das ist Internet, tut mir leid, das ist Microsoft Edge. Sie werden die gleiche Weise in Chrome, aber es könnte in Firefox anders aussehen. Und während ich mir nicht ganz sicher bin, wie es in der Oper aussehen könnte, aber der Punkt ist, dass es in den verschiedenen Browsern anders aussehen kann. Du wirst also darauf achten wollen. Aber der Punkt ist, dass die Kalendersteuerung uns freundlicher Genehmigung dieser Komponente oder des Typs, den sie ableitet, oder? Lassen Sie mich Ihnen also einfach den Code zeigen, der hinter diesem Rendering von der Farm steckt. Also wieder, das allgemeine Layout ist das gleiche. einmal, Konsistenz. Nach einer Weile beginnen Sie zu erkennen, dass Sie Dinge wie, wissen Sie, jedes Mal, wenn wir diese h3-Klasse binden müssen und das sehen , also denken Sie daran, dies zu einer eigenen Komponente zu machen. Ich würde es einfach eine Komponente nennen und wahrscheinlich weitergeben, was einzigartig ist. Wenn wir also etwas ändern wollten, wie wir den Titel zeigen, müssen
wir es nicht an 20 verschiedenen Orten tun, aber das werden wir später tun. Also bin ich nur, ich gebe Ihnen nur Ideen, wie Komponenten Ihnen das Leben erleichtern können. Also zurück zu unserem Formular. Wir haben unser Formular bearbeiten Basierend auf der Buchung Web oder gültige Submit-Funktion, die und was wir gesehen haben, egal wie kompliziert das Formular ist, das ungültige Senden ist ziemlich die ganze Zeit gleich. Wir übergeben es an die API, und dann navigieren wir unseren Weg, richtig? Aber dann lasst uns darauf achten, was hier passiert. Also eine Stunde Drop Bonus für die Fahrzeuge. Wir wissen, dass wir auf die API gehen und dann, wo die Liste der Fahrzeuge zu bekommen. Also sind wir mit dem vertraut, basierend auf dem, was wir auf
der Fahrzeugsprache dieses Mal gemacht haben , wo die Fahrzeuge obwohl bekommen. Aber dann für die tatsächlichen Dropdown-Listen, sorry, falsch für die tatsächliche Dropdown-Liste Ära, wir haben Fahrzeug-ID in Ordnung. Wo verbindlich an dieses Fahrzeug. Und wenn die Fahrzeuge nicht bekannt sind, dann für jedes Fahrzeug in der Liste, dann wollen wir eine Option generieren, die den Wert der ID des Fahrzeugdatensatzes hat. Aber dann schau dir an, was ich in den Displaybereich gelegt habe. Also zeige ich nur verschiedene Details des Fahrzeugs an. Dann machen Sie den Modellpunktnamen, und dann habe ich diese Pfeife und dann Nummernschildnummer. Okay, also über Sie wollen die Daten an
den Benutzer auslegen , damit er genau wissen kann, welches Fahrzeug es ist, denn wahrscheinlich wäre es nützlich, die Farbe irgendwo drin zu setzen. So wäre es schwarzer Toyota Prius oder blauer BMW X5 auf der Sonne. Aber das liegt an dir. Aber ich zeige dir nur was, was ich getan habe, richtig? Um die komplexeren Arten von Displays zu bekommen, ist
es wirklich nicht so schwierig. Und dann im Kundenbereich, sehr ähnlich, mussten
wir die Liste der Kunden noch einmal aus der APA holen, füllen sie, okay? Und dann generieren wir für jeden von ihnen die Option mit dem Kunden Punkt-Ideen von Wert. Und dann zeigen wir das Inhaltsverzeichnis an,
sagen wir, dass das Trennzeichen und die E-Mail-Adresse mehr Details hinzufügen
könnten, könnte weniger, oder? Der Punkt ist, dass es Ihre Anwendung ist, Sie möchten es so benutzerfreundlich wie möglich machen. Aber wenn Sie verstehen, wie Sie Ihre Daten manipulieren, ist das Wichtigste. Jetzt für das Datum,
beachten Sie, dass mein eigenes das heutige Datum anzeigt. Ich bin mir nicht sicher, ob Sie einer sind, ist, dass Sie wahrscheinlich gerade diese Standarddaten von 0 auf geschrägtem 01 Schrägstrich drei Nullen auf der rechten Seite haben. Der Grund dafür ist der Datentyp, den wir verwenden, ist vom Typ Datum, oder? Es ist die Zeit. Also tat er oh, es ist vom Typ Datetime. Standardmäßig habe ich das getan. Die Zeit darf nicht null sein. Es muss eine Form von DID haben. Und die Daten, die Sie wahrscheinlich sehen, sind die Standarddaten. Das ist nicht sehr benutzerfreundlich. So. Was ich tat, war, als ich das Objekt deklarierte, das für das Formular als Modell für das Formular verwendet werden soll, ich, initialisierte Daten sollten datetime dot-dot, dot-dot-dot sein. Also was auch immer, weißt du, datetime dot bekommt jetzt einen genauen Zeitstempel als null. Was ich nicht will, dass die Zeit stumpft. Ich brauche die 12 Uhr nicht oder was auch immer. Also sage ich nur, gib mir bei D8, die Detailgenauigkeit, die du hineingesteckt hast, das liegt an dir. Kein Problem. Noch einmal, Ihre Anwendung, Ihre Bedürfnisse könnten sich von dem unterscheiden, was ich hier zum Ausdruck bringe. Aber noch einmal möchte ich nur die grundlegenden Konzepte durchsetzen. Also initialisiere ich dieses Objekt, das wir an
jedem Punkt tun können, an dem wir möchten, dass das Formular mit Daten geladen Wir können unserem Objekt-POV sagen, dieses bisschen Daten, so dass, wenn es hier oben entbeint ist, jedes Feld, das bind zeigt
automatisch die entsprechenden Daten an, die vorgeladen wurden. Okay, damit dieses Ganze ich dieses Datum angezeigt wird und eine Eingabe-Datumskomponente amüsant macht, weshalb wir den Callender bekommen. Ordnung? Und dann außerhalb von all dem, haben
wir die grundlegende erstellen Buchung, wo wir es einfach
über den Endpunkt senden und immer navigieren. Also lassen Sie mich eine Buchung für diesen Kunden
erstellen alle tar Toyota Prius mieten die Buchung erstellen und ich bin auf sie bekommen. Kein Problem. Ich habe das wirklich nicht vor dieser Vorlesung getestet. Also lassen Sie uns diese Ära inspizieren, um uns eine kann immer mit der rechten Maustaste zu Inspect gehen. Gehen Sie zur Konsole Ihres Browsers. Und dann zeigen wir dir, was der Pfeil ist. Also hier beim Lesen der Luft auf See und dass es 500 Resonanz auf dem Stand. Und dann würden Sie sehen, dass es in Zeile 63 unserer Index-Punkt-Arrays oder pH-Wert passiert. Also ist es Zeile 63 von index.js, mal sehen, was und das ist unser API-Aufruf für unsere Indexseite. Nein, wir sind uns nicht ganz sicher, was das Problem ist. Und wenn wir überprüfen, sahen
wir, dass die Nachricht im Browser uns nicht viel Hilfe gab, aber wir haben dieses Ausgabefenster, auf das wir Zugriff bekommen. Grundsätzlich jedes Mal, wenn Debugging stattfindet, oder? So meldet sich Microsoft oder dotnet Core tatsächlich immer in diesem Fenster an. Also, wenn ich nur ein wenig nach oben scrolle,
beginnen Sie, die gleichen Bereiche zu sehen, die noch mehr Fehler sind, sind mehr Fehlerdetails, als was der Browser mir angezeigt wurde. Dies ist also eine nette Möglichkeit für Sie zu wissen, wie Sie
Ihre Anwendungen debuggen , wenn Sie diese Art von
Fehlern erhalten , weil es vorher funktionierte und nicht mehr funktioniert. Warum hat es aufgehört zu funktionieren? Also sagt es hier etwas, ein Boot, ein Fehler und
eine Ausnahme sind aufgetreten, während der Berechnung der Datenbank-Ära Inhalt. Ich bin mir nicht sicher, ob es das ist. Was wir hier sehen, die gleiche Sache, die im Browser war. Wenn ich weiter nach oben scrolle, dann sehen Sie vielleicht mehr Details. Ich fange an, einige Dinge zu sehen. Ich kaufte JSON, JSON-Serialisierung und ich gehe hoch und gehe hoch. Und dann am Anfang dieses Stapels, Trace ist ein möglicher Objekt-Zyklus erkannt wird. Dies ist auf etwas zurückzuführen, ein Hinweis auf dort. Also kenne ich diese Nachricht, ich weiß genau, was los ist. Es sagt dir nicht unbedingt, was das Problem ist, aber ich werde dich durch das hier führen. In Ordnung? Also, was passiert? Und ich bekomme einfach eine Menge Debugging
schnell und springe zur Buchung zu unserem Objekt herunter. Was passiert, ist, dass es Zeiten geben kann, in denen wir versuchen Objekte
abzurufen und zusätzliche Details hinzuzufügen. Aber die zusätzlichen Details sind die zusätzlichen Objekte, die wir versuchen, einzuschließen ,
hat, Beziehungen sind sollten Objekte des Objekts enthalten. Es ist verwirrend. Das meinten sie also mit einem Zyklus. Einige Cycler-Referenzpfeile. Also Buchung enthält ein Fahrzeug, aber dann enthält das Fahrzeug eine Liste der Buchungen, richtig? Also im Grunde wird es verwirrt, weil es sagt, dass Sie eine Liste von Buchungen wollen. Sie möchten die Fahrzeugdetails hinzufügen,
aber die Fahrzeugdetails enthalten auch eine Liste von Buchungen, so dass es verwirrt werden könnte, und das ist ein häufiges Problem mit APIs tatsächlich. Im Allgemeinen lösen wir dies mit dieser Bibliothek namens Newtons Soft. Also werde ich einfach mit der rechten Maustaste auf unser Server-Projekt klicken und wir gehen zu Manage NuGet-Pakete. Ich habe das Paket bereits installiert, aber was Sie suchen werden, ist Newtons Soft. Und lassen Sie einfach die Suche und dann wollen Sie dieses Microsoft nicht ist Geschwindigkeit dotnet Kurs unsere ASP NET Core dot NVC dot Newton weichen JSON. Also möchten Sie einfach darauf klicken, die nicht geladen werden. Nun, Sie würden installieren sehen, oder Sie sehen, dass der schwarze Pfeil es bereits hat. Deshalb sehe ich das rote X. Gehen Sie voran und installieren Sie das. Und dann, wenn das erledigt ist, möchten Sie zur Startdatei für das Serverprojekt gehen. Gehen Sie, obwohl der ganze Weg nach unten zu dieser Zeile Dienste Controller mit Ansichten hinzufügen. Und dann werden Sie den folgenden Code hinzufügen. Dot fügen Newtons weichen JSON hinzu. Und dann werden wir ihm einige Initialisierung geben und Optionen werden o
p mit unserem Lambda-Fehler sehen , sorry, Lambda-Pfeil. Aber, und dort sehen wir o p dot Syrien, Syrien, Sir serialisierer-Einstellungen. Und lass mich einfach zu den nächsten neun gehen, damit klar ist, was los ist. Alles klar, Kumpel mehr Smith. So Sara Lazar, Einstellungen Punkt-Referenz, Schleifenbehandlung. Das ist also, was passiert. Es verursacht unsere Referenzschleife. In Ordnung, also ist die Referenzschleifenbehandlung gleich und ich werde einfach
Newtons self.age JSON-Datenreferenzschleife sehen , die den Punkt ignorieren. In Ordnung, also mit anderen Worten, wir sehen ja, Sie könnten jedoch mit unserer Referenzschleife enden, eine große Sache darüber
machen. Tun Sie, was Sie tun müssen und bekommen die Daten gekauft. Das ist also ziemlich genau das, was dies
der API sagen wird , die in unseren Serverprojekten ist. Also lassen Sie uns Australien, das ist wie einige Browsen zu Buchungen. Und natürlich müssen wir uns zuerst einloggen. Und dann, nachdem wir in den Moment der Wahrheit einloggen, so K Fahrzeuge sorry, Ich habe gesagt Buchungen und da gehen wir. Nein, wir sehen unsere Buchungen mit den entsprechenden Details basierend auf dem, was wir auf der Indexseite auflisten wollten. Das ist eigentlich ein sehr häufiger Fehler mit APIs. Es ist ein guter Weg. Ein guter Arbeiter im Besitz. Newtons Soft hat wirklich gut getan, um diesen Fehler zu verwalten. Also hier ist der Code. Wieder einmal haben wir dies dem Pilot hinzugefügt, sagte Controller mit Ansichten hinzufügen. Wenn Sie nur eine API verwenden, die Sie wahrscheinlich nur AD-Controller haben. Wie die Methode hier, Services dot-dot-dot controller. Es ist das Gleiche. Sie heften es einfach an das Ende der Klammern und es sollte funktionieren. An diesem Punkt haben wir einen Meilenstein erreicht, bei dem wir unsere Formulare für alle unsere verschiedenen Ressourcen erstellen. Jetzt wissen Sie also, wie Sie dem Benutzer die Eingabe von Daten über Ihren Blazer und die Speicherung in der Datenbank ermöglichen können. In diesem Zusammenhang werden
wir uns ansehen, wie wir es ihnen erlauben, die Daten zu ändern, die eingegangen sind. Denn wenn wir uns die Buchung ansehen, würden
wir sehen, dass okay, es gibt ein Datum in und aktualisieren alte Retinol. Alles, was wir zeigen, sind die Daten aus. In der Tat hatte ich tatsächlich
diese Spalte hier kommentiert, die tot wäre in minus 0, 2,
was ich weiß, wird ein Problem verursachen, weil wenn wir aktualisieren und versuchen, die Buchungen Seite nicht neu zu laden. Zeigt die fehlende Spalte an, schau dir an, was du siehst. Das ist also kein vernünftiger Wert genau dort, weil der Dayton eine Koma-Xia-Zeit hat, wir wissen, dass er standardmäßig auf den Schrägstrich 0 1 gesetzt wird. Also, wenn es die Berechnung macht, wird
es uns eine negative seit diesem Datum bis zu dem Tag, den wir hatten. Das wird also ein Problem sein. So oder so können wir diese Kosmetik beheben, weil wir leicht
eine if-Anweisung einfügen können , um zu sehen, ob es kein Datum aus dem Modell kommt, und dann etwas anderes anzeigen. Andernfalls wird die Dauer in Tagen angezeigt. Unabhängig davon müssen
wir das Bearbeitungsformular einrichten, denn wenn jemand das Auto mitbringt , muss
er den bestehenden Buchungsdatensatz mit der Rücksendung aktualisieren. Andernfalls benötigen wir die Bearbeitung für alle anderen. Also werden wir in ein paar sehen, wie das funktioniert.
28. Setup: Hey Leute, willkommen zurück. In dieser Lektion werden wir uns also darum bemühen, das Bearbeitungs- oder Aktualisierungsformular für unsere Anwendung
einzurichten. In dieser Lektion werden wir uns ein paar Dinge ansehen. Erstens, wie wir wiederverwendbare, tatsächlich wiederverwendbare Komponenten erstellen können, und wie wir Parameter implementieren können und 3, wie wir implementieren können, was wir nennen Ereignis-Callbacks. Die Entstehung all dieser Dinge, die man in
einem einfachen Bearbeitungsvorgang betrachten sollte, wäre also die Tatsache, dass ein Bearbeitungsformular genau wie ein Create-Formular aussieht. Und ich habe nicht oft die gleichen Felder. Die Vorgänge unterscheiden sich nur, weil man Daten auf einem
erstellt, ändert vorhandene Daten. Was die Farm betrifft, haben
Sie jedoch im Allgemeinen die gleichen Felder, die Sie zum
Erstellen verwenden , die der Benutzer ändern kann. In Ordnung, also fangen wir mit einem einfachen an
und ich werde die Mikrofone benutzen, die Form erstellen, richtig? Was wir also tun müssen, ist eine Komponente zu erstellen, die diese Form enthält. Also werde ich mit der rechten Maustaste auf Mix klicken und ich werde weitergehen und eine Rasierkomponente hinzufügen. Ich werde es Farm-Komponenten nennen, nichts zu schickes. In Ordnung. Und dann meine ich, ich hoffe, das ist selbsterklärend. Es ist eine Komponente für das Formular. Und was wir in dieser Formularkomponente wollen, ist die eigentliche Bearbeitungsform. Also alles, was in die ging, in die Bearbeitungsform, die wir auf unsere Create-Komponente setzen. Wir wollen, dass all dies, zumindest dieser Teil, die wiederverwendbaren Teile in unserer Form Controller, Farmkomponenten, sorry sein. Also werde ich diesen HTML entfernen und ihn durch das Bearbeitungsformular ersetzen. Und alles ist so ziemlich bleibt gleich. Aber wir wollen auch bestimmte Parameter für diese Komponente angeben. bedeutet, dass wir unsere Komponenten so einrichten können, dass wir, wenn
wir darauf rufen , Werte übergeben. Also genau die gleiche Weise, wie ich Forum bearbeiten würde, sagten
wir, Modell gleich etwas auf gültigem senden gleich etwas. Dies sind wirklich nur Parameterwerte, die in die Bearbeitungsformularkomponente eingebacken werden. Also
muss meine Komponente, die eine Farmkomponente ist, einen Parameter haben. Also offene eckige Klammern schreiben das Wort Parameter und dann werde ich sagen, dass es
einen Parameter vom Typ mic mit
dem Namen mic nehmen sollte einen Parameter vom Typ mic mit , das mit dem Modell übereinstimmen wird, das übergeben wird. Alles klar, Nächster Parameter, wir wollen etwas, um den Text der Schaltfläche zu bestimmen, weil dies eine vernünftige Farmen ist, also möchte ich nicht, dass es sagt, erstellen Sie mich die ganze Zeit, falls ich tatsächlich editiere. In Ordnung, also wollen wir kontextuell definieren, was dauert, wird aufgeklappte Buttons gedruckt. Ich habe einen Parameter namens button text, der vom Typ string ist. Und es wird einen Standardwert von save haben. Das bedeutet, wenn ich keinen Wert für diesen Parameter bereitstelle, dann wird es nur Save sagen, sonst können wir ihn überschreiben. Also kann ich wissen, ersetzen Sie diesen statischen Text durch den dynamischen Text, der von dem gesagt wird, was auch immer Valley übergeben wird. Und noch einmal. Dies setzt den Standardwert C ein, wenn kein Wert übergeben wird. Der dritte Parameter, den ich haben werde, ist einer, der auf gültiges Senden aufgerufen wird. Und dieser wird vom Typ Ereignis sein, genannt Bach. Das ist also wie ein Ereignishandler-Delegat, um zu sehen, okay, welche Methode sollte ich an dieser Stelle aufrufen. Also ungültig senden, das nenne ich den Parameter. Also werde ich sagen, dass ungültiges Einreichen gleich bei Zeichen auf gültigen Einsendungen ist. Das heißt, wenn jemand diese Formularkomponente aufruft, kann
er ein Mikrofonobjekt bereitstellen. Wenn es leer ist, wollen wir davon ausgehen, dass sie im Begriff sind, eine zu erstellen. Wenn es gefüllt ist, dann gehen wir davon aus, dass sie im Begriff sind, eine zu bearbeiten. Ordnung? Wenn sie bestehen, können sie sehen, na ja, wenn ich bearbeite, wollte ich sagen, Änderungen speichern. Wenn ich erschaffe, wollte ich sagen, erstellen, was auch immer es ist. Wenn sie dies nicht verhindern, haben
wir sowieso einen Standardwert. Und dann sieht dieser Parameter, welche Methode ich aufrufen soll. Also, egal welcher Methodenname hier übergeben wird, das ist die Methode, die wir ungültig senden. Das ist also unsere Unterarmkomponente. Jetzt haben wir ein bisschen Refactoring, um sowohl die Bearbeitung zu tun, gut zu unseren erstellt, was mich
zuerst die Bearbeitungsseite einrichten lassen , so dass Sie genau sehen können, wie es bindet. Und dann können wir zurückgehen und unsere Schöpfungen modifizieren. Also in der gleichen Mischung gehen
wir voran und fügen RAs sind Komponente und wir werden es Edit nennen, Edit Dot, Razor. Okay, und dann gehen wir voran und injizieren die übliche Sache sowie unsere Seite Root 2 definiert. Also pH ist gleich Slosh MC Schrägstrich bearbeiten. Und dann geben wir hier an, dass wir einen Parameter erwarten. Also diese ID Doppelpunkt in DC und ich brauche einen Parameter, der entweder als ID bezeichnet wird. Und es sollte vom Typ int sein. Ordnung, also gibt es einen Schlüsselwortparameter, also muss ich dieser Komponente noch einmal sagen, das ist es braucht einen Parameter und ich werde ihn Parameter public int id nennen also muss dieser Eigenschaftsname mit dem Namen übereinstimmen, den ich definiere an der Spitze hier. Und es würde nur festlegen, dass zu bekommen und zu sitzen. In Ordnung, als nächstes muss
ich mich definieren. Also MC oder ein Objekt von mir ist eher gleich einer neuen Instanz. Und dann ist das erste, was ich tun muss, wenn meine Komponente geladen wird, das erforderliche zu holen Das ist seine Wohnstätte, um bearbeitet zu werden. Denken Sie also daran, dass
es beim Bearbeiten bedeutet, dass Daten vorhanden sind. Das bedeutet, dass ich den Datensatz
mit der ID abrufen muss , die angegeben wurde, weil die Person auf einen geklickt hätte und sagte, ich möchte diesen Datensatz bearbeiten. Die ID ist fünf, wir brauchen diese rote Karte, also werde ich in geschützte setzen sieht Überschreibung für die Aufgabe auf Parameter. Sit sagt, in Ordnung, so geschützt Async über eine Aufgabe. Parameter gesetzt. Es scheint, dass das bedeutet, sobald die Parameter bereitgestellt wurden, was soll ich tun? Beachten Sie also, dass wir in den vorherigen wahrscheinlich initialisiert hatten, also wird es hier nicht verwendet. Ok. Nun, dann in dieser Situation möchte
ich nicht, dass es nicht initialisiert ist, ich will es auf und wenn es einen Parameter gibt, Alles klar, so dass die Parameter eingestellt sinken. Was möchte ich tun? Ich glaube, ich vermisse hier ein S. Perimeter setzen einen Samen. Da gehen wir, geradeaus rein. Also, da gehen wir, Holen Sie sich einfach die Spinnkarte auf Parameter, setzen Sie sich asynchron. Also, wenn ich jetzt tun möchte, füllen Sie mein Mikrofonobjekt mit einem Aufruf an die Dose, die ich int dot, und dann von JSON ist Sink war ich wollte, um den Datensatz richtig zu
bekommen und ich möchte, dass er als Mikrofon serialisiert. Und dann werde ich Endpunkte Punkte nennen. Und das ist MC, also ist es der Mikrofonendpunkt macht Endpunkte, richtig? Das ist also unser Endpunkt, den wir anrufen. Aber dann musste ich auch den Ausweis übergeben, oder? Das bedeutet, dass ich irgendwie formatieren oder etwas mehr Finesse auf diesen Endpunkt anwenden muss. Denn denken Sie daran, dass unser GET-Endpunkt, lassen Sie mich einfach zu mischen und zeigen Sie, dass Endpunkt bekommt. Wieder einmal wollen wir das hier bekommen. Entweder könnte es fünf sein, oder? Also müssen wir in der Lage sein, diese speziellen Endpunkte zu nennen. Um es zu formatieren, werde
ich Interpolation verwenden. Also werde ich diese in dieser Party in geschweifte Klammern zuweisen und wickeln. Also rufen wir den Endpunkt an. In Ordnung? Und lassen Sie mich ihr Ziel schreiben und dann Schrägstrich, weil ich keine Schrägstriche auf den Endpunkten habe. Da gehen wir. Denken Sie daran, dass wir die Schrägstriche entfernt haben, also sagen wir Schrägstrich. Und dann werde ich den ID-Wert übergeben. Da gehen wir. Okay, so ähnlich wie wir unser Mikrofon modifiziert haben und ich muss mein Anführungszeichen schließen. Da gehen wir. Das nächste, was ich tun möchte, ist zu definieren, was passieren soll, nachdem wir auf diese Schaltfläche geklickt haben. Denken Sie daran, dass wir nicht angefangen haben, die visuelle Macht zu betrachten, sondern nur die Ereignisse zu programmieren. Und dann zeige ich Ihnen, wie wir diese Bauteilkunst nutzen können. Ich werde diese eine asynchrone Aufgabe aufrufen, mich bearbeiten. In Ordnung, wenn wir also,
wenn wir im Bearbeitungsformular auf Absenden klicken, wollte
ich edit make aufrufen. Was möchte ich tun? Nun, ich werde sagen, ich werde meinen Clientanruf warten, um als JSON async zu setzen und zu sitzen. So hat der Kunde jemals ein Verb. Was soll ich tun? Nun, erstens, was ist die URL? Meine URL wäre also Endpunkte, Punkt-Mikrofon macht Endpunkt. Und dann wären die Daten, die ich o setze, der nächste Parameter
, der gemacht werden würde. Ordnung? Denn denken Sie daran, dass wir ausgehen, also muss ich dem Objekt die Daten zur Verfügung stellen. Wir haben gerade das Objekt. Sie wären bearbeitet worden und wissen, dass auf Absenden klicken, werden
wir diesen Anruf erfüllen und sagen, führen Sie einen PUT mit diesen Daten auf diesem Endpunkt. Richtig? Danach möchte ich jemanden navigieren, nur sagen, sorry genug Manager, Dots, navigiert Werkzeug und dann einfach nach Hause navigieren. Genau wie das, was wir auf der Create gemacht haben. Na gut, irgendwie geradeaus. Wieder einmal akzeptieren wir Wohnungen genannt ID und dieser Link,
diese URL oder erwirbt diesen Parameter. Wir definieren oder mic Objekt und initialisieren es. Und dann füllen wir es will die Powermeter sind bereit für den Einsatz. Und dann machen wir unsere Bearbeitungen. Aber was ist mit dem visuellen Zeug? Wir haben immer noch nichts anderes als diesen h3-Tag gemacht, oder? Also für das Formular kann
ich meine Farmkomponenten anrufen, oder? Also ja, wenn Formular bearbeiten, aber wie wir festgestellt, bearbeiten Formular ist wirklich nur das integrierte Forum wo die Datenvalidierung und Anmerkungen auf solche, wir haben die Felder und dann haben wir die Schaltfläche. All diese Dinge sind gemeinsam zwischen der Bearbeitung und sie erstellen. Also setzen wir es in diese Formularkomponente und jetzt können
wir formale Komponenten aufrufen und diesen Knoten betrachten. Ich kann Werte für unsere Schaltfläche Text und ungültige senden. Denken Sie daran, das sind Parameter, die wir sagten, wir wollten rechte Schaltfläche Text und auf gültige senden. Also lassen Sie uns Schritt für Schritt gehen. Also Button Text, vielleicht möchte ich, dass mein Knopf das Recht sieht. Und dann für die ungültige Übermittlung muss
ich die Funktion bereitstellen, die aufgerufen werden sollte, sobald wir die Schaltfläche drücken. Also ungültig senden, wissen Sie, dass, sobald wir die Schaltfläche drücken, es wird zu ungültigem Senden
gehen und rufen Sie die Funktion, die wir hier setzen, auf. Das ist, was es in der erstellen tut. Wenn wir nur zurück zum Erstellen gehen, das ist, was diese roten auf gültigem senden erstellt mic. Es springt, nicht und geht hierher. Das ist hart codiert. Ich brauchte Dynamik, weil ich nicht weiß, ob ich RFM-Bearbeitung erstelle. Aus der Edit-Radiergummi rufe
ich diese dynamische Formularkomponente und diesen dynamischen Parameter auf. Ich werde ihm sagen, dass ich Edit-Mic aufrufen wollte. Das ist also die Methode, die
diese Formularkomponente aufrufen soll , wenn eine gültige Übermittlung vorliegt. Und dann ist der letzte Parameter, den ich bereitstellen muss, make, weil ich das gesehen habe. Lass es mich wieder finden. Das Modell wird gleich am Zeichenmikrofon sein, richtig? Es erwartet also ein Mikrofon oder einen Umweltwert vom Typ Mikrofon. Also werde ich einfach in die Sanftmütigen hineingehen, die wir nicht hören, oder? So. Dies war ein MC gleich MC. Und dann werde ich diesen Parameter einfach schließen, all diese Fehler
loswerden, die auf der Außenseite liegen können und sie haben Recht. Da gehen wir. Also setzen Sie auf unsere Anzeigen. Aber machen Sie mich und unser Update. In Ordnung. Lassen Sie mich einfach überprüfen, ob ich einen Link zur Bearbeitung hatte. Ja, das habe ich. Also mischen Schrägstrich, Schrägstrich bearbeiten. Und deshalb übergeben wir die Mikrofonkennung noch einmal weil wir sie definiert haben, um diesen Parameter zu übernehmen. Also lassen Sie uns kleben oder für einen Spin bearbeiten. In Ordnung, also wo es unsere Liste der Mischung ist. Und ich werde nur einen brandneuen erschaffen. Also sollte dieser Honda sein, aber wir haben einen Fehler oder eine Rotunde über dem iPhone gemacht. Nein. Das ist okay. Lassen Sie mich daran denken, dass wir noch keinen Jaguar haben. In Ordnung, also ist es Jaguar. Jaguar, also muss ich es bearbeiten. Also werde ich meine Bearbeitung treffen und schauen, wo wir hingehen. Also diese Form identisch mit der Create-Form, es macht keinen Sinn. Wir schreiben diese Farm zweimal. In Ordnung? Ich meine, vielleicht kann die Situation es erfordern. Und wenn dies der Fall ist, dann die gleichen Prinzipien, die Sie gerade auf dem Formular erstellen verwendet
haben, können Sie sie erneut auf das Bearbeitungsformular anwenden, das Formular-Tag bearbeiten, und Sie wissen, alle Felder, die Sie brauchen, und alles in Ordnung in dieser Situation, Ich brauche nicht, ich will sie nicht zweimal schreiben müssen. In Ordnung. Also werde ich einfach das Update ändern und mir das ansehen. Ok. Es hat nicht geklappt, dass sie es erwartet hat. Machen wir einen Schritt zurück und bewerten. Also schaue ich zurück auf den Code und ich denke, ich sehe, was das Problem ist. Wir haben diese URL nicht richtig gebildet, also mein Fehler, lassen Sie mich einfach zur Put-, Entschuldigung,
falschen Datei zurückkehren , aber zur Put-Methode im Mix-Controller. Und was es haben sollte, ist die URL mit diesem ID-Parameter. Das haben wir also falsch gemacht. Also lassen Sie mich einfach zurückverfolgen. Und die URL muss eigentlich genau so aussehen. In Ordnung, also werde ich das nur verwenden und ersetzen, macht dies Endpunktteile seiner Schrägstrich ID, weil wir
den ID-Wert übergeben müssen , wie er für eine weit entfernte Validierung auf dem Weg verwendet wird. Ordnung, also müssen wir das tun und dann geben
wir die Daten ein, die aktualisiert werden sollen. Also lasst uns das noch einmal versuchen. Also werde ich hineingehen, Jaguar bearbeiten, die r
anziehen, und dann klicken wir auf Aktualisieren, und dort haben wir es aktualisiert. Es war also nur ein URL-Problem. Aber wir sehen, wie wir unsere wiederverwendbaren Komponenten verwenden können, um die Bearbeitung zu ermöglichen. Jetzt, da es wund nutzbar ist, ist
der Punkt, dass ich wissen kann, refactor unsere erstellt PJ, um diese Formularkomponenten zu verwenden. Und der Vorteil davon
ist noch einmal, dass wir weniger Polizeisystem gepflegt haben. Denn wenn wir morgen hören, dass es
ein anderes Feld gibt , das in die Datenbank gehen muss. Und natürlich, wenn es in der Datenbank ist, dann muss es wahrscheinlich in den Erstellungs- und Bearbeitungsbildschirmen sein. Dann, anstatt zwei Formulare zu ändern, haben
wir nur die Formularkomponente. Also für das Create kann
ich wirklich einfach all dies entfernen und noch einmal auf Formularkomponente verweisen. Und wenn ich nur den Rest der Parameter ausfülle, hätte ich die Taste das Mikrofon nimmt, das Mikrofon ist mir gleich. Noch einmal, dieses Objekt, das wir initialisiert haben, beachten Sie, dass es leer ist, wir reparieren nichts. Wenn es übergeht, hat
es keine Daten, die in unsere Komponente vorgeladen werden müssen. Und dann rufen
wir bei gültigem Senden die create MC-Methode auf. In Ordnung, also lassen Sie uns eine weitere Sanftmütige erstellen und dann bearbeiten und wir können von diesem aktiv abschicken. Also werde ich gehen, um ein neues Mikrofon zu erstellen. Dieses Mal werden wir tun hoch am Tag erstellen, machen. Unsere Anzeigen sind neu. Formularkomponente arbeitet für die Erstellung. Und nun, ich hätte einen Rechtschreibfehler machen sollen, um es zu rechtfertigen. Also werde ich es einfach ändern. Klicken Sie auf Aktualisieren. Da gehen wir. Und dann sagte ich: Oh, ich habe einen Fehler gemacht. Lassen Sie mich es noch einmal ändern. Und lassen Sie mich das noch mal machen. Nimm all diese zusätzlichen und da gehen wir. Also kein wiederverwendbares Bauteil für unsere Farm. Die Herausforderung hier besteht also darin,
diese ähnlichen Komponenten für
alle anderen Entitäten oder Ressourcen zu erstellen diese ähnlichen Komponenten für , die wir pflegen müssen. Und gehen Sie weiter und refactorieren Sie die Erstellen und erstellen Sie auch die Bearbeitung, um diese Formularkomponenten zu verwenden. Wenn wir zurückkommen, können wir Notizen vergleichen.
29. Setup: Hey Leute, willkommen zurück. Also in dieser Lektion werden wir nur Notizen vergleichen. Ich werde Sie nur durch den Code führen, den ich
implementiert habe , und ich hoffe, dass Sie es auch getan haben, aber ich werde Ihnen natürlich
Gärten geben, falls Sie Schwierigkeiten haben und
den Code langsam genug durchlaufen , dass Sie tatsächlich abkopiert, wenn es sein muss. Lassen Sie uns also mit den einfachsten beginnen, die Farben und Modelle wären, denn Farben auf Modellen haben grundsätzlich so wenig Daten wie Mix. Also die gleiche Formularkomponente,
Sachen, die wir für mich X gemacht haben und dann reflektieren wir es oder, oder erstellen und unsere Bearbeitung, um
diese Formularkomponente einfach zu verwenden , ist das Gleiche für Modelle, richtig? Für die Formkomponente war
das einzige, was wir alles ändern mussten, ein Spaß. Jetzt haben wir es mit dem Modell zu tun, richtig? Alles andere ziemlich gleich. Und dann über in der Erstellen, sehen
wir, dass ich die Schaltfläche Text Firmenaktualisierungen nicht geändert habe. Ich muss sagen, Modell hier erstellen. Alles klar, es ist gut, Wir gehen durch diese Überprüfung, aber diese Komponente aufgerufen ist identisch, wie die für die Edit. In Ordnung, und dann ist der Code ziemlich identisch. Wir warten auf denselben Ausweis. Wir stellen sicher, dass unser pH-Wert zu dem geht, was immer es ist, Schrägstrich, bearbeiten Schrägstrich mit der ID int ist. Und das haben wir als Parameter gemacht. Wir nennen das zu bearbeitende Modell. Und dann gehen wir weiter und rufen unsere PUT mit den Modellen und Punkt mit Schrägstrich ID mit dem zu bearbeitenden Modell. Und dann navigieren wir zurück zu unserer Modulseite. Alles klar, so ziemlich zwischen Modellen, Mix und Farben, der einzige Unterschied im Code ist die tatsächliche Klasse und der verwendete Objektname. Der Rest ist so ziemlich der gleiche. Und auch die Endpunkte, natürlich, keine Fahrzeuge. All die verschiedenen Serien, dass es eine komplexere Form ist. Also das Formular von Erstellt, wir setzen es in unsere Formularkomponente. Was Sie auch bemerken würden, dass ich den HTTP-Client injiziere. Alles klar, warum injiziere ich diesen Trend? Denn auf dem ursprünglichen Formular benötigen wir es, um drei Dropdown-Listen zu laden. Also all diesen Code aus der Create, wie nehmen wir nicht auf dieser Route? Wir müssten diese tatsächlich auf der Bearbeitungsseite wiederholen, da beide diese Liste von Werten im Voraus benötigen. Was wir also getan haben, ist, dass wir diesen Code aus dem Kreatin genommen haben ihn in die Farmkomponenten einfügen. Und eine Formularkomponente befasst sich mit der Vorbereitung des Formulars und aller Daten und Bedürfnisse im Voraus, wir haben immer noch unsere Parameter für unsere Daten. Die Schaltfläche nimmt ebenso wie die Ereignis-Callback-Methode, richtig? Und auf der erstellen, unsere Kunden in Aktion treten, wenn wir die Daten per Post als JSON-Aufruf senden müssen, sowie auf der Bearbeitungsseite, wenn wir die Daten
vorladen und dann die aktualisierten Daten übermitteln müssen. einmal ändern sich unsere Endpunkte entsprechend. Sie sehen also, wir setzen alles zusammen, was die Anwendung ein bisschen wartbarer macht, weniger Ansprechpartner, wenn Änderungen vorgenommen werden müssen und wo der Vorteil des ganzen Blazer uns erlaubt, sehr modular in unserem Ansatz zu sein beim Erstellen einer beliebigen Anwendung. Kunden. Ziemlich einfach. Einfache Form wurde verwendet, keine zusätzlichen Bedürfnisse für jeden Client hier drüben für jedes Vorladen von Daten. Der Create-Code sieht also genau mit der Unterarm-Komponente gleich aus. Und das Bearbeitungsformular ist ziemlich dasselbe. In Ordnung? Nein. Wenn es um Buchungen geht, mussten
wir ein bisschen mehr tun. Nun, so ziemlich volle Buchungen machen das Gleiche, was wir
für unsere Fahrzeuge getan haben , oder? Weil wir auf die gleiche Weise die Liste
der Fahrzeuge und die Liste der Kunden vorladen mussten , um eine Buchung zu tätigen. Also mussten wir unseren Klienten in die Unterarmkomponente injizieren und dann unsere Uninitialisierung machen. Also haben wir all dies von der Create-Komponente genommen. Beachten Sie, dass das nicht nicht initialisiert wurde. Es hat nichts, um es in die Formularkomponente zu setzen. Und dann haben wir unser kreatives Kabel genau so aussehen, und unser Editiercode sieht so aus. Alles klar, das ist ein schneller Durchlauf, um dich zu Tode zu langweilen und erklären, weil das Konzept in der vorherigen Lektion erklärt worden wäre. Dies ist natürlich die Implementierung, Sie durchgehen und pausieren können, wie Sie abkopieren müssen, was Sie nicht so sicher sind. Aber was ich darauf hinweisen möchte, ist, dass ich andere Komponenten erstellt habe. also in meinem Komponentenordner
daran, wenn wir unsere eigenen Komponenten täuschen, erstellt
zunächst einen Komponentenordner und ich habe dieses Beispiel erstellt. Nun, ich habe einen anderen erstellt, der den Buck zum Auflisten von Punkt-Radiergummi nennt. Also lassen Sie mich Ihnen zeigen, wo es verwendet wird. Im Allgemeinen, wenn ich auf der Seite zum Erstellen oder Bearbeiten lande, gibt es eine Chance, wo ich vielleicht nicht wirklich etwas erstellen möchte, unsere Bearbeitung irgendetwas. Also wollte ich einfach zurück auf die Liste gehen. Dann hätte ich diesen Schaltflächenkorridor über jedes einzelne Formular replizieren und die URL ändern müssen, wo ich mit ihnen gehen wollte wenn ich das Anker-Tag verwenden und die URL manuell eingeben sollte. Oder ich werde sehen, dass nicht ein Klick Navigationsmanager zu dieser bestimmten URL gehen, richtig? Anstatt diesen Code direkt auf jeder Seite zu wiederholen, habe
ich also einen Buck erstellt, um Komponenten aufzulisten. Und dann nimmt dies einen Parameter namens target. Und dann mache ich nur die spezifische Seite relativ zu dem, wo ich bin. Also, wenn ich auf dem Buchungsformular bin, dann wäre mein Geld für die Liste der Buchungen. Richtig? Und dann ändert sich das je nach Komponenten. Also für die Kunden ist die gleiche Sache nur Buffed Kunden aufzulisten. Für welche ist das? Dieser ist für die Fahrzeuge, ist das Gleiche, aber um Fahrzeuge aufzulisten. Also lassen Sie uns auf Buck schauen, um Liste. Es folgt der gleichen Art von Muster wie eine Komponente, die einen Parameter und alle eine erfordert, ich navigiere nicht durch seine Ich habe nicht draußen und pH-Wert als irgendetwas. Ich injiziere meinen Navigationsmanager. Alles, was ich hier habe, ist ein Knopf, den ich gestylt habe. Ich meine, dieses Styling ist vielleicht nicht das, was du willst, aber du würdest deine Anwendung sehen, du änderst sie oder du fühlst. Aber ich style diesen Knopf, um eine Online-dunkle Taste zu sein, btn Block. Und ich habe dieses onclick-Ereignis für diese Schaltfläche definiert. Also, wenn auf diese Schaltfläche geklickt wird, wird
es gehen,
Mann, nennt diese Methode. Es hat den Parameter genommen. Also haben wir bereits Parameter durchlaufen, als wir sagten, um Komponente zu bilden, oder? Also nehme ich Abteilungen werden Ziele genannt, weshalb wir Ziele angeben und einfach diese Zeichenfolge übergeben können. Also, wenn auf diese Schaltfläche geklickt wird, werden
wir zu dieser Methode kommen und sehen Navigationsmanager und navigieren Sie zu. In Ordnung, wir haben die benutzt,
dass diese Methode bereits wir wissen, wie man zwei Werke navigiert. Aber dann werde ich dynamisch die BaseURL
dieser gesamten Anwendungen laden und nav verwalten über Base-URI gibt mir den Server im Grunde. Und dann werde ich die Ziele setzen. Es wird etwas sagen, dass localhost Doppelpunkt, was auch immer Portnummer Sie haben, Schrägstrich. Beachten Sie also, dass ich hier keinen Schrägstrich setzen weil der Schrägstrich durch diesen Wert impliziert wird. Und dann gehe ich einfach zum Ziel, wie durch den Parameter angegeben. Lassen Sie uns einfach einen kurzen Blick darauf werfen, was das aussieht. Also werde ich zurückgehen, um zu wachsen und 0, was Mix ist, in Ordnung, schafft ein neues Fahrzeug und ich bin wie, oh Snap, ich will wirklich kein neues Visum erstellen. Ich möchte zurück zu dieser Liste gehen und
sehen, wo wir Backup-Mikrofone landen. Wenn ich zu Modellen gehe, dasselbe, zurück zur Liste, gehe zurück zu Modellen. Wenn ich mit der Bearbeitung
lande, möchte ich nicht wirklich zurück zur Liste bearbeiten. Alles klar, so ist, wie wir können, noch
einmal machen unsere Anwendungen modulo und nicht schwer Code zu viel über Windows zu
wiederholen erstellt eine Komponente. Geben
Sie ihm genug Parameter, um es dynamisch genug zu machen. Und dann stecken wir einfach diese Parameter und in die Komponenten, wo immer wir es für richtig halten. In Ordnung, das ist es wirklich für diese Rezension. einmal, wenn Sie irgendwelche Teile der Passform verpasst haben oder Sie Schwierigkeiten hatten, durch sie zu gehen, fühlen Sie sich frei, Bach. Bach LKW durch das Video auf Pause an den verschiedenen Teilen und überprüfen Sie den Code. Stellen Sie sicher, dass die Rechtschreibung quadriert ist und alle Ihre Referenzen korrekt sind. Und wenn alles andere scheitert, kannst
du mich immer schlagen, wenn du weitere Anleitung brauchst.
30. Fields – beheben: Hey Leute, willkommen zurück. Also habe ich eine schnelle Lösung für uns, bevor wir vorwärts gehen. Und das betrifft diese Prüfungsfelder. So haben Sie wahrscheinlich bemerkt, dass in der Datenbank alle Daten angezeigt werden, wenn wir erstellen. Lassen Sie mich einfach voran gehen und Daten in einer der Tabellen anzeigen, die Daten angezeigt werden. Unsere Benutzernamen sind jedoch nicht. Diese wären wahrscheinlich über die API gemacht worden. Das ist in Ordnung. Aber der Grund, warum wir von einem aktualisierten von erstellt haben, wäre, dass der angemeldete Benutzer in der UP protokolliert würde, als die Person den Datensatz berührt wurde, oder? Nein, das passiert nicht. Also haben wir nur eine schnelle Lösung zu machen und ich werde es in der Arbeitseinheit wieder sicher machen, die Schule aber Knochen zur Arbeitseinheit im Repository-Ordner. Und der ursprüngliche Code, den wir haben, ist var Benutzer gleich HTTP-Kontexte dot user, dot identity, dot name. Nein, die Realität ist, dass ich wahrscheinlich ein bisschen übereifrig wurde, dies in Blazer zu implementieren. Da dies in MVC
funktioniert, funktioniert in ihren Razor-Seiten, wo die HTTP-Kontexte normalerweise die Benutzerinformationen enthalten, ob es auch angegeben wird, würde im Kontext weitergegeben werden. Und es ist eine einfache Möglichkeit, nur den Anmeldenamen des aktuellen Benutzers zu erhalten. In der Blazer-Situation, in der wir nicht wirklich an der API arbeiten, machen wir
wenig auf der clientseitigen Ebene. Oder das wird wirklich weitergegeben ist ein Tolkien mit der Entzündung darüber, wer es ist. Dieser HTTP-Kontext hat also nicht r. Er hält den angemeldeten Benutzer nicht, weil er wirklich nicht weiß, wer angemeldet ist. Wir wissen nicht, wer der Klient ist. Oder vielmehr kennt es nur den Klienten. Was ist wirklich die Entzündung von den Tolkien es wirklich verwendet, um Ja zu sagen, okay, Sie können auf den Endpunkt zugreifen. Diese HTTP-Kontexte verbrauchen es also nicht. Ich würde Entitätsname funktioniert in diesem Zusammenhang nicht, also werden wir es ein wenig ändern. Also werde ich in den Mantel gehen, den ursprünglichen Code. Und ich habe bereits die Zitatkorrektur hier, die ich Sie einfach durchführe. Die erste Zeile für die Korrektur ist, dass wir den Benutzer
nicht direkt dort bekommen, wo er die Benutzer-ID bekommt, weil es Constantine tut, es ist das Token. Und das Tolkien ist bereits in den HTTP-Kontext ausgewertet. So können wir in Teile der Token-Informationen durch HTTP-Kontexte, Punkt-Benutzer, aufschlüsseln. Dann ist der Benutzer wirklich, was wir einen Anspruch Prinzipien nennen. Behauptungen sind im Grunde Informationen, die uns sagen, wer Sie sind, oder? Behauptet, ich behaupte, dies zu sein, ich behaupte, dass es das ist, was die Behauptung ist. Das Benutzerobjekt anstelle der HTTP-Kontexte ist also ein Claims-Prinzip, das eine Sammlung der Ansprüche ist, die aus
den Tolkien kommen , die von unserem Blazer-Client die Schnittstelle gesendet werden. Alles klar, also HTTP-Kontexte, Dot User bekommen alle Ansprüche und jetzt werden wir den ersten Anspruch finden. Also, wenn ich das jemals in den Debug-Modus stellen und einfach schweben würde, würden
Sie diese erträglichen 15 Ansprüche sehen. Und derjenige, der nützliche Informationen darüber enthält, wer der Benutzer ist. Wird auf dem Namen des Anspruchstyps gefunden. Also haben wir hier eine Konstante namens beanspruchte Typen, richtig? Wenn Sie also anfangen, dies in einzugeben, müssen
Sie möglicherweise eine Bibliothek für System.Out-Sicherheitspunktansprüche,
Anspruchstypen einschließen , sie sind nur Konstanten und Name identifiziert eine dieser Konstanten. Alles klar, das wird uns so ziemlich die Benutzer-ID geben. Und dann wollen wir den Wert dieser Behauptung. So wird diese Creme oder die Benutzer-ID neben diesem Anspruchstyp gespeichert. Also, wenn wir den Anspruchstyp dieses Typnamens Identifier finden, erhalten Sie das Volume, erhalten wir die Benutzer-ID. Jetzt, da wir die Benutzer-ID haben, möchte
ich die Benutzer-ID nicht speichern, da Verwendungen in allen zehn Jahren in der Zukunft gelöscht werden könnten. Sie wollen nicht, dass das historische Telefon wissen , welcher Benutzer diese Idee zu diesem Zeitpunkt hatte, ist wahrscheinlich einfacher, den Benutzernamen zu speichern,
weshalb wir es für Namen hier oben hochgestuft haben, richtig? Also muss ich diesen Benutzer abrufen. Also, jetzt habe ich den Ausweis. Ich möchte sagen, var Benutzer ist gleich unserem Gewicht Benutzer-Manager Punkt finden Sie nach ID eine Senke. Und dann geben wir einfach diese Benutzer-ID ein und dann erhalten wir das gesamte Benutzerobjekt. In Ordnung? Dieses Benutzerobjekt hat alles über den Benutzer an dieser Stelle, weil dies in die Datenbank ging und diese rote Karte aus unserer Geschwindigkeit abruft, die Benutzer Tabelle. Also FirstName, LastName, alles, was wir in
den Anwendungsbenutzer gesetzt hatten , ist, dieses Objekt zu kennen, so dass Sie speichern können, was Sie wollen. Ich mache nur Vorschläge. Wissen Sie, ob Sie den Benutzer-Manager bereits eingegeben haben und Pfeile erhalten. Das liegt daran, dass wir auch Benutzermonitor injizieren müssen. Und weißt du, wenn wir es injizieren, müsste
das wie gewohnt initialisieren, oder? Aber dann ist dies im Kontext des Anwendungsbenutzers. Ordnung, So User Manager im Kontext der Anwendung Benutzer geben dem Objekt den Namen injiziert, um es zu initialisieren, und dann können wir es frei verwenden. Verwenden Sie einen Manager als Variable für Bibliothek, die eine Reihe von Funktionen und
Funktionen hat , um Benutzer auf die Verwendung von Entzündungen nach Belieben zu finden. Also, nachdem wir wissen, dass das gesamte Benutzerobjekt haben, müssen
wir nicht sagen, aktualisiert von Anne und ich kann Benutzer dot sehen. Und wie gesagt, Sie können über dieses Objekt alle Informationen über den Benutzer erhalten. Wenn Sie also die E-Mail-Adresse, den
Vornamen, den Nachnamen speichern wollen , was auch immer Sie speichern wollten, ist das in Ordnung für mich. Ich werde nur den Benutzernamen speichern. Der Benutzername ist derselbe wie die E-Mail-Adresse oder nicht. Ich wollte den Benutzernamen der Person speichern, die zu diesem Zeitpunkt diese Option gemacht hat. Jedesmal, wenn das passiert, weiß
ich, wer es ist und dann wird es ausgeschieden NO2, wer es ist. Also lassen Sie uns einfach einen schnellen Test durchführen, um sicherzustellen, dass unsere festen funktioniert. In Ordnung, jemand hat das beim Erstellen
eines neuen Mikrofons bemerkt und du siehst, dass ich auf blazer.com einen Geschäftstest eingeloggt bin. Also ein weiteres Mikrofon aus einem Fahrzeug wäre, sagen
wir Fiat, Sieb. In Ordnung, Feuer wird gespeichert. Lassen Sie uns in Ihre Bewerbung zurückblicken. Gehen Sie zum Anzeigen von Daten. Und jetzt sehen Sie diese Audit-Entzündung. Also diejenigen, die für frühere Tests fehlen und nein, Zukunft, es sollte in Ordnung sein. Richtig.
31. WICHTIG – beheben: Hey Leute, willkommen zurück. In dieser Lektion werden wir eine wesentliche Fehlerbehebung durchführen. Und dieser Fehler ist um die Fahrzeuge
und wahrscheinlich jede andere Bearbeitungsoperation, die eine Dropdown-Liste hat zentriert . Die aktuelle Anomalie ist also, dass selbst wenn wir dieses Fahrzeug modifizieren, wenn wir etwas ändern, das wir eingeben müssen, es erfolgreich sein wird. Aber wenn wir dann die Dropdown-Listen ändern, ändert sich nichts. Wenn ich das also von schwarz zu blau ändern wollte, würde
es alles speichern, aber dann immer noch den Ursprung der Werte routinemäßig. Wir werden also adressieren, die wissen, dass der Hintergrund dieses Problems mit der Art und Weise
zu tun hat , wie wir die Daten abrufen, wenn wir gerade bearbeiten. Also in ihm, drei oder Komponenten, der Code dahinter, zumindest wenn wir die Komponentenbeladung haben, bekommen
wir das Fahrzeug jetzt in Betrieb. Unsere API ist tatsächlich mit allen Includes ausgestattet. Also sind wir tatsächlich alle Details darüber, was passiert ist, dass diese Details enthalten werden, während die IDs die Details ändern können nicht. Also auf The Putt, es ist wirklich nur erhalten das neue Objekt mit allen ursprünglichen Details enthalten. Also, was ich in dieser Lektion tun werde, ist ein weiterer Endpunkt eingeführt. Also trennen wir von „Details abrufen“. Also in der AI HTTP und ich werde
Sie nur durch die Änderungen, die ich bisher gemacht habe, führen. Also im HTTP-Repository habe
ich hier ein anderes Verhalten eingeführt, das Details ist. Also hatten wir sie bekommen bekommen Details einzuführen, die die gleichen zwei Parameter wie die get, die URL und
die ID nehmen wird. Und dann wird seine Implementierung einfach Schrägstrickdetails an das Ende anhängen. Also ist es identisch zu bekommen, außer es wird angeben, dass wir die Details im Gegensatz zu nur Get wollen. In Ordnung. Sobald Sie das in der Komponente getan haben, können
Sie fortfahren und, und Sie würden zumindest die Ansichtskomponenten ändern. Also würde sich die Edit-Komponente nicht ändern, weil sie bereits bekommt, das ist in Ordnung. Aber dann die Ansichtskomponente, in der wir tatsächlich
Details von welcher Komponente oder von welchem Objekt es ist sehen müssen . Wir werden eigentlich sagen, Details zu bekommen. Obwohl dies spezifisch für Fahrzeuge ist, kann
dies dies auch auf andere Objekte anwenden, mit denen Sie möglicherweise arbeiten. Unsere anderen Beziehungen, mit denen Sie vielleicht arbeiten. Wenn Sie die Details eines Objekts anzeigen, das Beziehungen hat und Sie
Buck enthalten Navigationseigenschaften erhalten müssen , sind Details aus anderen Tabellen enthalten. Dann werden Sie wahrscheinlich wollen, um sie all das zu teilen. Also, jetzt, da wir das auf dem Client geändert haben, schauen wir uns an, was wir im Controller oder Controller tun müssen. Ich weiß, dass ich einen Kostümpfad angegeben habe, also haben wir das Original bekommen. Und was ich getan habe, ist, alle Includes zu entfernen. Also bei dem Include-Parameter, der mit freundlicher Genehmigung unserer Arbeitseinheit kam, habe
ich das ganz herausgenommen. Es geht also wirklich nur darum, das Fahrzeug zu bekommen und nur dieses Objekt zurückzugeben, keine zusätzlichen Details oder so. Allerdings, wenn wir sehen, erhalten Details, es wird ID Slash das Wort Details nennen. In der Tat würde
dieser Endpunkt tatsächlich etwa so aussehen, wenn er angezapft wird. Auch wäre es api Schrägstrich, Schrägstrich 05 Schrägstrich das Wort Details. Also brauche ich wirklich nicht die geschweiften Klammern, weil das eher wie ein Talparameter
darstellen würde . Es ist also buchstäblich das Wort Details, das ich nach dem Ausweis erwarte. Also für diesen, nehmen
wir immer noch nur einen Parameter. Ich habe es natürlich einen anderen Namen gegeben, weil wir keinen Konflikt haben können, sagt „Holt mir könnte Schwänze sein. Und dann hat dieser eine vollständige Abfrage mit dem Parameter, der an der Operation beteiligt ist. Also, wenn dieses Fahrzeug zurückgegeben
wird, wird mit allen enthaltenen Details zurückgegeben. Also lassen Sie uns sagen, dass für einen Test. Aus unserer Liste der Fahrzeuge gehe
ich zu den Vue Komponenten. Also habe ich einen Bruchpunkt am Ende des Betrachters gesetzt. Und wenn Sie sich die Daten ansehen, die zurückgegeben werden, haben
sie diese enthalten, das Make das Modell und was auch immer noch angegeben wurde, richtig, das ist also in Ordnung, weil ich es ansehen werde. Also möchte ich alle Details aus
anderen Tabellen einschließen , um es für die Präsentation bereit zu haben. Und wenn ich zu Bearbeiten gehe, sehen
Sie, dass die Zitzen, das Original bekommen. Und dann wird dieser Get nur das Fahrzeug mit den relevanten Feldern zurückgeben, nicht mit etwas zusätzlichem. Also machen Sie IS null, das Modell ist null und
alles, was ursprünglich enthalten wäre, ist nein, nein. Also werde ich fortfahren und alle diese Drop-Down-Listen in etwas anderes ändern. Also wird das jetzt X5 sein und es ist grün. Und ich werde auf Aktualisieren klicken. Und dann, wenn ich schaue, sehe ich High-End Tag X5 und es war erfolgreich. Das ist also die Lösung für dieses Editierproblem. Wenn Sie es hatten, wenn Sie es nicht hatten, dann in Ordnung, Sie erkennen es früh und Sie haben es gelöst. Hervorragende Arbeit. Aber den laufenden Prozess der Entwicklung von Software zu tun, werden
Sie diese Anomalien in irgendeiner Form von Tests sehen. Und es ist immer gut, wenn Sie herausfinden können, wie Sie sie lösen können.
32. Validierung zu Formularen hinzufügen: Hey Leute, willkommen zurück. In dieser Lektion werden wir uns mit der Validierung beschäftigen. Validierung ist sehr wichtig. Oder die Realität an diesem Punkt ist, dass wir nicht wissen, was der Benutzer eingibt. Wir wissen nicht, ob sie überhaupt
die Datenpunkte eingeben , sind wir für wichtig halten. Denn zum Beispiel, hier sind wir mit schaffen neuen Kunden. Ich kann vielleicht nur ein bisschen Daten eingeben, sonst nichts. Und dann klicken Sie auf Create Custom Anna, wir erhalten sehr unvollständige Daten, die in die Datenbank gehen, die dem Benutzer angezeigt wird. Das ergibt keinen Sinn. Wir müssen eine Validierung hinzufügen, um sicherzustellen, dass die Daten bestimmte Anforderungen erfüllen, bevor sie
übermittelt werden können oder bevor der Benutzer fortfahren kann, diese fehlerhaften Daten in unser System einzugeben. Selbstverständlich erfolgt die Validierung mit after sowohl auf dem Erstellungsformular als auch auf unserem Bearbeitungsformular. Da die gleiche Weise können sie in unvollständigen Daten setzen, sie können zu einem vollständigen gehen unsere abgeschlossen oder erworben und
entfernt, entfernen Sie wichtige Daten und aktualisieren Sie sie dann. Und dann sind wir immer noch in der gleichen Situation, so dass Validierung über alles, was Daten sammelt, erfolgen muss. Für dieses Beispiel werden
wir Kunden verwenden. Für unser Meerschweinchen. Was ich getan habe, ist, dass ich zwei neue Felder hinzugefügt habe, Vorname und Nachname. Der Kunde der Datenklasse
, der den ganzen Weg nach unten in Shared war. Wir telefonieren Kunden, wir haben diese beiden Felder hinzugefügt. Und dann gingen wir zum Paketmanager, hatten eine gescheiterte Rechnung, aber dann fügte ich die Migration hinzu und ging dann weiter und aktualisieren Sie eine Datenbank und dann wissen, dass wir FirstName und Nachname sammeln können. Und damit das Laufwerk den Punkt nach Hause über, wenn wir Änderungen an der Datenbank vornehmen, wie in diesem Beispiel. Und wir müssen die Schnittstelle aktualisieren, um zu reflektieren, dass, wenn wir einen Komponenteninhalt mit für die Datenerfassung haben, es das Leben viel einfacher macht. Also werde ich nur unsere Kunden finden, die Komponenten bilden. Und dann kann ich die beiden Felder hier buchstäblich hinzufügen. Und sie sind sowohl für die Bearbeitung als auch für die Erstellung anwendbar. Also lass mich mich beeilen und das tun. Also für eine Weile nicht gesehen worden, dass wir
mehr Datenpunkte zu den Kunden wie FirstName,
LastNamehinzufügen könnten mehr Datenpunkte zu den Kunden wie FirstName,
LastName , wenn Sie es nicht vorher getan haben und Sie es Übelkeit Chance tun wollen, dass sie voran gehen und tun die Migration Sachen hinzugefügt an die Schnittstelle, wie Sie es für richtig halten. Und ich werde nur den Index auch ändern. Also bin ich nicht einer, der den Smoking zeigt. Ich denke, alles, was wir wirklich zeigen müssen, ist vielleicht wie der vollständige Name des Kunden, oder? Und dann kann ich hier Kundenvorname Raum sehen, um Kundennachnamen zu sagen. Also dann bekommen wir den vollständigen Namen in einer Spalte gedruckt. Alles klar, nett und leicht. Und dann können Sie buchstäblich die Ansicht anzeigen, wohin Sie gehen und die Details sehen. Das ist also die PSICQUIC-Änderung. Also lassen Sie mich einfach auf diese Lektion konzentrieren, die Validierung ist, wenn wir dieses Formular ausfüllen. Und Sie bemerken, dass wir, wenn wir das Formular erstellen, jetzt ein paar Dinge einfügen können, die ich die Validierung verliere, aber es funktioniert nicht. Also müssen wir das Formgesetz lassen, welche Regeln es leben sollte. Um diese Validierung durchzuführen, sehe
ich diese Schlüsselwortdaten auf Notationen. In Ordnung, also sind Datenanmerkungen unsere Möglichkeit, Regeln für die verschiedenen Felder festzulegen. Alles klar, was wir in einen neuen Kunden setzen, müssen
wir Vorname und Nachname eingeben. Wir müssen eine Steuer-Identifikationsnummer eingeben. Wir müssen eine E-Mail-Adresse und eine legitime
E-Mail-Adresse haben , in der die Kontaktnummer vorhanden sein muss, aber vielleicht ist dieses Kleid optional. Also lasst uns damit arbeiten. Unterschiedliche Situationen erfordern unterschiedliche Regeln, aber noch einmal ist dies unser Experiment dafür heute. Also gehe ich zu den Daten, spreche mit uns, von denen dieses Formular Radikale abgeleitet wird, wir wissen, dass es Kundenobjekt verwendet, das vom Typ Kunden ist. Die Datenklasse definiert also die Felder, die gesammelt werden können. Um also Datenanmerkungen über dem Feld hinzuzufügen, öffne
ich einfach eckige Klammern und beginne dann mit der Eingabe. Und es gibt bestimmte Schlüsselwörter, es ist nicht, sie werden anfangen zu tippen. Also, wenn ich etwas Erforderliches machen möchte, I, Typ II und erforderlich, aber dann nach dieser Anmerkungsbibliothek, und sobald das hinzugefügt wird, sehen Sie Nalgene. Also jedes Feld, das ich sehe, ist obligatorisch, kann das erforderliche TOD darüber bekommen. Okay, das erforderte eine Datenannotation. Also Adresse, ich sagte, es ist nicht zwingend. Also werde ich nur ein Leerzeichen dort setzen
, damit Sie diese Adresse sehen oder die erforderliche Flagge darüber haben. Also FirstName ist definitiv erforderlich. Eine andere Sache, die ich über das erste Thema sagen könnte, ist, dass die String-Länge maximal sein
sollte, vielleicht 100, oder? Und vielleicht minimal. Also kann ich einfach sagen, mini mom, Länge ist gleich minimale Länge, während FirstName, die in drei gesetzt ist, Sie wissen, es könnte Juwel sein oder lassen Sie es auf zwei setzen. In Ordnung. J. Oh, das ist die Mindestlängenähnlichkeit für den Nachnamen. Mindestlänge von zwei, richtig? Sie können sich nicht unbedingt alle diese Anmerkungen merken. Es gibt Zeiten, in denen ich eigentlich gehen muss und schauen muss, was sie sind. Aber der Punkt ist, dass sie da sind. Und dies ist der einfachste Weg, um die Regeln anzugeben, die jedes Feld regeln. Und eine andere Sache daran ist, dass diese Anmerkungen
manchmal tatsächlich die Datenbank beeinflussen. Also, wenn ich dies vor der Migration tat, dann würde es tatsächlich einige Anforderungen machen, die Taten
dieser Tabellen sollten basierend auf entworfen oder generiert werden, es tut mir leid, halten Sie diese Felder in den Datenbanktabellen sollte erzeugt werden und welche Einschränkungen unsere eigenen sie. Aber konzentrieren wir uns einfach auf clientseitige Validierung oder keine Toxizität. Lassen Sie das in Ruhe. Aber dann könnte ich sagen, eine Mindestlänge, maximale Länge von vielleicht 10 und eine Mindestlänge von vielleicht acht, oder? Abhängig von den Smoking-IDs, die unterstützt wurden. In Ordnung. Eine andere Sache, die Sie wahrscheinlich tun möchten, ist mit einer Kontaktnummer, Sie können etwas wie Datentyp sagen. Punkt vier Zahlen, also Datentyp und dann gebe ich an, dass dieser Datentyp vom Typ Telefonnummer ist. In Ordnung, das sind die beiden Dinge, die Ebene die Felder wie für E-Mail-Adresse informieren, ich werde nur kopieren und einfügen, aber es gibt einen Datentyp, der E-Mail-Adresse sagt. Also dann wird es versuchen, diese auf General zu validieren Rosie kann spezifischer werden und schreiben Sie Ihre eigenen Anmerkungen und Validierungen und Attribute. Aber ich werde nicht so tief hineingehen. Und richtig, nein, das sieht gut genug aus. Lassen Sie uns eine Migration machen und sehen, was kommt. Also hinzugefügt Validierungen, so nah Spender. Mal sehen. Also in dieser Migrationsdatei generiert wird, werden
Sie sehen, dass eine Reihe von ändern Spalte Commons von Gamal grau und jeder sieht, okay, und der Typ ist int varchar 15, die maximale geliehen ist 15, Phototoxizität. In Ordnung, also haben die Validierungsattribute die Data-Klasse selbst Auswirkungen auf die Migration, richtig? Das ist vielleicht nicht unbedingt das, was Sie wollen. Aus diesem Grund ist es Zeit. Wenn Sie größere Anwendungen erreichen, beginnen
Sie mit dem Abstrahieren und Erstellen von Ebenen. Sie haben also die Datenklasse und dann haben Sie eine andere Schicht für die Anwendungen, um die Datenklassen für diese Anwendungszwecke zu behindern. Und das ist normalerweise, wo Sie Ihre Validierungen einfügen, weil Sie möglicherweise nicht unbedingt Invalidierungen zwischen der Datenbank und der Client-Seite sehen möchten. In dieser Situation, da wir nur diese freigegebenen Domain-Klassen verwenden, und es ist wirklich nicht so schädlich, wenn ich bedenkt, dass, wenn ich es auf der Schnittstellenebene überprüfen werde, ich wahrscheinlich möchte, dass die Datenbank ablehnen, wenn es es trotzdem bekommen hat, oder? Das ist also, was wir bekommen, wenn wir eine Migration auf einem Tisch durchführen, der R auf einem Kreuz hat, sorry, dass diese Daten Anmerkungen und Validierungsregeln hat. Jetzt kann ich weitergehen und Datenbank aktualisieren, weil es keinen Schaden anrichtet. Aber der eigentliche Test für diese Lektion ist, was auf der Schnittstelle passiert. Hier kriege ich ein paar Pfeile. Diese Pfeile sind, weil es sagt, dass es
den Wert null nicht in eine Spalte einfügen kann Touch ID, richtig? Weil ich hier sagte, Steuernummer ist als Ergebnis erforderlich, es ändert es und sieht, dass es nicht NULL-fähig ist, senden Sie eine Datenbank NICHT null wäre, sorry, null, nullable wäre auf angekreuzt. Also kann ich nicht null übergeben. Aber ich habe früher einige Daten aus der Spalte docs id entfernt. Deshalb habe ich diese Migration das Gefühl, dass ich es dir nur erklären werde. In Ordnung. Wie auch immer, lassen Sie uns es auf
der Interface-Ebene beheben und dann können wir später auf diese Migration zurückkommen. Okay, also funktioniert unsere Nummer eins mit einem Handtuch, das Validierungen sind, obwohl das nicht genau so ist, wie ich es demonstrieren wollte. Aber sehen Sie, dass Sie hier einen Fehler bekommen. Also bekommen wir einen unbehandelten Fehler, wenn wir Trends sind und die Kunden laden.
Beachten Sie, dass wir begonnen haben, nach Kunden zu suchen, also funktionierte es. Aber wenn wir zur Konsole unseres Browsers gehen, sehen
wir hier, wo wir unsere 500 Antwort bekommen. Also also der Speer, irgendwelche Kummer? Was hier wirklich passiert ist, ist, dass wir die ungültigen Daten haben. Die Datenbank fragt die ungültige Beta ab. Und dann läuft all dieser Fehler, Fehler ,
eine vollständige Daten bis hin zu unserer Schnittstelle. Die API ist Tolkien, weil die Datenbank nicht weiß, was zu tun ist, weil sie eine Reihe von Regeln
sieht und ungültige Daten erhält, richtig? Was ich also tun werde, ist die ungültigen Daten zu bereinigen, also die Datensätze, aus denen ich die lebenswichtigen Daten entfernt habe. Also werde ich nur zum Objekt-Explorer springen. Und was ich tun werde, ist einfach zu entfernen, was Buchungen verwandt sind, also muss ich entfernen, wie der Name unserer Datenbank ist? Da gehen wir. Ich muss die Buchungen sowie die Kunden entfernen, richtig? Also lassen Sie mich einfach Daten schnell fühlen. Okay, ich habe sowieso nur eine Buchung. Diese Daten sehen Sie hier. Und so sehen Sie hier haben wir null, null, nichts in der E-Mail-Adresse und nicht-lineare Touch ID. Das ist es, was die Probleme verursacht. Also lassen Sie mich einfach die beiden entfernen. In der Buchung. Dies ist für einen Kunden mit der ID 1. Ok. Also werde ich 23 entfernen. Das sind die Werkzeugprobleme. In Ordnung. Lasst uns das versuchen. Ich habe immer noch das Aerosol angebracht, um vergessenen Vornamen und Nachnamen zu machen. Also habe ich gerade Testkunde hinzugefügt. Und wenn wir zurückgehen, sehen
wir, dass unser pH-Wert richtig geladen wird. Nein. So sehen Sie die Validierung. Wenn ungültige Daten vorhanden sind, kann sie nicht verarbeiten, was sie zurückbringen. Alles klar, also ist alles eng gekoppelt. Also, wenn wir einen neuen Benutzer erstellen, wenn ich versucht, Kunden zu erstellen, tut mir leid, erstellt einen neuen Kunden und ich versuche zu erstellen, ohne etwas, das Sie hier
sehen, dass wir diese Menge von Fehlern bekommen. Also, lass mich einfach
den Truck zum Code machen und irgendwie parallel mit dir laufen, was passiert. Erstens, die Datenannotations-Validator sieht, ich betrachte alle Daten
gültige Datenannotationen, die an das Modell angehängt sind, für das dieses Formular generiert wird. Alles klar, wir haben bereits alle Anmerkungen durchlaufen sind, das sind Anmerkungen. Es weiß, dass dies erforderlich ist, und dies ist die Datenqualität erwartet und so. Also, dass Validator, der an der Spitze unserer Farm ist, sehen
Sie, Ich beobachte das Feld, den Wert und was die Anforderungen basieren auf den Daten, auf Notationen, wenn Sie Submit drücken. In Ordnung. Sie versuchen zu sagen, senden Sie das Formular an die Datenbank. Wir sorgen nur für ungültige Übermittlung,
was bedeutet, dass die ungültige Übermittlung ungerade Modi automatisch ist. Wir können eine ungültige Einreichung einreichen, aber wir gehen nicht so weit. Der Punkt ist, dass
es bei der Einreichung nicht sagen wird, nun, das ist die Validierungszusammenfassung. Wenn die Seite neu geladen
wird, zeigt die Zusammenfassung die einzige Möglichkeit, die Seite
nicht neu zu laden, ist, wenn alles gültig war und fortfahren könnte. Wenn die Seite also neu lädt, zeigt sie diese Validierungszusammenfassung an. Und dann haben wir diese Validierungsmethoden spezifisch das Feld, das unter jedem erscheint, richtig? Also dann bekommen wir dies unter jedem Feld, welches diese Nachricht tatsächlich angepasst werden kann. Da in der erforderlichen konnten wir Nachricht setzen 0, Fehlermeldung. Da gehen wir. Und wir konnten so etwas wie und TR sehen, Smoking. Ich D, okay, das war's. So können wir es wie eine benutzerdefinierte Nachricht anstelle
dieser Standardnachricht einfügen, um das Feld zu sehen ist erforderlich. Sie können diese Fehlermeldung basierend auf der Anforderung einfügen. Und dann können
Sie im Grunde für jeden von diesen die Fehlermeldung angeben, die Sie wollen, oder? So konnten Sie den Namen, unsere Aktien-ID sehen, so dass Tucks ID nicht Längenanforderungen erfüllt. In Ordnung, also mit diesen beiden Nachrichten werde
ich mich auffrischen und ich werde nur auf das Steuer-ID-Feld achten. In Ordnung, also habe ich die Seite neu geladen. Ich versuchte es noch einmal und merke Enterotoxin, das ist es, was auftaucht. So kommt unsere benutzerdefinierte Nachricht, weil sie erforderlich ist und nichts zur Verfügung gestellt wird. Und wenn ich eine reinstelle,
denken Sie daran, dass wir gesagt haben, dass es minimal sein muss,
gehen Siein denken Sie daran, dass wir gesagt haben, dass es minimal sein muss,
gehen Sie das Land, was auch immer das Land war, aber schauen Sie es an. Nein, Touch ID erfüllt nicht die Längenanforderungen. So sieht die Nachricht mit fast kontextuell
auf der Grundlage , welche Regel zu diesem Zeitpunkt verletzt wird. Derzeit, wenn es erforderlich ist und nichts da ist, dann muss ich nicht Längenanforderungen erwähnen und die Änderung automatisch betrachten. Also, wenn ich beginne, diese alten Leute zu füllen und ich diesen einen Archibald nenne, und dann sieh dir das an. - Douglas. In Ordnung. In Ordnung. Und wir füllen die Tasche. Cool. Wenn ich sage, erstellen Sie Kunde, schauen Sie sich das an, aber dann ist die E-Mail-Adresse immer noch nicht ganz erfüllt unsere Anforderungen. Wenn ich zu Bearbeiten gehen, dann müssen wir sicherstellen, dass die richtige Validierung auf unserer EMEA, die trinken. Dafür brauchen wir eigentlich diese Anmerkung, die E-Mail-Adresse sagt. Also ja, wir können Datentyp sehen. Ich denke, das ist eher zu Informationszwecken, oder? Aber dann sehen wir an dieser Stelle gültige Bits und E-Mail-Adresse. Und ich denke, für die Telefonnummer, wir könnten auch Telefon sehen. Da gehen wir. Sie haben also verschiedene Validierungen für verschiedene Datentypen. Ich werde wahrscheinlich nicht so streng auf die Telefonnummer sein, weil ich nicht sicher bin, welche Regeln die Validierung von einem spielt, aber wir wollten definitiv streng auf die E-Mail-Adresse sein. Also lasst uns das noch mal versuchen. Also bin ich Buck in der Bearbeitungsansicht für diesen Kunden, wenn ich versucht habe, zu aktualisieren, beachten Sie, dass es diese E-Mail-Adresse nicht ablehnen wird, keine gültige E-Mail-Adresse, nachdem Sie sicherstellen, dass ich
etwas eingefügt habe, das wie ein typisches E- e-Mail-Adresse. Und dann ist es zufrieden, Ich klicke auf Update und wir sind gut zu gehen. Nun, da wir gültige Daten in diesen Feldern
in unserer Datenbank haben , lassen Sie mich versuchen, diese Migration erneut auszuführen. Also ist die Migration, sind da, ich muss nur sehen, dass es Datenbank aktualisieren. Und da gehen wir, es ist erledigt. Also jetzt haben wir alle die neuen Felder und die neuen Einschränkungen gehören all diese Felder, richtig? Also auf der Datenbankebene,
wenn Sie wissen, dass Datenbankdesign und
Entwicklungsbeschränkungen Regeln für Walk gespeichert werden können. So können Sie mit dem Code angeben. Erste Annäherung, die Regeln rund um das, was in der ganzen Halle gespeichert werden kann. Es, wenn wir n varchar und die Größe sagen, so können Sie die Größe bestimmen. Aber dann sind einige dieser Dinge natürlich mehr Client-Seite als Datenbankseite. Ordnung? Aus einer gemeinsamen Perspektive ist
dies also gut, weil wir halten der Client sollte sich verhalten und halten die Datenbank sollte sich verhalten. Aber wieder einmal gibt es Zeiten, denen
die Regeln zu diesem Zeitpunkt nicht notwendigerweise in beide Richtungen gehen, Sie möchten eine andere Ebene der
Behinderung einführen oder wo auch immer Modelle anzeigen, die bestimmen, was die Client-Seite oder die Benutzeroberfläche unterscheidet sich von der Datenbank und was die Domänenobjekte tun. Jetzt, da Sie ein Loch haben, um Ihre Unterarme zu validieren,kennen
Sie die übliche Herausforderung, kennen
Sie die übliche Herausforderung, gehen Sie vor und fügen ähnliche Validierungen zu den anderen Tabellen hinzu, wie Sie es für richtig halten. Also ich werde nicht unbedingt
dieses mit dir überprüfen , weil dieses mehr Kontexte ist. Möglicherweise benötigen Sie Validierungen, die ich nicht unbedingt als wichtig sehe und umgekehrt. So gehen Sie voran und schauen Sie sich Ihre Datenanforderungen an. Sie haben geschäftliche Anforderungen, was auch immer es ist, wissen Sie,
wie Sie möchten, dass Ihre Daten aussehen und Ihre Validierungen entsprechend hinzufügen.
33. Blazor – Details: Hey Leute, willkommen zurück. In dieser Lektion möchten
wir eine Komponente einrichten, die es uns ermöglicht,
die Details eines bestimmten Datensatzkontexts anzuzeigen . Hier ist unser Kunde. Jetzt wissen wir, dass wir bei der Erstellung des Kunden mehr als nur 1234 Bits Daten eingegeben
haben. Wir geben auch Steuer-ID und Adresse ein. Und nun, ich denke, das ist der Punkt. Der Punkt ist, dass wir in der Lage sein wollen
, zu sehen und deshalb haben wir diesen blauen Knopf hier, der für die Betrachtung sein würde. Also müssen wir diese Komponente einstellen. Nun, es gibt zwei Möglichkeiten, darüber nachzudenken. Erstens, es muss schreibgeschützt sein, weil wir nicht auf die Schaltfläche Ansicht gehen
wollen und dann tun müssen. Wir möchten nicht, dass es bearbeitet werden kann, da wir die Details anzeigen. Das ist auch eins. Wie genau legen wir gesagt? Eine gängige Art, es in einem schönen Detail zu legen. Unser Feld auf der linken Seite, Detail auf die richtige Art von Format. Einige Leute wirklich nur wiederverwenden die gleiche Farm Leo, die in der erstellen und bearbeiten und anzeigen verwendet
wurde, aber in einer schreibgeschützten Weise. Also denke ich, wir werden diese verwenden, weil diese wirklich einfach zu implementieren ist. Sie können Ihr Design immer ändern. Hallo Sie wünschen, aber ich werde Ihnen einige weitere Tricks und Dinge, die wir tun können, um zu erweitern oder Form Komponente relativ zu den verschiedenen Zwecken haben bereits die Formularkomponenten erstellen, wir haben es Bearbeitung jetzt werden wir es verwenden , um nur die Ansicht zu tun, werden weitergelesen. also den Kundenbereich als Beispiel verwenden, gehen
wir voran und fügen eine neue Komponente hinzu. Sie können es anzeigen oder Details Alkohol in Details nennen. Und was ich glaube, wir verwenden das Wort Ansicht. Wir haben unseren Kopf gemacht, also lassen Sie mich Details entfernen und das noch einmal tun. Lassen Sie mich eine neue Komponente erstellen und ich werde sie
Ansicht in Übereinstimmung mit der Namenskonvention nennen , mit der wir begonnen haben. Unsere Komponente wird also View genannt. Auf unserer Komponente müssen wir etwas Ähnliches wie die Bearbeitung tun. Also werden wir definitiv alle
diese an der Spitze brauchen, weil wir auf die Seite navigieren müssen, aber diese wird Ansicht sein. Und dann müssen wir unseren HTTP-Client sowie unsere Navigation haben. Nun, wir brauchen wahrscheinlich nicht unbedingt den Navigationsmanager, aber wir werden sehen, was wir tun. Wir müssen auch sicherstellen, dass wir unsere Gruben laden. Also lassen Sie mich einfach alles kopieren, um unsere Ansicht zu setzen
, weil wir diese Komponente wiederverwenden werden. Ordnung? Nein, ich behalte das alles, weil die Parameter eingehen, welchen Kunden möchte ich anzeigen? Wir akzeptieren die ID und dann gehen wir und holen den Kunden. Ich brauche diese Bearbeitung jedoch nicht, weil die Bearbeitung auf dieser Komponente erfolgt. Lassen Sie uns auf dieses Formular Komponenten Abschnitt 1 konzentrieren, ich brauche keine Schaltfläche nimmt, weil ich wirklich nicht möchte, dass eine Schaltfläche sowieso angezeigt wird, ich muss das nicht einstellen. Ich muss nicht auf gültiges Senden sitzen, da es keine Einreichung gibt, die passieren wird. Aber eine Sache, die ich gerne tun würde, ist,
der Formularkomponente mitzuteilen , dass, wenn sie von dieser Seite geladen wird, sie deaktiviert werden sollte. Also werde ich einen neuen Parameter hinzufügen. Ich werde es den Zobel nennen. Und das wird einen Boolean haben. Es ist entweder wahr oder falsch. Entweder wird es deaktiviert oder nicht. In Ordnung. Beachten Sie, dass es blau ist, weil wir Formularkomponente nicht geändert haben, um sie zu erkennen. Also lassen Sie uns gehen, um Komponente zu bilden und unsere Modifikation vorzunehmen. Also brauchen wir diesen neuen Parameter namens deaktiviert. Nun, ich nenne es die Behinderten, also bedeutet das Strom nicht hier. Also werde ich es als deaktiviert bezeichnen. Wo bin ich? Da gehen wir. Und es wird einen Standardwert von false haben. Alles klar, das bedeutet, wenn es nicht angegeben ist, genau wie bei unserem Button nimmt, wenn es nicht angegeben ist, dann nehmen Sie an, dass die Farm nicht deaktiviert ist. Okay, schnell, wir können leicht sehen, ob und dann unser AdSense, tut mir leid. Und dann WENN. Und dann können wir hier drinnen sehen, ob es deaktiviert ist oder ob es nicht deaktiviert ist. Das bedeutet, wenn deaktiviert falsch ist, dann zeigen Sie die Schaltfläche an. Ordnung, also zeigen Sie nur diese Schaltfläche an, die besagt, dass Update gespeichert wird, wenn deaktiviert falsch ist. Alles klar, jetzt, da es sich auf das Formular bezieht und die Farm deaktiviert, und eine schöne einfache Möglichkeit, eine Reihe von Feldern zu deaktivieren. Genug Form wäre, sie alle in
eine Feldgruppe zu wickeln und dann den Feldsatz zu deaktivieren. Also lasst uns das machen. Also werde ich hinzufügen, einfach alle zusammenbrechen, um es
einfacher zu machen , damit wir genau sehen können, wo alles beginnt und endet. Und dann werde ich dieses Tag namens Fields erstellen, sitzen offen und schließen Sie es. Aber dann werde ich angeben, dass deaktiviert gleich ist und das wahr oder falsch wäre. Wenn ich also wahr sagte, dann ist dieser Fötus, wenn er sich eingestellt fühlt, sorry, deaktiviert. Wenn ich sage fällt, hätte sich nichts geändert. Allerdings weiß ich nicht, ob es wahr ist oder Fazio sowieso, ich weiß ist, was durch den Parameter kommt. Also werde ich sehen, deaktiviert wird, wird den gleichen Wert nehmen, den dieser Parameter hat. Und dann kann ich all das in dieses Feld setzen. Die Schaltfläche wird angezeigt, wenn deaktiviert ist gleich false,
also C, und dies ist die CML, die äquivalent von false sieht. Nur um den Fall zu erklären, dass du ein Anfänger bist und das ist der Knopf. Und dann haben wir immer noch den Bazillus, denn wenn wir sehen, wollen wir immer noch die Möglichkeit, zurück zur Liste zu gehen. Alles klar, das ist so ziemlich das, was wir hier tun. Also lassen Sie uns zurück und gehen Sie zurück zu View. Und dann sehen Sie, wissen Sie, es zu erkennen ist, dass die deaktivierten auf den anderen Komponenten
wahr sind, die diese Formularkomponente verwenden. Wir müssen nichts mit deaktiviertem angeben, da wir es als Standard auf false setzen. Also lasst uns das für einen Spin nehmen. Alles klar, wenn ich gehe und auf Ansicht klicke, schau dir an, was passiert. Alle Daten sind da. Für schreibgeschützten Symboltyp. Alle diese sind deaktiviert. Es gibt hier keinen Button, um unsere Kreationen zu speichern. Und ich kann nur zurück zu List. Und da gehen wir. Also, jetzt kann ich Amerika sehen. Es ist schön und einfach. Und es brauchte nicht viel Mühe. Wieder einmal, alles, was wir getan haben, war, unsere Formularkomponenten zu erweitern, um
einen anderen Parameter in Form von deaktiviert zu nehmen , was ein boolescher Wert ist, den wir standardmäßig auf false gesetzt haben. Und dann setzen wir diese if-Anweisung oder auf die Anzeige der Schaltfläche. Wenn deaktivieren Sie dies fällt, dann zeigen Sie die Schaltfläche an. Und wir haben bereits die Duktilität. Also haben wir das natürlich nicht in die Aussage gesetzt. Und das nächste, was wir getan haben, war auf der View-Komponente, wir gehen voran und holen unseren Datensatz. Grundsätzlich, wenn das Unternehmen die ID bekommt. Und dann laden wir unsere Formularkomponente mit diesen Kundendaten und deaktivieren sie auf dem Weg. Alles klar, das war's wirklich. So können Sie fortfahren und dasselbe Muster auf
die anderen Komponenten von Ansichtskomponenten anwenden , die Sie haben.
34. Bereinigung und Änderungen in GitHub: Alles klar, Leute, in dieser Lektion werden wir nur überprüfen, was wir für
diesen gesamten Abschnitt getan haben und unsere Änderungen in GitHub überprüfen, sie festschreiben. So kommt mein Weg zurück,
was wir getan haben, war Explorer, wie wir mit der restlichen API von Blazer kommunizieren. Die meisten unserer Komponenten hätten also diesen HTTP-Client injiziert und dann Code, um zu verfolgen, wo wir diesen Aufruf gemacht haben. Wir haben auch untersucht, wie wir die Endpunkte erreichen können, die einfacher
in den verschiedenen Komponenten zu verwenden sind und das Fehlerrisiko reduzieren können. Und wir haben uns die Erstellung wiederverwendbarer Komponenten angesehen, nämlich in Form dieser Formularkomponente, wo wir sie sowohl für unsere Create-Bearbeitung verwenden und dann sahen
wir, wie wir sie erweitern konnten, um auch für schreibgeschützte Szenarien zu verwenden. Wir haben auch einige andere Komponenten wie diese Überschrift Komponenten eingeführt. Also haben wir das nicht gemeinsam durchgemacht. Ich habe es eingeführt, nur wissen, wo ich Bootstrap, Jumbotron Stil verwende. Ordnung? Und in, Injektion dieses Kreditnehmers tut mir leid, Ich warte auf einen Parameter namens Text, die ich gerade anzeigen werde. Das ist also praktisch wie auf unserer Indexseite, wo wir trans
sein mussten oder sich an alles erinnern mussten, was wir mit diesem Gras jedes Mal drei Jahre alt werden wollten. So können wir diese Überschriften durch
diese Überschriftenkomponente ersetzen und wir geben einfach den Text, den wir anzeigen möchten. Also wiederverwendbare Komponenten, richtig? Nun, so richten Sie die Menge für alle unsere Ressourcen. So können alle unsere Ressourcen jetzt die Daten erstellen, aktualisieren ,
löschen und nur anzeigen, die dort sind. In unserer API. Wir schreiben es falsch auf, wo wir den API-Schrägstrich vom Pfad entfernt haben, während dies einen Konflikt im Routing verursachte. Also am Poupon api Schrägstrich. Und nur um Ihnen noch einmal zu zeigen, was wir mit unserer Endpunktdatei gemacht
haben, haben wir gerade eine statische Klasse mit statischen Strings erstellt , die nur die verschiedenen Endpunkte pro Ressource aufgebaut haben. Wenn Sie also eine andere Ressource erhalten, die Sie in der API benötigen, können
Sie sie einfach für das Institut hier machen und
sie an anderer Stelle und in der Anwendung entsprechend wiederverwenden . Wir haben uns auch die Datenvalidierung und das Loch angesehen. Das Hinzufügen von Datenannotationen zu unseren Domain-Klassen wirkt sich nicht nur darauf aus, dass die UA sich mit der Validierung auf Farmebene befasst. Auch, wie die Datenbank, diese Einschränkungen beim Erstellen von Zwischen-, Erstellen der Tabellen sie auf Datenbankebene ändern. Also sehen wir, wieder einmal, wir besprochen, dass es Zeiten gibt, in denen Sie vielleicht diese beiden trennen wollen, aber für nein, wie Oh, wir lernen nur, dass wir nicht so weit voran gehen. Ich will nur das nicht bedeuten. Also lassen Sie uns einfach voran gehen und gehen, um Änderungen zu bekommen. Und das ist meine schnelle Nachricht. Und dann werde ich einfach weitermachen und alles begehen. Und wenn das erledigt ist, kannst
du eine Pause machen und ich sehe dich in der nächsten Lektion wieder.
35. Verwendung eines Code-Behind wie man a: Hey Leute, In dieser Lektion werden wir über Bowl sprechen können völlig
unsere u coder oder Markup Zitat von unserer Logik oder dem C-Sharp-Code trennen ? Nein. Tatsache ist, dass das, was wir bisher haben, funktioniert, oder? Wir haben einige C scharfe Mark-up oben. Diese sind eher wie Direktiven. Das ist eine Seite. Selbst diese Dinge und autorisieren, sind alle Richtlinien. An der Spitze haben wir unser Markup, das eine Hybride der Ariza-Syntax auf HTML-Syntax ist. Und dann haben wir unseren Code oder Logik Abschnitt unten. Nein, alles funktioniert so, wie es ist. Aber dann gibt es einen Ansatz, den wir nehmen können, wo wir tatsächlich zwei separate Dateien haben. Eine für nur das Markup, wie wir hier sehen. Und dann können wir unsere bestimmten Teile
unserer Logik und C-Sharp-Code in unseren Code hinter Datei migrieren . In Ordnung, also werde ich anfangen, die Farben index.js oder Komponente zu verwenden. Ich denke, das ist schön und einfach genug für uns, aufzustehen und das Konzept
unter die Finger zu bekommen , bevor wir weitermachen und den Rest unserer Komponenten tun, wenn Sie es wünschen, geht es, das ist völlig optional. Es gibt nichts, was sagt, dass Sie es tun müssen, oder wenn Sie es nicht tun, tun
Sie nicht etwas richtig. Es hängt von Ihren Zielen ab, es hängt natürlich
von Ihrem Kontext ab, aber zumindest wissen Sie, wie es zu tun ist, sollte die Notwendigkeit entstehen. Also, was wir tun werden, ist eine neue Klasse in den gleichen Ordner mit unseren Komponenten hinzufügen. Und wir werden dieser Klasse den gleichen Namen geben. Also ist es index.js, Razor Bullets und extra Erweiterung Punkt CSS. Also ist es der Komponentenname dots raise oder dot cs. Alles klar, wir gehen weiter und klicken Sie auf Hinzufügen. Und was Sie im Lösungs-Explorer bemerken könnten, ist, dass Ihre Indexdatei unter der Index-Razor-Komponente verschachtelt wird. Manchmal passiert es nicht, manchmal passiert es nicht für mich. Es könnte für dich gewesen sein, aber das ist kein Problem. Solange die Datei angezeigt wird und Sie den Namen falsch gemacht haben, sollte es funktionieren. Also öffnen Sie dann diese Klassendatei und ein wir haben öffentliche Partials. Partielle Mittel, dass dies
eine halbe Implementierung ist , sind Teil der Implementierung einer anderen Klasse, richtig? Also gibt es eine Komponente ist eine Klasse und wir sehen, nun, die C-Sharp-Klasse, die wir tun, ist ein Teil davon. Also werden sie alle zusammenarbeiten. Sie werden nur automatisch gebunden, um ihnen nein zu geben, das ist okay. Diese beiden gehören zueinander, richtig? Also das ist alles beginnt mit der Migration einiger eisten-Direktiven, null. Wir hatten Injektionen, jemanden, der diese Injektionen einnimmt, all unsere Komponenten. Und ich werde sie in der Klasse richtig platzieren. Nun, anstatt die Außenseite injizieren zu lassen, was wir haben werden, ist offene quadratische Klammer, Kopf ich injiziere schließen quadratische Klammer. Und wir müssen einige Bibliotheken enthalten, nämlich die dotnet Kernkomponenten, die ich ihr Ziel variiere. Und dann in anderen Bibliotheken für diese, für die Kunden und diese anderen Bibliotheken, die wir brauchen. Also gehen wir voran und injizieren und tun dasselbe für die JS Runtime. Dann können wir dies als Get und setzen Sie sich auf diese beiden Eigenschaften. In Ordnung. Sie können die injizierbare setzen, so dass sie neben ihm wollte, Sorry, wollte darüber. Es spielt keine Rolle. Hat Ozzie, Sie haben die richtige Syntax und Sie sind gut zu gehen. Nun, nachdem ich das getan habe, ist das nächste, was ich überziehen möchte, die ganze Logik, richtig? Also werde ich all das nehmen müssen und ich werde es schneiden. Es ist doch eine Migration. Nun ist die Sache, wenn Sie den Code verdoppeln und Sie eine Menge Arezzo Boote bekommen. Es existiert bereits. Lassen Sie mich Ihnen ein Beispiel zeigen. Wenn ich also den Code hier lasse, kopierte
ich ihn und füge ihn hier drüben ein, dann wirst du anfangen, Fehler zu sehen. Nun, eigentlich, wenn ich die Direktiven nicht verschoben habe, also wenn ich es hier injiziert habe, sowie es in den Code dahinter injiziert habe und Sie beginnen Dinge über das bereits existierende zu
sehen. Oder Sie haben eine doppelte Initialisierung von etwas,
was nicht eine sehr schlechte Errata auf hier als Beispiel ist, Zweideutigkeit zwischen diesem, dieser Eigenschaft, richtig? Es ist einfach hier, und es sieht es auch dort. Also, wenn Sie diese Art von Fehler gesehen haben, wenn Sie kopieren und einfügen und wissen, es funktioniert. Also, da ich das gesagt habe, lass mich das noch einmal entfernen und dann vorwärts gehen. Ich sehe die Hälfte dieser Bereiche von verschwundenen, die fehlenden Bibliotheken für unsere oder Bits Code. Und nachdem ich all das gemacht habe, wo fehlerfrei auf beiden Seiten, wenn ich einen Build mache, okay, also war unser Build erfolgreich und jetzt lass es uns einfach für einen Spin nehmen und sicherstellen, dass es funktioniert. Aber bevor ich das mache, ist das, was ich tun werde,
nur eine schnelle Konsolenpunkt-Schreibzeile direkt hier und die nicht initialisierte Asynchrone einzuführen , die nur Heizcode dahinter sagen wird. Dies ist also, dies ermöglicht es uns von der Konsole im Browser selbst, diese Nachricht zu sehen. Und dann werden wir wissen, dass es definitiv den Code hinter
nicht verdienenden Komponente als kein Code und keine Injektionen trifft . Na gut, also gehen wir einfach weiter und nehmen das für uns. In Ordnung, also hier haben wir unsere Farbseite getroffen und alles ist wie gewohnt Klon-Buck. Lassen Sie mich einfach zum Inspect-Element auf der Konsole gehen und Sie werden hier die Zeile
console.log sehen , die wir in den Code hinter Ihrem Kopf setzen. Wenn Sie also irgendwann
etwas auf die Konsole ausdrucken möchten oder wissen, läuft etwas schief. Ich will wissen, ob du in der Ecke sitzen würdest oder was auch immer. Sie können immer, dass console.log diese Zeile verwenden und es wird tatsächlich nur in die Konsole im Browser schreiben. In Ordnung, also kann ich einfach die Linie entfernen. Und da gehst du. Das ist wirklich alles, was es gibt, um Ihren Code in einen Code hinter der Datei zu verschieben. einmal ist dies eigentlich sehr fakultativ. Du musst das nicht tun. Es gibt keine Bestimmung, dass Sie dies tun müssen. Wie Sie gesehen haben, haben wir bis zu diesem Punkt alles funktioniert. So können Sie voran gehen und das für den Rest der Komponenten tun. Wissen Sie, eine Herausforderung selbst migriert über den Code, aber natürlich werde ich es tun. Und später haben Sie meinen Code zum Vergleichen, nur für den Fall, dass Sie auf Schwierigkeiten stoßen.
36. Globale Fehlerbehandlung: Hey Leute, willkommen zurück. In dieser Lektion werden wir also über die globale Fehlerbehandlung sprechen. Keine Fehlerbehandlung in c-sharp wird wirklich durch das getan, was wir eine try-catch-Anweisungen nennen werden. Also habe ich einfach das Tablett eingegeben, zweimal Tab
drücken und dann haben wir diesen Codeblock bekommen, richtig? Versuchen Sie, etwas zu tun, fangen Sie jeden Fehler auf, der Ihren Weg kommt. Werfen bedeutet, dass das Programm abstürzt. Also denken Sie einfach darüber nach, wenn Sie nicht so vertraut sind, was Fehlerbehandlung ist,
außerhalb von dem, was ich Ihnen gerade gezeigt habe,
denken Sie darüber nach, jedes Mal, wenn Sie eine Anwendung verwenden wenn etwas schief geht, es hat einen Pfeil. Es macht eines von zwei Dingen. Entweder wird eine Fehlermeldung angezeigt, die besagt, hey, du weißt, was du versucht hast, es hat nicht ganz funktioniert. Diese Drachen, das Programm läuft noch. Oder manchmal wirft es tatsächlich nur die alte Art von Programm, Hey, wollen doodle ist ungültig und dann stürzt das Programm ab und subs arbeiten. Das ist also im Wesentlichen die Fehlerbehandlung. So können Sie entweder das Programm
durch die throw-Anweisung abstürzen , die ich nur begradigen möchte. Oder Sie können etwas Aktion ausführen. Zeigen Sie eine Nachricht, lassen Sie den Benutzer wissen, hey, wissen Sie, etwas ist schief gelaufen, bitte versuchen Sie es erneut und dann können sie es erneut versuchen. Wir hätten gesehen, dass wir in der Vergangenheit
einige Änderungen vorgenommen haben und ich denke, wir versuchen, meine Buchungen noch die Liste der Buchungen zu bekommen. Du hättest gesehen, dass gelbe Balken kommen und in
die Konsole gehen und den Fehler durchlesen und dann trendy Bogan, Trendfix auf Phenol, was war falsch? Offensichtlich würden Sie nicht unbedingt diese Art von Benutzererfahrung für Ihr Ohr, den
tatsächlichen Benutzer wollen , es ist in Ordnung für Sie als Entwickler, weil Sie es reparieren müssen. Aber wenn der Benutzer das Programm benutzt, möchten
Sie nicht, dass sie nachladen sehen und unser Gelb durch etwas schief gelaufen ist. Ich bin nur ein V-Pfeil. Was wir in dieser Lektion tun möchten, ist das Setup. Ein Weg, mit dem wir Fehler umgehen können, egal wo sie in
unserer Anwendung auftreten , während wir so wenig Code wie möglich schreiben. Das ist auch der Schlüssel. Natürlich ist Ticketing-Kontexte, weil, wissen
Sie, Zitat, nicht unbedingt schlecht, aber Sie möchten diese try-catch-Blöcke nicht
jedes Mal schreiben müssen , wenn Sie eine Operation ausführen, die diesen API-Aufruf hat. Denn wenn sich die API anfühlt, wird sich unsere Anwendung so anfühlen, wie wir gesehen haben. Aber dann müssten wir diesen Try Catch an
jedem Ort schreiben , an dem wir einen API-Aufruf gemacht hätten. Und wie Sie sehen können, spucke ich alles Es ist die Logik und die Rasierkomponente Phys und das wäre eine ganze Reihe. In Ordnung. Also wollen Sie wahrscheinlich nicht unbedingt diesen Ansatz verfolgen. Es würde funktionieren, aber wir werden es auf eine andere Weise versuchen. Was wir also tun werden, um unsere globale Fehlerbehandlung zu implementieren ist die Installation dieses Pakets namens HTTP-Client Interceptor. Also gehen wir einfach zu neuen bekommen in unserer Client-Anwendung. Und wir suchen nach HTTP-Client-Interceptor. Also gehen wir voran und installieren Toolbelt, Dot Blazer, Dot Interceptor. Nun, nachdem das installiert wurde, gehen
wir zu unserer Datei program.cs gehen, und dann werden wir ein paar Anpassungen vornehmen,
beginnend mit unseren Gebäudediensten, die HTTP-Client hinzufügen. Also werde ich diesen Klienten hier ändern. Wann man Klammern öffnet und schließt, und ich werde nur für kurze SP setzen. Und nun, wir können das Wort Client herausziehen. Also, weil es taube Arten arbeiten. So SVN-Client. Und dann werde ich eine geschweifte Klammer öffnen und schließen, aber ich werde es zuerst öffnen. Und dann nach der Definition der Client-Basisadresse werde
ich diese geschweifte Klammer schließen. In Ordnung? Oder wenn mit mir hier, und dann danach setzen wir ein Semikolon und dann bringen wir 29 wieder. Da gehen wir. Also haben wir, statt nur Client öffnet und schließt Klammern hält Sb, die den Dienstleister repräsentiert, richtig? Und dann die Pflanzen, die den HTTP-Client darstellt. Und dann öffnen wir die geschweifte Klammer und definieren dann, was die Basisadresse für den Client ist. Wir ändern diese Zeile nicht, sehen wir
nicht, dass wir ein Semikolon hinzufügen. Dann schließen wir die geschweifte Klammer und schließen, dass Klammern sind. Wir ändern das auch nicht, aber innerhalb dieser geschweiften Klammern werde
ich auch
die Client-Punkte und knabbern abfangen. Alles klar, und dann muss ich diesen Bibliotheks-Toolbelt einschließen. Was war es Toolbelt, Dr. Blaser, Erweiterungen, Abhängigkeitsinjektion. Da gehen wir. Und dann innerhalb davon werden
wir alle einen Service-Provider setzen, was Geschwindigkeit oder Service-Provider-Objekt ist,
das wir dort definiert haben. In Ordnung, dann können wir das Semikolon dort setzen. Und danach gehen wir nach Dawn ein bisschen mehr, nur eine Kugel hier. Das ist gut. Wir können unsere in unseren Abfangdiensten registrieren. So werden Builder Dots Dienstleistungen sagen. Punkte fügen HTTP-Client-Interceptor hinzu. Der Zweck des Abfangs besteht also darin, Bone zu sitzen und
alle API-Aufrufe zu überwachen , und es wird wissen, ob es
eine erfolgreiche Antwort war , sind nicht bevor es zurückkommt. Also haben wir schon irgendwie durchgemacht,
was wir schon irgendwie
durchgemacht Erfolg aussieht und wie ein erfolgloser Anruf es in Bezug auf die Rückgabecodes aussieht, richtig? Es ist, Sie wissen, dass 500, 400, die sind nicht erfolgreich. 200 ist in der Regel erfolgreich, einhundertdreihundert, das bedeutet, dass einige Menge an Erfolg oder der Erfolg wurde nicht erreicht Angst. Was passiert, ist, dass, wenn Sie zu 500 kommen und etwas schief gelaufen ist, die Anwendung selbst, wie wir gesehen haben, einfach eine sehr vage verwenden, es sagt Ihnen nicht, was genau schief gelaufen ist. Kunst lässt den Benutzer nicht wissen, hey, wissen
Sie, technische Schwierigkeiten ziehen sich später. Das ist es, was wir hier erreichen wollen. Aber der Abfangjäger wird ein netter sein. Saubere Art, dass dieser Code
überall überwacht wird , ohne dass wir versuchen fangen überall schreiben müssen. Danach müssen wir eine Codedatei erstellen, damit der Interceptor wissen kann, wie er sich verhalten soll, unter welchen Umständen. Anstelle des Client-Projekts nehme
ich an, dass ein neuer Ordner erstellt wird. Ich werde es nur seine Dienste nennen. Und dann fügen wir in Dienstleistungen eine neue Klasse hinzu. Und ich werde es http Abfangdienst nennen. Es UDP Abfangen des Dienstes. Und wir gehen weiter und fügen das hinzu. Und wir werden mit einem Konstruktor beginnen. Also müssen wir zwei Dinge injizieren, um sehr spezifisch zu sein. Wir brauchen den HTTP-Abfangjäger und wir brauchen unser Navi, Monica. So können wir einfach voran gehen und diese in die Parameter für unseren Konstruktor setzen. Gehen Sie weiter und fügen Sie alle fehlenden Referenzen ein. Jetzt bekommen wir in eine coole kleine Sache hier, um sie
tatsächlich in den kalten Ergebnissen initialisiert zu bekommen , wissen Sie,
Geld, während Sie es schreiben oder wir haben Windows, klicken Sie auf die Glühbirne und dann sagen wir erstellen und zuweisen Feld. So wird es einfach automatisch voran gehen und
ein zugewiesenes Feld erstellen und das ganze im Auswurf tun. So können wir das für beide Parameter tun, sowohl
für den Manager als auch für den Interceptor. Und beachten Sie, dass ich Feld nicht Eigentum verwende, weil es private Gier ist, oder das Recht. Standardmäßig kommt es nicht mit dem Unterstrich. Also werde ich nur auf Partituren setzen, um mit der Namenskonvention
konsistent zu sein , die ich bis zu diesem Punkt verwendet habe. Aber das ist keine große Sache. Außerhalb des Smith. Du verwendest das nur, weil sie dieselben Namen haben. Also, das ist in Ordnung. Wir können weitermachen, wissen, dass wir unsere Injektionen gemacht haben. Und das erste, was wir tun werden, ist,
etwas wie einen Ereignishandler in diesem einzurichten . Dies wird als Wollte bezeichnet, um kontinuierlich einen weiteren Aufruf zu etwas zu machen. Es ist also wie ein Ereignis, oder? Also werde ich sagen, öffentliche Leere,
Nehmen wir an, Überwachungsereignis, richtig? Und ich werde nur diese 19 Initialisierung machen und Abfangpunkt sehen. Und dann sehen Sie, hier sind unsere Veranstaltungen, die wir Brot aufstellen können. Also werde ich nach dem Senden sagen und dann tun, es ist wie ein Inkrement. Also nach cin, dh kontinuierlich jedes Mal, wenn Sie dies tun, machen Sie
einfach diesen Funktionsaufruf. Also werde ich Inter-Response sehen. Wieder einmal wollen wir
dies, das wird zwischen unserem Client und dem API-Aufruf sitzen. Also muss es tatsächlich beobachten, wenn ein Anruf getätigt wird, Butlers diejenigen vor dem Client
holen und dann tragbar, um
Ihnen zu sagen, was es tun soll, wenn es die Antwort abfängt. In Ordnung, also wenn wir unsere Antwort abfangen, ist es, zu bewerten, welche Art von Reaktion es ist und eine Aktion zu ergreifen. Also generiere ich nur die Methode für Abfangantwort, private void, Abfangantwort und den Absender und die Ereignisargumente. Wenn Sie jemals mit WinForms oder Webformularen gearbeitet haben, würden
Sie alles darüber wissen, wenn Sie sie natürlich nie außerhalb dieses Kontexts erstellen mussten, aber lassen Sie uns fortfahren. Was wir also tun wollen, ist Botschaft. Wir können einfach treffen, dass eine leere Zeichenfolge zu Beginn. Und dann wollte ich sehen, ob E, So E das Ereignis oder die Antwort des Ereignisses darstellt, das Ergebnis von mir versucht, etwas zu tun. So E Punkt. Und wenn Sie hier schauen, werden Sie sehen, dass Sie Zugriff auf die Antwort unter Anfragen haben. Ich kann sehen, um zu sehen, was angefordert wurde und die Uhr, um zu sehen, welche Antworten. Also werde ich sagen, wenn E dot Antwort Punkt Erfolgscode ist, Ordnung, ist Erfolg Zitat bedeutet, dass es die 200 bis 300, die 100 und etwas, das keinen Fehler bedeutet, richtig? Nun, wenn Sie es per Definition betrachten, es ist wirklich zu 100 zu 99, sonst ist es falsch. Das ist also der Erfolg. Also wollte ich wirklich Fehlerbehandlung machen, was bedeutet, dass ich, wenn ich will, wirklich sehen möchte, wenn es kein Erfolgscode ist, dann mache ich etwas. Alles klar, denn dann, wenn es ein Salz Cisco ist, dann kann die Anwendung wie gewohnt laufen. Aber wenn es nicht erfolgreich war, als ich in Aktion kommen wollte. Also wollte ich sagen, var Antwortcode ist gleich. Und dann können wir einfach sagen, e dot dot stato hat. Da gehen wir. Und dann können wir wie ein Schalter unsere
if-Anweisung haben , nur durch die verschiedenen Optionen zu gehen. Also was, wenn ich etwas tun wollte, wenn es eine 40 für
anders war als wenn es eine 500 anders war als wenn es ein 40,
1 war , was bedeutet, unbefugt und so etwas. Richtig. Du hast also anders, wenn du verschiedene Wege kennenlernen willst, basierend auf, oh mein Gott, wer hat das? Das war ein Unfall auf meinem Imperium. Aber da gibt es Ihnen bereits alle Statuscodes, die wahrscheinlich nicht einmal brauchen werden, wir brauchen nicht alle diese. Also werde ich das einfach rückgängig machen. Und diejenigen, die sich wirklich, wirklich,
wirklich, auf jeden Fall konzentrieren wollen, wären der Fall HTTP-Statuscode. Lassen Sie mich das einfach aus HTTP-Statuscode machen und alle Includes machen, die ich tun muss. Und dann möchte ich vielleicht auf 500 schauen oder gut, fangen
wir mit dem nicht gefunden an, richtig? Also, wenn es nicht angerufen ist, dann möchte ich etwas unternehmen. Lassen Sie mich das einfach dort hinstellen. Und sagen wir, wenn es vielleicht 40 Huan sind ein unautorisierter, unautorisierter und sie haben auch verboten, oder? Also, wenn es einer von diesen ist, dann wollten wir wahrscheinlich das gleiche wieder zeigen, eine Nachricht und dann die Standardwerte, ich werde das einfach lassen, um zu sagen, dass, wenn es nichts von diesen war, dann einfach Standard. Also, die generische Fehlermeldung Strand, die sagt, du weißt schon, etwas ging schief diesen Drachen später, was wahrscheinlich wie ein 500 sein würde. Also zeige ich Ihnen nur, dass Sie spezifisch werden können. Oder Sie können einfach das Generikum haben. Selbst wenn wir keine anderen Wege sehen wollten,könnten
wir einfach sagen, könnten
wir einfach sagen, wenn es keine Erfolgsmeldung wäre, unser Erfolg erzielt, dann tun Sie dies. In Ordnung, also werde ich das Geld setzen. Und der Grund, warum wir den Navigationsmanager haben, der Manager injiziert ist, dass ich möchte, dass wir verschiedene Seiten für die verschiedenen Pfade
haben, die genommen werden könnten. In Ordnung. Also ging einfach voran und füllte den Rest davon und ich werde dich einfach durch Erde führen. Der Fall für die nicht angerufen. Wir werden sagen, ein neuartiger Manager Punkt navigiert zu einer Seite namens Fluorophor, die wir natürlich erstellen werden. Diese Nachricht ist, was wahrscheinlich in der angezeigt wird, die Konsole des Browsers. Also müssen wir etwas wegwerfen, aber wir werden irgendwann dorthin kommen. Also gehen wir voran und navigieren zu den 40 denn wir liebten dies an die Konsole. Wenn Sie weit Mitte März sind, wird
nicht autorisiert zu navigieren nicht autorisiert. Wir liebten dies auch in der Konsole und dann Standard, was
bedeutet, alles andere, was ein Fehler war. Wir navigieren einfach zur 50, 100 Seite und dann sehen wir, dass etwas schief gelaufen ist. Bitte kontaktieren Sie den Administrator. Nachdem wir all diese Überprüfungen durchgeführt haben, müssen
wir eine Ausnahme auslösen. Also können wir einfach sagen, werfen neue Ausnahme und wir werden nur in dieser Nachricht übergeben. Alles klar, das wird irgendwie die Verpflichtung auslösen zu wissen, dass,
hey, etwas tatsächlich schief gelaufen ist. Aber noch einmal können wir tatsächlich zu einer Seite navigieren, wo wir dem Benutzer ein nettes,
freundliches wir zeigen , dass wir die Situation gehandhabt haben. Nachdem wir all das getan haben, haben
wir noch eine Sache, die wir tun müssen, wo wir die Veranstaltung entsorgen müssen. Also begannen wir das Ereignis, bei dem wir ständig diese Methode aufrufen, um zu beobachten. Und dann müssen wir dispose Event anrufen, wo wir das Gegenteil tun werden. Also hier haben wir hinzugefügt und akkumuliert. Hier tun wir nur minus gleich Kunst. Also, nachdem wir all das getan haben, müssen
wir uns registrieren und unsere program.cs, die Fakten, dass dieser Dienst existiert. Also machen wir das darunter. Die Anzeige ist HTTP-Client-Interceptor, wo wir einfach in und formen und setzen in den Namen der Datei,
natürlich, enthalten alle fehlenden Referenzen. Und dann sind wir bereit, diesen ganzen Service zu implementieren. Also lassen Sie uns zurück zu unserem Index Punkt Punkt CSS Datei. Und was wir tun werden, ist, dass diese partielle Klasse von mir erben kann. Dies wird uns also tatsächlich eine Methode geben, die es uns ermöglicht, jedes Objekt zu entsorgen , das wir nicht wollen, nachdem seine Lebensdauer vorbei ist. Normalerweise passiert das, was passiert, ist, dass die Dispose aufgerufen wird, wenn die Komponente weitergeht, wenn die Komponente von der Anwendung nicht mehr benötigt wird. Aber was wir tun wollen, ist in eine benutzerdefinierte Logik zu setzen, um unseren Abfangjäger zu entsorgen. Also, bevor wir das tun können, lassen Sie uns den Abfangjäger injizieren. Also werde ich nur diese Zeile duplizieren und ich werde HTTP inter scepter hinzufügen. Lassen Sie mich diesen Abfangdienst kopieren. Statt Trends sind Isotope. Gehen Sie weiter, schließen Sie fehlende Referenzen ein. Okay, und dann lass mich mit der Entsorgung beginnen. Das ist wahrscheinlich die einfachste hier. Wir sagen nur Abfangpunkt und wir haben bereits die Methode, die besagt, dass Ereignis entsorgen. Also können wir einfach weitermachen und das tun, oder? Nein, außerhalb davon wollen
wir wirklich überwachen, was passieren wird. Also, kurz bevor wir unseren Anruf tätigen, können
wir Interceptor Dot Monitor-Ereignisse sehen. Und das war's. Also, wenn wir sagen, monetäre Ereignis, es wird dann beginnen diese Methode, die keine Überwachung ist, um zu sehen was ist die Antwort und was sollte es danach tun. In Ordnung, das ist also eine nette, saubere Art, etwas zu haben, um zu sehen, was passieren wird. So können wir das einfach überall machen. Wir haben einen Service namens Boot in so vielen Dateien gemacht werden. Ich sehe, dass dies viel einfacher zu setzen ist. Dann der ganze Try-Fang, Try-Fang, Try-Fang, denn das würde zu einer Menge Wiederholungen führen. Also werde ich das wieder in der erstellen tun. Also habe ich tatsächlich versehentlich den Code ohne Injektionen
dort gesetzt und es ist von Grund auf neu ein, das ich in das Auge setzen werde Einweg-implementiert diese Schnittstelle. Und dann werde ich sehen, und Sie wollen nicht unbedingt nach dem Schreiben des Codes in dieser Arterie und ich bin sicher, dass Sie das wissen, aber ich weiß, dass Sie es in beliebiger Reihenfolge schreiben können, wenn Sie mit so lange wie Sie befolgen Sie die Schritte. Also haben wir den Interceptor entsorgt, wir haben den Abfang überwachen die Funktion,
sorry, der API-Aufruf hier. Und dann ist der letzte Teil dieses Puzzles nur das injizierte. Und ich gehe einfach wieder zu denen, kopiere diese Zeile, damit ich nicht alles von Grund auf neu aufschreiben muss und voila. Alles klar, wir weisen darauf hin, dass wir diese Aktivität abschließen. Eine andere Sache, die wir tun müssen, ist, die Fehlerseiten zu erstellen, weil wir
gesehen haben , dass eine Seite namens Fluorophor navigiert Werkzeug werden wollte, eine aufgerufen Autor als unerwünscht genannt 500s. Also bin ich tot und habe diese Komponenten erschaffen. 40 für und es ist nichts Geld. Er ist nur eine Seite mit einem H1-Tag. Sehen nimmt uns Gefahr Ressource, die Sie suchen, es konnte nicht gefunden werden. Es ist Navigationsadresse als OLAP, um zu sagen, Seite Schrägstrich die Adresse. Das ist also 404. Wir haben ein ähnliches Setup für die 500 und wir haben nicht autorisiert und bedenken Sie auf Azar, da Ihre Komponenten mit Großbuchstaben beginnen
müssen oder nicht autorisiert ist Großbuchstaben U, aber die Navigationsadresse ist in Ordnung wie ein gemeinsames wenig. Das liegt an dir. Ich lege nichts zu schickes in diese Komponenten, aber natürlich können Sie sie verbessern, wie Sie oder Ihr Kontext erfordert. Nein, in der Farben-Controller, werde
ich eine nicht gefunden direkt am Anfang dieser Methode, wo wir, wissen Sie, wenn die Index-Seite aufgerufen wird, eine Ursache bekommen Farben, richtig? Also, was es die get nennt und versucht, die Farben zu bekommen. Also werden wir nur unsere 40 für im Voraus zurückgeben und sehen, wie das reagiert. Richtig? Lassen Sie uns also voran gehen und schauen Sie sich die Seite nach Farben an und wir heizen die Haltepunkte,
damit wir sehen , dass es einfach eine 400 zurückgeben sollte, damit jemand die Haltepunkte
entfernt und F5 drückt, damit es weitergeht. Und voila, die Ressource, die Sie suchen, könnte nicht Telefon sein. Das ist unsere 404-Seite. In Ordnung. Natürlich bekommen wir diesen unbehandelten Fehler, weil wir eine Ausnahme auslösen. Wenn wir in die Konsole schauen, werden
wir sehen, dass diese Ausnahme mit der Nachricht ausgelöst wird, richtig? Es liegt also an Ihnen, wenn Sie wirklich eine Ausnahme auslösen möchten und Sie wissen, wie dieser gelbe Balken geladen wird, weil das für den Benutzer nichts bedeutet, richtig? Nicht, dass wir benutzen. Gehen Sie auch in die Konsole und schauen Sie sich die Pfeile an. Also könnten wir tatsächlich darauf verzichten, werfen neue Ausnahmekarten am Ende des Abfangs. Und der Abfangjäger erledigt wirklich alles anmutig für uns. In Ordnung, also könnten wir einfach sagen, zu dieser Seite
navigieren, oder? Wir könnten sogar die verbessern, die Komponenten so, dass wir nur in der Nachricht als Parameter übergeben. Also wollen wir nicht schwer zu schreiben gesagt, dass Geld braucht. Nun, es liegt wieder einmal ganz an Ihnen, aber Sie haben das Konzept und Sie
können dies auch in Ihrer Anwendung implementieren. Und es ist eine nette, saubere Möglichkeit, Pfeile zu behandeln, weil wir nicht wissen, was mit der API passieren könnte. Etwas könnte in unserer Qualität unterbrochen werden, bekommen Bokeh 500. Anstatt zu viel benutzerdefinierten Code für jede potenzielle 500 zu schreiben, schreiben
wir nur generischen Code,
globalen Code, um zu sehen, dass etwas schief gelaufen ist. Bitte ziehen Sie in unsere Ps Schuss-Administratoren obwohl. Es liegt ganz an dir.
37. Änderungen in GitHub hinzufügen: Hey, Leute, willkommen zurück. Also sind wir an das Ende eines weiteren Kontrollpunkts gekommen. Und in diesem Abschnitt,
alles, was wir wirklich getan haben, war zu schauen, wie wir einen Teil
des Codes in unseren Komponenten umgestalten können , indem unseren oder UI-Komponentenabschnitt anders als den Code dahinter haben, richtig. Also habe ich das für Farben,
Kunden, gemischte Modelle, Fahrzeuge gemacht. Ich habe es nicht für Buchungen gemacht. Also habe ich dieses in seinem ursprünglichen Zustand gelassen, um zu bewahren, wie es aussehen kann. Und dann habe ich es für alle anderen getan, richtig? Auch hat es für die ausländischen Komponenten nicht getan, weil wirklich das alles war, was es dazu gab. Also habe ich mich nicht darum gekümmert, dir nur zu zeigen, dass es nicht unbedingt notwendig ist. Natürlich ist es nicht unbedingt ideal, es so zu mischen und anzupassen, wir es in diesem Abschnitt sehen, es ist so und dann in anderen Abschnitten getrennt. Es ist gut, überall konsistent zu sein. Ich lasse diese jedoch als Codebeispiele für Ihr Feature oder Ihre Freunde. Abgesehen davon haben wir auch globale Fehlerbehandlung mit dem HTTP,
http Interceptor hinzugefügt , der es uns ermöglicht, nur eine Zeile zu Art von Monitor zu verwenden. Und wir haben das speziell im Index eine Zeile zu Art Monitor gemacht, ob es erfolgreich sein wird oder nicht. Natürlich, mit dieser eine Zeile, haben
wir den Injektor, Kundendienst, sowie stellen Sie sicher, dass wir entsorgen nur um sicherzustellen, dass nichts bleibt im Speicher zu lange. Nachdem wir all diese Änderungen vorgenommen
haben, wollen wir voran gehen und eingecheckt. So wie üblich lesen wir oder hilfreiche Nachricht und gehen dann weiter und begehen alle und sinken.
38. Anpassen der Identity und Logik: Hey Leute, willkommen zurück. Was wir in dieser Lektion tun wollen, ist eine Art von erkunden einige der wichtigsten Teile der Identitätsbibliothek und sehen, was wir ändern müssen. Was ist ein schönes zu haben und einfach ein allgemeines Gefühl davon zu haben. Also werde ich es nicht sehr detailliert durchlaufen, zumindest nicht in diesem Kurs. Wenn Sie Identität verstehen und die gesamte Funktionalität verstehen wollen, kann meinen anderen Kurs mischen, wo wir durch Identität gehen, Kern und alle inneren Arbeiten fremd,
obwohl wir nur irgendwie über sie glänzen wollen, weil an der Ende des Tages, wollen
wir einige grundlegende bieten, um sie zu schützen. Und das haben wir getan. Wir implementiert oder ein Login, wir haben unsere Registrierung implementiert. Und in unserem Projekt hatten wir eine Reihe von Seiten im Zusammenhang mit Identität und Management abgewickelt. Wenn wir dies nur erweitern, wenn Sie im Server-Projekt,
in Bereichen Identitätsseiten vergessen haben , wenn Sie mir gefolgt wären, dann hätten Sie alle diese Seiten gerüstet. Siehst du das? Und anstelle von Menorrhagie, mehr Seiten, so dass diese Positionen, die sie tatsächlich eine Menge bereitgestellt haben, vielleicht nicht alle aus, aber einige Seiten, die darauf ausgerichtet sind, Ihnen und
Ihren Benutzern zu helfen , eigene Benutzer oder Kegel innerhalb von die Anwendung. Wenn Sie die Schritte nicht befolgt haben, können Sie immer zu Seiten gehen, klicken Sie auf „ Neues Gerüstelement
hinzufügen“, dann sehen Sie Identität, und dann können Sie Erwachsene abwehren. Andernfalls können Sie das vorherige Video immer erneut aufrufen. In diesem Video möchte ich nur, dass wir durch das gehen, was da ist und wie wir es optimieren können, um vielleicht eine bessere Erfahrung für uns selbst zu haben. Also haben wir den Login gemacht, wir wissen, wie man Seed verwendet und so weiter. Ich sehe, dass sich diese Seite drastisch von dem Rest unserer Website unterscheidet. Jetzt möchten Sie dies wahrscheinlich ändern. Und wenn Sie sich wirklich den Inhalt der Seite ansehen, werden
Sie sehen, dass nicht alles hier wirklich relevant für unsere Anwendung ist. So können Sie, wenn Sie es nicht genau wie
diese Haut mit dem traurigen Teil, Sidebar und allem aussehen lassen. Aber Sie müssen den Text wahrscheinlich nicht mit einem anderen Dienst einbinden, um sich anzumelden, was natürlich kontextabhängig ist, denn wenn dies ein interner Up für Ihr Unternehmen ist, dann ist der einzige Dienst, den Sie erleichtern möchten, der vom Unternehmen verwaltete Benutzer oder Zapfen. Wenn es sich um eine öffentlich zugängliche Anwendung für allgemeine Benutzer, die allgemeine Öffentlichkeit handelt, dann sollten Sie es vielleicht auf die
Erweiterung schauen , um Facebook-Anmeldung zu unterstützen und so weiter. Aber noch einmal werde ich das alles in diesem speziellen Kurs nicht abdecken. Aber wenn Sie diese Seite ändern möchten, würden
Sie sehen, dass in der URL Identitätsschrägstrich einen Doppelpunkt Schrägstrich Login angibt. Also, wenn wir zurück zu unserem Projekt und schauen in unsere Gerüstseiten würde Identität sehen Miteigentum. Und dann haben wir die Login-Seite. Dies ist also die Seite, die bis zu uns serviert wird, wenn wir auf Login klicken. Das bedeutet also alle Änderungen an mir, wenn wir den vergessenen Passwort-Link entfernen möchten. Es ist also ein wir verwenden kürzlich Bestätigungslink. Oder fangen wir mit den externen, externen Logins an. Also haben wir keine externen Logins bei wollte jemand diesen gesamten Abschnitt entfernen. Ich werde nur zusammenbrechen, dass sie gelöscht haben. Und dann möchte ich wahrscheinlich, dass dieser Abschnitt mit den Textfeldern mehr Platz in Anspruch nimmt. Also, was ich tun werde, ist, erweitern Sie dies auf MD 12, so dass es für Anzeigen über dehnen. In Ordnung, ich kann auch sagen, Benutze deine Firma Kegel, um dich anzumelden. Alles klar, das sind alles Dinge, die wir hier in der Anwendung tun können. Und Sie können es ändern, wie Sie es für richtig halten. Wenn Sie das allgemeine Layout der Seite ändern möchten, weil Sie
feststellen , dass sowohl die Anmeldung als auch die Registerart ein ähnliches Layout haben. Wieder einmal gibt es nur eine Seite, die uns zur Änderung zur Verfügung steht. Hier ist eine Registerseite. Wenn wir also eine ähnliche Änderung vornehmen wollten, um diese umsetzbaren externen Logins zu entfernen, kann
ich das auch reduzieren und löschen, erweitern Sie dieses Formular, um die gesamte Seite aufzunehmen. Und was auch immer alle Änderungen, die wir vornehmen müssen, können wir vornehmen. Nein, ich war nicht auf dem Punkt, dass, wenn wir
das allgemeine Layout dieser ganzen Seiten ändern wollten , was
wir tun können, in den Lösungs-Explorer gehen und schauen und anzeigen beginnt,
was anzeigt, wo diese Layoutseite angerufen wird . Und das ist Seiten Schrägstrich Shared Schrägstrich layout.css HTML. Und wenn Sie in geteilt schauen, werden Sie es nicht sehen. Wenn Sie jedoch zum Ordner „Seiten“ gehen, finden
Sie freigegeben. Und da ist unser Layout. Also von hier, und wenn Sie jemals die dotnet Core MVC oder Staffelei Seiten verwendet haben, werden
Sie zumindest mit dieser Art von
Layoutseite vertraut sein, wo es Standard Bootstrap 4 Seite ist. Und dann können Sie die Menüpunkte ändern. So können Sie hier aktuelle Management-Anwendung sehen, anstatt nur den Projektnamen, wissen
Sie, können Sie all diese Dinge anpassen. Es zeigt eine Reihe von Partials und einige Bedingungen. Sie möchten wahrscheinlich nicht unbedingt jede einzelne Sache ändern, aber Sie können sicherlich ein paar Dinge ändern, damit es sich eher wie
Ihre Anwendung anfühlt als nur eine Muttervorlage. In Ordnung, also Auto und Tom Management-Anwendung, setzen
Sie die Schlüsselplätze. Wenn es eine Datenschutzerklärung gibt, dann machen Sie sicher, dass Sie das tun. Und es macht das Jahr und all diese wunderbaren Dinge, die ich das meiste noch einmal kenne, wurde irgendwie für die Unterstützung der Identitätsserver verwandten Seiten getan. In Ordnung, also möchten Sie sehr vorsichtig sein, wie Sie Änderungen vornehmen. Aber für allgemeine HTML-Tags,
alles, was nicht ausgerichtet ist, dann können Sie voran gehen und Ihre Änderungen vornehmen und beheben, wie Sie es für richtig halten. Jetzt werde ich diese Anwendung nur neu starten, da alle Änderungen, die ich gerade vorgenommen habe. Und dann, wenn die Anwendung auftaucht und ich mich einloggen gehe, wissen Sie, dass Sie sehen werden, dass die Login-Seite anders aussieht, oder? Ich habe gerade das Layout zu einem gewissen Grad geändert. Die Farm fragt Theobald nicht mehr, es ist alles, was für die Anwendung nicht relevant ist. Und der Text sieht ein bisschen einladender null aus. In Ordnung. Und genau das gleiche für die Registrierungsseite? Nein, in Bezug auf das Hinzufügen weiterer Felder zur Registrierungsseite. Und eine andere häufige Sache, die Sie wahrscheinlich tun möchten, ist nicht nur nach der E-Mail gefragt, sondern vielleicht E-Mail oder Benutzername oder einfach Benutzername, weil Ryan Nein, was passiert ist, dass dieses Formular standardmäßig nach einer E-Mail-Adresse für den Benutzernamen und schließen Sie einfach einige Tabs, die nicht absolut irrelevant sind, oder? Nein. In Ordnung. Beginnen wir also mit der Registerseite. In Ordnung. So ist die Registerseite Razor Seiten Anwendung sind Arrays von Seiten Seite. Es hat also den Code dahinter, oder? Also, wenn wir nur Seiten durch wiederholte zurückschauen, werden
Sie das CSS, HTML sehen. Css. Wir haben uns so etwas angeschaut, wenn es bereits nicht Blazer-Komponenten und der Code hinter der Datei gibt, richtig? Also hat immer die Seite hier einen Code hinter sich. Was auch immer
Dot-CSS-, HTML- und CSS-Datei dahinter registrieren , das ist die CS5 dahinter. Und was Sie hier sehen werden, ist, dass es
eine Schlüsseleigenschaft namens Eingabemodell vom Typ Eingabemodell namens input hat. Und dann ist das wirklich nur eine Klasse. Und dieses Glas wird verwendet, um die Form zu modellieren. Diese Klasse hat also nur Feld für E-Mail-Adresse, die stark als E-Mail-Adresse eingegeben wird. Wir haben uns die Validierung früher angesehen. Deshalb müssen wir zum Zeitpunkt der
Registrierung eine E-Mail-Adresse verwenden und diese anschließend für Login-Zwecke verwenden. Wissen Sie, dass, wenn wir diese Einschränkung entfernen und wir sagten, Sie wissen, öffentliche Zeichenfolge, Benutzername um des Arguments willen. Und wir sagten, geben Sie Ihren Benutzernamen oder Ihre E-Mail-Adresse. Es ist nicht so streng, wie zu diesem Zeitpunkt eine E-Mail-Adresse zu verlangen. Aber das werde ich nicht stören. Ich denke, ich würde E-Mail-Adresse ist eine gute Möglichkeit, alles zu behalten, was Sie für die Benutzername Spalte benötigen. Und es dient dem Zweck, sowohl Benutzernamen als auch E-Mail-Adresse einzugeben. Also können wir das fremd lassen, wenn wir
all diese wichtigen Dinge enttäuschen , falls Sie wahrscheinlich modifizieren wollen. Kennen Sie unseren Anwendungsbenutzer. Lassen Sie mich einfach anhalten und zu unserem Anwendungsbenutzermodell springen. Hier sehen wir, dass wir Vorname, Nachname haben, und dann ist es, es wird von Identitätsbenutzer erbt. Das bedeutet, dass wir die Fähigkeit haben, Vor- und Nachnamen in unserer Datenbank für jeden Benutzer zu speichern , was keine schlechte Option ist, oder? Nein. Was ist, wenn wir es wollen, wenn die Person die Eingabe Vornamen und Nachnamen registriert. Und durch Erweiterung, können Sie andere Felder hinzufügen, wenn Sie ein Geburtsdatum,
Geschlecht, et cetera möchten , können Sie all das hier hinzufügen. Aber dann ist der wichtigste Teil dafür, dass
Sie im Eingabemodell Vertreter für diese Felder haben müssen. Also, wenn ich im Eingabemodell diese beiden Felder gut in Interessen setze, und lass uns sie erfüllen, weil es für uns keinen Sinn ergibt. Oder verwenden Sie ein IAM, sorry, Vorname und Nachname optional, aber E-Mail ist nicht richtig. So E-Mail, Vorname, Nachname, Passwort und Passwort bestätigen. Und Sie sehen, dass sie die Daten auf Notationen verwenden, die
wir uns angesehen haben, wenn bereits Validierungen nicht möglich sind, richtig? Also all diese Dinge sind nicht erforderlich, auf bekommen. All das ist niedrig. Der pH-Wert. Wir können dieses Partikel sogar bei externen Logins entfernen. Wir verwenden keine externen Logins. Was ist ich noch nicht linearer Code. Auf dem Posten. Wir sehen, dass es validiert. Das ist also, was wir validieren. Und dann erstellt es das Benutzerobjekt, bevor es weitergeht und es erstellt. Nein, ich habe nur nach Vorname und Nachname gefragt, zusätzlich zu der E-Mail und dem Passwort. Das bedeutet also, dass
ich beim Erstellen dieses Objekts Werte für FirstName bereitstellen kann. Und jetzt diese Brian Kernighan, Vorname kann jetzt gleich Eingang Punkt Vorname sein. Wieder einmal ist die Eingabe nur der Objekttyp, der das Eingabemodell darstellt, was wir gerade geändert haben. So kann ich nun den Vornamen eintragen und kann nun den Nachnamen eingeben. Das heißt, wenn sich jemand registriert, sollte
er Daten in den Vor- und Nachnamenfeldern haben. Nun, das ist der Code hinter der Schnittstelle, jedoch immer noch nicht wider. Also, was wir tun werden, ist die Schnittstelle zu ändern, um zu wissen, dass es Textfelder für Vornamen und Nachnamen haben
sollte. Und jetzt tun diese das einfach, indem sie das Textfeld für E-Mail kopieren und einfügen. Und ich sage einfach an der Spitze Vorname. Das ist also ein Label für die erste benannte Eingabe für den Vornamen und eine Validierung für FirstName. Und dann das gleiche für LastName. Und dann eine E-Mail, wenn ich sie über zweimal kopiere. So bleibt E-Mail als E-Mail. Also wissen
Sie, dass wir dieses Formular geändert haben, wenn jemand sich registriert, wird er in der Lage sein, ihre vollständigen Details anzugeben und dann registrieren und diesen Datensatz zu haben. Also lasst uns das für einen schnellen Test machen. Also werde ich mich nur registrieren, so dass es Schema für Vorname,
Nachname, nicht bemerkt Vorname sieht . Das ist irgendwie zusammen. Es ist CamelCase, aber es gibt keinen Platz dazwischen, also werde ich das nur beheben, bevor ich überhaupt noch weiter gehe. Also zurück in der Eingabe, was ich tun kann, ist Anzeige zu sagen. Mein Name ist zuerst der Name mit einem Leerzeichen darin. In Ordnung, so wird das Label gerendert. Alles klar, das sind also nicht die Nachnamen, also lass mich das einfach neu starten und dir zeigen, wie das aussieht. Und hier sind wir. Vorname, Nachname, so dass sie sehen, dass sieht viel besser. Also lassen Sie mich einfach einige zufällige Werte eingeben und Register drücken und mal sehen, was passiert. Alles klar, also das Register, ein Prozess war erfolgreich und das liegt daran, dass es erfolgreich auf Post dieses Objekt erstellt hat, den Benutzer erstellt hat. Ging voran und seit diesem Code jetzt dieser Teil von Etruria, dass E-Mail-Absender und so weiter. Wir können es später ansehen. Halten Sie sich tatsächlich auf E-Mail-System in unserer Blazer-Anwendung eingerichtet, was für die Sicherheit sehr wichtig ist, weil wir überprüfen möchten, ob
die Person , die sich registriert, empfangen und validieren kann, richtig. Es ist nur eine weitere Sicherheitsstufe, die sowohl
dem Unternehmen als auch Ihren potenziellen Kunden Komfort bringt , oder? Das ist also passiert, wenn wir uns registrieren. Ordnung? Wenn Sie sich meine Unzulänglichkeit ansehen, könnte
das ein wenig reparieren und das ist in Ordnung. Aber wenn ich dann auf den Abschnitt klicke, der Hallo sagt wird
GOP die Profilseite aufrufen, die wiederum nur eine andere Datei ist, die sich in diesem Ordner befindet. Nein, Dieser ist innerhalb verwalten, sagt ein Doppelpunkt Schrägstrich verwalten. Und ich glaube, das wäre Index, oder? So ein Doppelpunkt Schrägstrich verwalten. Und dann suchen wir nach der Indexdatei, und das ist die Seite, die wir uns ansehen, wo es den Benutzernamen zeigt, die vollständige Nummer,
alles, was im System für diese Person schreibt, könnte diese leicht in setzen, Speichern und es würde aktualisieren das Profil mit, ich klicke auf E-Mail, es zeigt mir, dass Sie sehen, dass alle diese Dinge sind genau hier. So können Sie einem Benutzer die Möglichkeit geben, seine eigenen oder Miteigentümer zu verwalten, ihr Passwort
zurückzusetzen oder ihr Passwort oder anderes zu ändern und bei Bedarf auf ein PHP einzurichten. Wir haben keine Tophi,
aber ich zeige Ihnen nur alles, was unsere Identitätsbibliothek uns erlaubt. Wieder einmal können Sie
das Layout immer ändern , wenn es hier weitere Informationen anzeigen soll. Also richtig, kein Indexmodell zeigt einfach die Telefonnummer an. Aber dann kannst du das immer verlängern. Sie können es immer erweitern, um die Vorname, Nachname
und alle anderen Details, die Sie möchten, dass sie es verwenden,
um sehen und ändern können , wenn die R auf, dass. Jetzt sind Bucking oben, ich werde mich nur ausloggen. Und dann werden Sie sehen, dass es eine Fehlerprotokollierung gibt oder nein, als wir die Navigation einrichten oder die gesamte Navigationskomponente neu schreiben, hätte
ich einige vervet-Anführungszeichen entfernt. Also werde ich das falsch schreiben oder richtig? Nein, nein. Wenn wir auf die nav Menükomponente springen, würden
Sie sehen, obwohl wir schlecht auf die Login-Anzeigeinhalte in diesem Bereich hatten. Alles klar, wenn ich
diesen Abschnitt für die Autorisierung mit der Login-Anzeige vergleichen könnte , würden
Sie gut sehen, erstens den Komponentenvergleich. Es gibt einige Injektionen für einige Bibliotheken, die in der Login-Anzeige verwendet werden. Und es gibt auch Code am Ende der Login-Anzeige-Komponente. Nun, was passiert ist, dass Logo-Verfahren ist wirklich wie eine Formulareinreichung im Gegensatz zu nur Link klicken. Also hätte ich die Schaltfläche ersetzt, die ein Formular eingereicht hätte oder
zumindest einen Formularübermittlungsprozess gestartet hätte, um zur Authentifizierungsabstimmung zu navigieren. Dieser Teil ist sehr wichtig. Ich hätte das umgehen und direkt zur URL gesprungen, weshalb wir diesen Fehler haben. Es sagte, nun, wenn es von einer unbekannten Quelle kommt. Also, was ich tun muss oder was wir tun müssen, ist, dass dieser NovalLink onclick diesen Code aufgerufen hat. Aber dann noch einmal, das ist alles in und Login-Anzeige. Also nur der Einfachheit halber, werden
wir die Login-Anzeige ausblenden. Und wir werden nur den ganzen Code in die Navigationsmenü-Szenen setzen. Das ist, wo alles passiert mit autorisierten und den vielen Gegenständen und allem, richtig? Also werde ich diese Funktion nur von der Login-Anzeige kopieren. Wenn Sie es gelöscht haben, wenn Sie es haben, dann ist das in Ordnung. Sie können diesen Code immer einfach pausieren und reproduzieren. Und ich werde auch diese Bibliotheken nehmen, also injiziert und auch Shan State Manager, Navigationsmanager. Und diese beiden Bibliotheken, oder oben oder gut, die Bibliotheken und die injizierten Funktionen oder Klassen, richtig? Und dann, was wir tun können, ist auf dem nav Link, der sagt F gleich Authentifizierung und Logos. Ich werde das sagen, als ein Hash es anwirbt, wie es scheint, dass ein aktiver Link bekommt. Aber zum Glück verwenden wir eine Blazer-Komponente und Blazer-Komponenten können auf Klick tun. So wie die Schaltfläche in der Login-Anzeige, das war nur eine Schaltfläche. Und das hätte es getan. Onclick beginnt psi naught. Ich werde diesem NovalLink sagen, dass, wenn es angeklickt wird, diese Funktion aufrufen sollte. Beginnen Sie, ALT zu sagen, die hier ist. Wieder einmal möchten Sie diese PFAS trennen haben die Komponente und den Code hinter der Datei. Dann haben wir bereits eine Übung durchgemacht oder das haben wir gemacht. So wenige frei, um voranzugehen und das zu tun. Aber für diese einfache Operation werde
ich es einfach halten. Ich bin nicht gegangen, um all das zu tun. In Ordnung. Also lassen Sie uns diesen Logo-Prozess einmal ausprobieren. Also bin ich Buck als JPSM management.com, und dann klicke ich auf Logout und du siehst, dass es ein ganz anderer Prozess ist, ganz anderes Gefühl. Ich weiß, dass es tatsächlich funktioniert. So sehen Sie, wo viele Punkte und Sie können zurückgehen und registrieren. Nicht. So sehen Sie auch diese Prozeduren können mit unseren Seiten verwaltet werden und wie alles aus
der Perspektive des Benutzers über die verschiedenen Teile der Anwendung fließt . Selbstverständlich autorisieren wir alle diese Links. Wenn Sie also auf einen Link klicken, müssen
Sie autorisiert sein. Und der tiefere Grund für die Autorisierung, nur als Zusammenfassung,
ist, dass, sobald Sie autorisieren Sie automatische Tal, Es ist ein Cookie erstellt, die eine Tolkien hat. Und dieses Tolkien wird verwendet, um
diesen Benutzer über die APA, das Server-Projekt, zu authentifizieren . In Ordnung, also denken Sie daran, dass alles, was der Benutzer
macht , wenn er Autos hinzufügt, eine wunderbare Operation macht. Sie sind wirklich in den Klienten nach Teilen. In Ordnung? Und wenn sie dann einen dieser API-Endpunkte treffen müssen, muss dieser Anfrage ein Tolkien angehängt sein. Und das ist ein Teil dessen, was hier gesendet wurde, als wir diesen HTTP-Client aufgebaut haben. Und wir haben gesagt, dass es immer einen Autorisierungsnachrichten-Handler senden sollte. Später schauen wir uns an, wie wir autorisierte API-Anfragen senden können. Weil es betäubt, sobald wir diesen Client benutzen, wird
es automatisch versuchen, ein Tolkien anzuhängen. Sagen Sie, wenn kein Token vorhanden ist, erhalten Sie immer Backup 40, 1 oder 4 oder 3, da Sie nicht auf die Ressource auf der API-Seite zugreifen können. Das ist also sein Weg. Die Anmeldung des Benutzers ist so wichtig. Aber dann kann es eine Situation geben, in der Sie den Benutzer
nicht wollen oder Sie wollen den Benutzer nicht zwingen sich anmelden
zu müssen, um auf eine bestimmte Seite zuzugreifen oder mit bestimmten Daten interagieren zu können. Vielleicht gibt es diese Situation. Also schauen wir uns an, wie Wochenende das später machen.
39. JavaScript interop mit Third: Hey Leute, willkommen zurück. In dieser Lektion wollen wir einen tieferen Eintauchen in JavaScript nehmen, interop, wissen, dass wir berührt haben Es ist ein bisschen, als wir einen Anruf tätigten. Und das war zu unserer eigenen kleinen internen Onclick-Methode. Wenn wir hier auf unsere Schaltfläche klicken, hatten
wir diese Bestätigung auf. Sind Sie sicher, dass Sie löschen möchten richtig? Jetzt? Die Realität ist, dass Sie wahrscheinlich wollen, dass dies ein bisschen besser aussieht. Sie wollen nicht, dass es die Vanille-Alert Tonne Bestätigungs-Box, die mit einem Browser integriert ist. Sie möchten wahrscheinlich eine Bibliothek von Drittanbietern wie vielleicht verwenden, damit Sie so weit lernen,
so weiter, um ihm etwas mehr Charakter zu geben. Eine andere Sache, die Sie wahrscheinlich tun möchten, ist ein Ganzes zu ändern, dass Daten angezeigt werden. Also richtig, Nein, alles wird nur in
Rucola Tabelle angezeigt und es geht nur weiter und weiter. Je mehr Wachen ich ein Lamda war, ist
der pH-Wert nein. Heute werden wir uns auf
die Anzeige der Daten hier im Raster konzentrieren . Also werden wir in ein Raster eher Grad setzen und ich ging, um mich auf
die Buchungsseite zu konzentrieren , weil ich denke, dass dies
gut mit dem Raster mehr als die anderen tun würde , zumindest innerhalb des Kontexts, aber es gibt keine Einschränkung . Ordnung? Was wir also tun wollen, ist diese tabellarische Darstellung von Daten in ein Raster zu verwandeln. Und das Gitter, das wir heute verwenden werden, sind die Tabellen. Also, wenn Sie die beiden Tabellen noch nie verwendet haben, können
Sie zu Data Tabelles.net gehen und Sie können diesen genauen URL-Schrägstrich verwenden, Beispiele Schrägstrich Styling Schrägstrich Bootstrap 4 Punkt HTML. Also verwenden wir Bootstrap 4 in unserer Blazer-Anwendung. Also möchte ich die Skin für Datentabellen,
die am besten mit dem Gesamtlayout aussehen, das wir haben. In Ordnung, wenn Sie also auf dieser Seite sind, können
Sie damit experimentieren. Wenn Sie mit Datentabellen vertraut sind, weiß
jemand, worum es heute geht? Wenn nicht, dann ist es eine nette, lustige Art und Weise, eine einfache Möglichkeit, alle Daten, die hereinkommen, zu tabellen. Es verfügt über automatisches Paging. Zugegeben, all dies geschieht clientseitig. Das ist also wie ein schneller Sieg. Später, wenn die Anwendung zu wachsen beginnt, möchten
Sie wahrscheinlich implementieren. Paging auf der Serverseite reduziert die Last. Aber für null für einen kleinen up, der nur diesen schnellen Gewinn durch die Implementierung von Datentabellen zu haben
scheint. Und es wird uns ein bisschen mehr Einblick geben, wie Blazer mit
JavaScript und anderen Dingen interagiert , die wir bei dieser Art von Operation berücksichtigen müssen. Also unter der Show, alle Zugriffs- oder CDN-Links für alle Ressourcen, die für Datentabellen benötigt werden. Und sie sollten in diese bestimmte Reihenfolge aufgenommen werden. In Ordnung, und das Minimum, dieser Code ist erforderlich. Nach all dem? Nein. Hierbei handelt es sich um Links zu Dateien, die im Internet gehostet werden. Sie sind gut in Bezug auf, wenn Sie Internetzugang haben. Sie haben Anwendung gehalten, um schneller zu laden, vor allem wie Übernutzung der Klan sagte Blazer. Und vor allem, wenn jemand sich entscheidet, progressiv auf Download der App zu gehen. Wissen Sie, nicht, dass der physische Fazlollah den Fußabdruck des AP im Allgemeinen reduziert. Jedoch, im Offline-Modus oder jemand versucht, das zu öffnen und es wird in sofortigen Internetzugang. Und diese Links sind zu diesem Zeitpunkt nicht erreichbar. Dann ist in dieser Situation wahrscheinlich Bits es, um die physischen Dateien zu haben. So wissen Sie, können Sie geben und nehmen und bewerten Sie Ihren Risikoappetit. Aber noch einmal, für den schnellen Sieg und nur für das allgemeine Gefühl, wie JS Interrupt funktioniert, werden
wir nur die CDN-Links verwenden und wir werden diese Referenzen in unser Projekt aufnehmen, während wir weitergehen. Jetzt fangen wir an. Und was wir tun werden, ist
einige Verweise auf diese Links innerhalb unserer Blazer-App zu erstellen null, wo wir sie einbeziehen müssen, ist sehr spezifisch für Partikel. Also müssen wir auf die Seite index.html gehen und ich werde nur aufhören, dort zu laufen oder überhaupt, damit wir
unsere Bearbeitung in der index.html Seite durchführen können , die im Stammordner ist, und das ist index.html. müssten wir Verweise auf Schriftstellen einschließen Vor unserer Blazer Dot WebAssembly ab.js Dateimüssten wir Verweise auf Schriftstellen einschließen. Also ich meine, wir können es vor dem Authentifizierungsdienst einschließen, aber das ist irgendwie sekundär zu den Fanatikern für diese
jetzt weil wir den Blazer-Client WebAssembly Projekt verwenden. Wenn wir die Blazer-Server-Projekte verwenden, dann wäre es in der Hostdatei und eine ähnliche Einschränkung würde tatsächlich gelten. Also lassen Sie uns in unserer index.html fortfahren und ich werde sie einfach dort einfügen. Und dann, was wir tun müssen, ist sie irgendwie in den Skripten dot js. Also werde ich sagen, Skript ist gleich S, Script, SRC ist gleich und dann der Link. Und dann gehen wir einfach weiter und schließen unsere Skript-Tags. Und dann werden wir das für all diese Links tun. Und sobald Sie das abgeschlossen haben und Ihre Links in etwa so aussehen, lassen Sie mich das einfach entfernen. Dann können wir zurück auf die Datentabellenseite gehen und sorry, und wir können die CSS-Dateien holen, so dass alles, was Sie
verwenden können, und es ist fast die gleichen Regeln gelten, wenn es um gustation geht oder sorry, das CSS ist, was wir wollen. Die gleichen Regeln gelten für den Umgang mit den Webanwendungen. Wenn wir in der Bibliothek verwenden, müssen
Sie sicherstellen, dass Sie alle relevanten Verweise auf die Bibliothek haben. Also habe ich vorangegangen und die Tool-Links zur Datentabelle CSS-Datei hinzugefügt, natürlich brauche Swell eigentlich nur einen, weil einer von ihnen Bootstrap ist, was ich bereits in meinem Projekt habe. Also werde ich eigentlich nur eine Referenz haben, das ist ein Bildschirm, der ist, werde
ich schnell, bevor wir fortfahren. Also, wenn sie die Wanderer-Referenz haben, und das ist die zweite ihre Freunde hier. Die Datentabellen Punkt Bootstrap, 4 Punkt main.css. Das ist es, was wir brauchen. Wissen Sie. Wir müssen unsere eigene Skriptdatei schreiben, die wir tatsächlich einige dynamische Initialisierung machen, denn wenn wir planen,
die Datentabelle an mehreren Stellen zu verwenden , die wir brauchen,
um eine bestimmte Funktion aus den Taten der Tabellen aufrufen zu können , Übergeben der Tabelle, auf die wir sie anwenden möchten. Der Tabellenname oder ein Bezeichner für die Tabelle, egal ob es sich um eine Klasse oder um die ID handelt, wir wissen, wie diese Sache funktioniert oder ob Sie bereits mit der Funktionsweise vertraut sind. Deshalb müssen wir dieses benutzerdefinierte JavaScript schreiben, über das wir die Kontrolle haben. Alles klar, also gehe ich einfach in den www-Root-Ordner, gehe weiter und füge einen neuen Ordner hinzu und ich werde es Scripts nennen. Und dann werde ich in Skripten ein neues Element in Form einer JavaScript-Datei hinzufügen. Und ich werde es nur datentabelle dot js nennen, datentabelle dot js dort werden wir in data.table ab.js wissen, ich werde eine Funktion haben, die mich nennen, halten Sie es einfach. Datentabelle oder die Tabelle. In Ordnung? Und diese Funktion wird Umweltqualität den Tisch nehmen. In Ordnung? Und so ziemlich alles wird tun
, ist die Dokumente zu initialisieren und wir sagen document.ready. Sie wissen, dass das ein Standardteil von jQuery ist. Gehöre Funktion, öffne und schließe Klammer, öffne und schließe geschweifte Klammer. Und dann werden wir nur nach Elementen oder Dollarzeichen-Tabelle suchen. Wie gesagt, der Elementname oder etwas, um das Element zu identifizieren, ist das, was als Parameter übergeben wird. Also Tisch Punkt und dann ist es so einfach wie data.table. Das ist also ganze Datentabellen erfordern, dass Sie es initialisieren müssen. Alles klar, wir machen das nur durch, weil wir es brauchen, um durch die GS Interrupt, Interrupt
zugänglich zu sein . Aber sonst wissen wir alle, dass das alles ist, was wir wirklich brauchen in einem normalen HTML-Sitzteil. Die nächste, die ich tun werde, ist, entfernen Sie unsere entsorgen den Schwanz, denn was passiert ist, dass, wenn die Seite weitergeht, wir nicht wollen, dass diese Komponente im Browser, in der Konsole verweilt
und im Speicher verweilt, dass alles, was ich war bei Datentabelle dreiseitig ist unser Ziel, das wir durch bewegt wollten, richtig? Also werden wir
diese Entsorgungsmethode nennen , die wir wissen, dass wir diese Tabelle von jeder Referenz löschen werden. Es ist heiß, nicht wahr? Wir brauchen immer noch das Dokument oder
so, also werde ich es einfach kopieren und einfügen. Aber innerhalb dieses Abschnitts werde ich Tabellenpunktdaten sagen, Tabelle Punkt zerstören. Sie wollen oder bewegen ihre Freunde. Und dann werde ich die Elemente finden. Und ich werde das tun, indem ich document.write,
Abfrage-Selektor sage und nach Tabelle plus suche. Und dann ein Schlüsselwort, das normalerweise weitergeht, es ist, dass Unterstrich Wrapper sagt. Und dann werde ich sagen, Element Elternknoten entfernte untergeordnete Elemente, richtig? Also entferne ich nur alle Spuren dieses Elements, sobald wir mit der DataTable fertig sind, also sagen wir, sind auf der Seite, wird die Datentabelle laden, Sie navigieren weg. Wir wollen die Datentabelle beenden und das Element aus dem gesamten Fenster entfernen, aus der gesamten Anwendung, bis Sie sowieso nach der Neuinitialisierung zurückkommen, ist
es ein Unterteil des Territoriums. Es ist etwas, das getan werden muss, um
die Verpflichtung zur Laufzeit sauber zu halten und diesen Fußabdruck der Anwendung erneut zu reduzieren. Ordnung, jetzt, da wir diese Skriptdatei im HTML haben, natürlich
der Ultimaker für Institute, und ich werde nach allem darauf verweisen, richtig? Also kann ich das einfach aus
dem Projektmappen-Explorer ziehen und es gibt unsere benutzerdefinierte Skriptdatei. Nun gehen wir in die Komponente, wo wir beabsichtigen, diese JS Runtime zu verwenden. Und ich habe gesagt, dass wir mit den Buchungen beginnen, zum Index für die Buchungen
gehen. Und ich werde anfangen, indem ich
oben Bund auf die Injektion einschließe und sagte Geräte Einweg. Also ich wegwerfbar ist C scharps, die wir von
Garbage Collection machen , hätten tatsächlich vorher damit interagiert. Nein. Also, wenn diese Komponente fertig ist, kommt
ich weg und zerstört die Komponente in der Speichergarbage Collection. Das wird also Hand in Hand mit unserer Entsorgungsmethode hier funktionieren, aber wir werden es in ein paar Sekunden sehen. Co-Executive, alles wird es zusammenbinden. Jetzt werde ich unseren Tisch hier und IBM geben, wann ich es Buchungsteam nennen soll, richtig? Oder Buchungstabellen. Diese Buchungstabelle, richtig? Nein, das wissen wir alle. Inzwischen sollten wir wissen, dass in HTML und wir geben einem Element eine ID, es ist ein eindeutiger Bezeichner. Dies wird nützlich sein, wenn wir unsere asynchrone Methode aufrufen. Da denken Sie daran, dass wir diese Add zu der Datentabellenmethode aufrufen werden, die als Parameter den Namen des Elements nehmen wird , sollte es
die Datentabelle mit dem Namen 2M anwenden. Also, was wir hier tun werden, ist eine andere geschützte Methoden zu nennen. So geschützt ist sinken und wir wollten die Aufgabe überschreiben. Und diese, die wir überschreiben, ist nach dem Rendern aktiviert, was einen Boolean namens First Rendering benötigt, der für die Lasten im IntelliSense verwendet wird. Lassen Sie mich das noch mal versuchen. In Ordnung, so geschützt darüber und dann Raum. Da gehen wir. Dann kommen wir weiter nach unter einem Singen, denke ich, weil ich async früher geschrieben habe, hat es nicht es hat dass man nicht aufgefordert. In Ordnung. Lassen Sie mich das einfach reparieren, damit ich möchte, dass es asynchron ist. Natürlich, da gehen wir. Also diese Methode, und ich mache es direkt auf das Uninitialisierte. So können Sie sehen, dass es hier
ein paar Methoden gibt , die für bestimmte Zwecke übertrieben werden können. Also das nach dem Rendern, eine Senke ist wirklich eine Methode, um zu sehen, nachdem die Komponente gerendert wurde, was würdest du mich tun lassen? Denken Sie daran, ich werde sagen, dass es wichtig ist, bestimmte Dinge an bestimmten Punkten zu tun. So wie wir die Akten einbezogen haben, könnte das
vielleicht eine Übertreibung gewesen sein, vielleicht hätten wir uns auf viel die Bestellung mischen können. Natürlich. Es ist besser, sie einfach aufzuladen, bevor alles das Maryland hier spaltet, lass mich sie einfach zurücklegen. In Ordnung. Das ist in Ordnung. Aber dann, was eine Komponente betrifft, wenn wir
JavaScript-Funktionen aus unserem eigenen Korridor aus dem Code von Drittanbietern aufrufen . Wir müssen das tun, nachdem die Komponente alle ihre Assets geladen hat. Das sagt diese Methode nach dem Renderer asynchron aus, nachdem die Komponente alles geladen hat, was sie tun muss. Was willst du mit diesem Extra machen? Also, während wir es tun wollen, ist das extra. Also werde ich einfach diese Standardzeile entfernen. Und ich werde sehen, dass ich nicht warten will, ein, G, S, und wir kennen diesen Code, wir haben dieses Quartal gemacht, der richtige JS-Aufruf ist sinken und einen Wert so sehr zurückbekommen, dass ich das einfach kopieren werde, richtig? Es ist derselbe Code. Js ist unser Objekt, rufen Sie eine Spüle auf. Der einzige Unterschied ist der Rückgabetyp. Also wollte ich diesen Rückgabetyp als Objekt setzen. Oder Sie können tatsächlich eine Sink Leere Art sehen, sorry, rufen Sie void async auf, die nichts zurückgibt, richtig? Also lasst uns die Leere versuchen. Wenn der Junge nicht funktioniert, gehen wir einfach zurück zum, zum Aufruf von Async. Aber wenn wir dies tun, müssen
wir diesen Methodennamen übergeben. Im Falle unserer Bestätigung ist
der Methodenname in JavaScript bestätigt, oder? In dieser Situation ist der Name der Methode, die wir aufrufen, unsere Datentabelle. Das ist unsere Methodik erstellt Add Datentabelle. Okay, was sind die Parameter? Dies nimmt also einen Parameter, die Bestätigung, die Nachricht, dass wir es in dieser Situation angezeigt werden wollen, unser Parameter hier ist der ID-Wert für unsere Tabelle. In Ordnung, C-Hashtag oder
Pfund, und dann der ID-Wert, und das war's. Wenn also die Komponente gerendert wurde, möchten
wir den JavaScript-Code aufrufen. In Ordnung? Nein, ich hätte erwähnt, dass der Einweg, also müssen wir sehen, was passiert, wenn Sie entsorgen. Also werden wir
den jQuery Entsorgungscode an die fast Standardkomponente entworfenen Codes binden . Ich werde nur sagen, leere ich Einweg-Punkt entsorgen, wenn Sie entsorgen. Das ist es, was ich will, dass du für mich tust. Ich möchte g aufrufen, rufen Sie auf. Und ich werde Ihnen nur zeigen, dass dies real ist,
richtig, aber diesmal eine andere Methode, der gleiche Parameter, gleiche Methode des Aufrufs außer ich rufe Datentabelle ist entsorgt und das ist eine Leere,
also sind wir nicht bereit, diesen Methodenaufruf zu warten. Okay, also lassen Sie uns das für eine Drehung nehmen und sehen, ob unsere Buchungsrede unsere Bedürfnisse widerspiegelt, dass niemand wir auf unsere Buchungsseite gehen. Da gehen wir. Wir haben unsere Datentabelle, die unsere Paging-Optionen anzeigt. Wir können seine sofortige Suche alles , was wir in der regulären HTML-Sitzende Wochenende tun könnten, nicht in unserer Blazer-Anwendung, dies geht nur um zu zeigen, wie einfach es ist, eine Bibliothek von Drittanbietern zu integrieren. Also ich denke, ich habe mit dem Beispiel begonnen, dass Sie wahrscheinlich
alte Disconfirm zu etwas wie einem süßen Alarm oder
etwas ändern möchten alte Disconfirm zu etwas wie einem süßen Alarm oder , das Sie voran gehen und es selbst ausprobieren können, die Vermögenswerte
bekommen, sie in die entsprechende Orte, und dann müssen Sie nur Ihren Aufruf zur entsprechenden Zeit aufrufen. Beachten Sie nun, dass, wenn ich zu den anderen Seiten navigiere, alles sauber ist. Ich habe die Datentabellen nicht auf den anderen Seiten platziert, aber wenn ich zurück zu Buchungen gehe, ist alles in Ordnung. Nun, wenn es nicht entsorgt wurde und ich zeige
Ihnen einfach die Konsequenz des enteignenden Falles. Du denkst vielleicht, dass es unnötige Schritte sind. Also werde ich nur diese Zeile auskommentieren Neustart. Und dann haben wir uns die Buchungsseite angesehen. Jetzt sieh dir die Spitze an. Was ich getan habe, war zu Buchungen
gehen, gehen Sie auf eine andere Seite über brennbare Kinn. Jetzt bin ich auf Buchungen. Schau dir an, was passiert, wenn ich zu Fahrzeugen gehe. Es ist immer noch vorhanden, so dass es die Datentabelle nicht aus dem Container loswird. Denn denken Sie daran, dass diese WebAssembly, sobald sie geladen ist, alles auf einmal vorgeladen ist. Also müssen wir uns kleinen Fußabdruck von
bestimmten Dingen halten , die wir in dieser Situation nicht wollen, dass die Datentabelle nur von der Buchungsseite nach oben geht, begann bei Kunden zu erscheinen. Und jedes Mal, wenn ich zu Buchungen gehe und zu einer anderen Seite Bewertung gehe, um weiter zu stapeln und zu stapeln. Deshalb ist dieser Entsorgungscode von größter Bedeutung. Alice Goldbach hat das nicht kommentiert. Es tut mir Leid. Ich wollte nicht nur experimentieren, und ich bin froh, dass du hier bist. Okay, das ist also eine nette und einfache Einführung, um JavaScript zu unterbrechen, Entschuldigung, mit Blazer. Sie können sich wieder in tra,
andere Bibliotheken von Drittanbietern erweitern , und dann können Sie Ihre Fähigkeiten Gebote hochschieben und
eine benutzerdefinierte Bibliothek oder Komponente entwickeln , die nur eine
dieser Bibliotheken implementiert , so dass Sie reduzieren Sie den Arbeitsaufwand und Sie rufen wiederholenden Code für GS-Aufruf auf. In Ordnung.
40. Upload: Hey Leute, willkommen zurück. In dieser Lektion möchten wir einen Blick auf die Datei-Upload-Unterstützung werfen, die Blaser hat. Was wir also für diese Lektion tun werden ist das Hinzufügen eines Bildfelds zur Fahrzeugtabelle. Datei-Uploads sind natürlich nicht auf Bilder beschränkt, aber als Beispiel werden
wir das Fahrzeug verwenden, weil, wenn wir ein neues Fahrzeug hinzufügen, wahrscheinlich wollte ein Bild des Fahrzeugs zu nehmen, setzt es in das System aus irgendeinem Grund . Aber es kann auch angewendet werden, wenn wir Onboarding Kunden sind, würden
wir wahrscheinlich einige Einzelheiten über sie wollen. Wissen Sie, ihre Pässe sind einige gültige Führerschein sind einige Formen der Dokumentation. Das gleiche Konzept, das wir im Begriff sind, es
auf das Hochladen eines Bildes des Fahrzeugs anzuwenden, könnte
in mehreren Szenarien für alle Geschäftsregeln angewendet werden , die Sie möglicherweise haben. Also lasst uns anfangen. Also in der Fahrzeugdomänenklasse möchten
wir zwei neue Felder hinzufügen, und ich werde sie nur unten hinzufügen. Und der erste wird von RE öffentlich sein, also ist es nur ein Budget und ich werde dieses Bild nennen, da ist dieses Cloud-Bild, in Ordnung? Und lassen Sie sich einstellen, wenn wir
unser Image von der Client-Anwendung über die API transportieren . Wir werden es irgendwie in ein Byte-Array konvertieren müssen, eine Farm, und dann werden wir es zerlegen, über das Kabel
senden
und es dann wieder zusammensetzen, um es auf der anderen Seite zu speichern. Und das ist so ziemlich das, was das Thema abschienen. Aber was wir wirklich tun wollen, ist zur Kenntnis nehmen des Namens,
jemand, der dieses neue Feld namens Bildname hat. Und das ist wirklich das, was das Bild identifizieren wird. Also, was wir tun werden, ist, wenn wir es neu erstellen und speichern Sie es auf der Festplatte auf der API sagte, wir sehen, welchen Namen wir es in
der Datenbank gab , so dass sie abgerufen werden können, wann immer wir es brauchen. Nein, eine davon ist in der Datenbank erforderlich, und dies ist nicht diejenige, die erforderlich ist. Also, was wir tun können, ist eine Anmerkung darüber hinzuzufügen, um zu sagen und nicht mopped. Alles klar, also nicht mopped wird im Grunde ein sehen, wenn wir eine Migration machen, ignoriert dieses Feld. Ordnung, das ist also sehr wichtig, wenn Sie
Ihre Domain-Klassen bearbeiten und wahrscheinlich Felder einfügen, die Sie nicht in der Datenbank möchten. Sie fügen nur diese Anmerkung hinzu, die nicht zugeordnet ist, und sie überspringt die Datenbank. In Ordnung, also lasst uns das in der Praxis sehen. Also werde ich nur Migration hinzufügen. Und das wird das Bild zum Mantel sein. Fahrzeuge. Lass das los. Und wenn das fertig ist, können
wir einen Blick werfen und sehen, dass wir nur eines der beiden Felder haben, die wir gerade hinzugefügt haben. So Bildname ist keine zwei Fahrzeuge hinzugefügt. Also können wir einfach weitermachen und die Daten holen, richtig. Also wisst, dass das geschehen ist. Lassen Sie uns zur API springen und ein paar Anpassungen vornehmen. Erste Reihenfolge der Geschäfte, bitte injizieren Sie diese beiden Zeilen oder diese beiden Bibliotheken. Wir haben den Web-Host und die Umgebung, und wir haben den AI HTTP-Kontext-Accessor. Dies wird uns also Zugriff auf den statischen Dateiordner geben. Also dotnet core standardmäßig als statischer Dateiordner, der unser www root von
Art ist , dass früher durchgegangen ist. Was ist darin gespeichert? Also innerhalb dieses Ordners wollen
wir einen anderen Ordner namens Upload haben. So können Sie voran gehen und erstellen, dass einfach mit der rechten Maustaste, gehen Sie zu Hinzufügen und sagen Sie neuen Ordner und nennen Sie es Uploads. Und dann unsere Augen
Web-Host-Umgebungsobjekte , die wir hier injizieren, geben uns tatsächlich einfachen Zugriff auf Aufbau unserer Route zu unserem Upload-Ordner oder HTTP-Kontexte Zugriff, so wie Sie wissen, gibt uns Zugriff auf einige Anfrage Details auf ein- Abfragen, Details, die wir wollen, sind auf den aktuellen Server oder den aktuellen Hostwert, so dass wir tatsächlich eine URL erstellen, die ist, was wir in der Datenbank speichern werden. So lassen Sie uns zu den Schöpfungen springen. Alles klar, und entfernen Sie einfach meinen Haltepunkt dort. Und wir wissen bereits, dass wir unsere globale Fehlerbehandlung auf dieser Seite der API durchführen. Also müssen wir uns keine Sorgen machen, wenn es irgendeinen Fehler auf dem Weg gibt, es wird die 500 werfen und wir können uns bewegen. Aber was wir hier erreichen wollen, ist die Konstruktion der URL, die die RI, sagen
wir die Rekonstruktion der Datei. Denn denken Sie daran, dass es ein Byte-Array ist, richtig? Nein, oder es wird ein schlechter Bereich sein, wenn es vom Client über die API kommt,
so weiter, um es von einem Byte-Array in ein physisches Bild in unserem Upload-Ordner zu rekonstruieren. Also lasst uns hineingehen. Also zuerst, dann werde ich var URL haben,
und das wird gleich HTTP-Kontext-Accessor nicht HGTV-Kontext-Punkt-Anfrage,
Punkt-Host-Punkt-Wert sein. Also werde ich diese URL aufrufen, könnte es aktuellen Host, aktuelle URL nennen. Aber irgendwann nur über die zu sprechen, wissen Sie, wie wenn wir es von Visual Studio ausführen, wird ein lokaler Host-Doppelpunkt sein. Dieser Port, wenn wir ihn im Internet bereitstellen, wird jeder Domain-Name sein. Das ist also alles, was das wirklich abrufen wird. Als Nächstes wollen wir unseren Weg bauen. Und wie gesagt, oder der Pfad wird von der Web-Hostumgebung dot web root path kommen
, der uns nur einen direkten Pfad zu WW root gibt. Und dann haben wir unseren Upload-Ordner. Und dann werden wir nur in den Fahrzeugpunkt-Bild-Namen injizieren
, der natürlich mit
allen Informationen im VGG-Objekt zu einer Zeit der Erstellung übergeben werden sollte . Jetzt kommen wir in die guten Sachen, wo wir tatsächlich die Datei erstellen. Also werden wir unseren Dateistream verwenden, um das zu tun. So haben wir VAR Dateistrom gleich System dot o dot file dot erstellen. Und dann, was wir schaffen, ist, was auch immer Bild oder welchen Weg wir hier aufgebaut
haben, wir übergeben das nur das Ende. Dann unser Dateistream, wir werden es sagen, Fahrzeug Punkt-Bild zu schreiben. Denken Sie nun noch einmal daran, das Bild ist unser Bissbereich, also sind das unsere Daten. Also sehen wir richtig, diese Daten beginnen bei 0 und Von 0 bis zur gesamten Länge des Arrays. Also konzeptionell, wenn Sie also eine Abschreibung Datei sehen, diesen Schnabel, ziemlich richtig, wenn Sie nur den Mauszeiger darüber bewegen, werden
Sie sehen, schreibt einen Block von Bytes in den Dateistream. Also jede Art von Datei es ist, richtig. Es ist nicht auf Bilder beschränkt, waren nur Bilder hier, aber jede Art von Datei, wir schreiben es nur in das Dateisystem. Und dann schließen wir den Strom, sobald wir fertig sind. Und dann werden wir den Namen des Bildes auf Objektebene ändern. Also haben wir bereits den Namen und wir verwenden ihn für den Pfad. Ordnung, aber unser neuer Name, Fahrzeug Punkt Bild Name wird gleich https Doppelstrich Schrägstrich unsere URL sein, richtig? Oder Sie könnten es den aktuellen Host- oder Hostwert nennen, wie auch immer Sie es nennen möchten. Aber das ist, wo unsere Adresse ziemlich Schrägstrich, Hochladungen Schrägstrich und dann der Ursprung auf dem IM, der über die API kam. Das wird also in der Datenbank gespeichert. Und dann gehen wir weiter und machen den regulären Einsatz und Speichern. In Ordnung, also werde ich nur etwas Platz dort legen, der die Datei auf der API-Seite oder auf der Serverseite erstellt. Na gut, also springen wir zu unserer Formkomponente für unsere Fahrzeuge. Also werde ich in eine neue Form Gruppen setzen, wie wahrscheinlich setzt es einfach an der Spitze. Und ich werde sagen, dass dieser für ein optionales Bild ist, richtig? So beschriften Bild optional. Und dann werden wir eine Eingabedatei haben, Zunge. In Ordnung, also haben Sie die verschiedenen Arten von Eingaben gesehen. Wir haben das getan. Wir haben Nummer, wir haben Takes gemacht. Also nirgends tun Eingabedatei. Und dann unverändert werden wir ein Handle Dateien und Exxon Ereignishandler tun. In Ordnung. Ich werde auch ein Acetalpeta dort mit einer kleinen Warnung einlegen, Dateiwarnung hochladen. Also kann er einfach weitermachen und das tun. Und dann werden wir die Initialisierungen unten machen. Also der erste, der ist, werde
ich die Warnung initialisieren. Jetzt initialisieren Sie es. Sie brauchen nichts zu ändern, oder? Nein. Es wird nur gesetzt, wenn die Notwendigkeit für die Warnung entsteht direkt unter diesem Schwan, wir werden
unser privates Leerzeichen Telefon Shun für die Handhabung der Uploads haben , sorry, die Dateiauswahl. Also habe ich einen privaten Leere Griff schnell und wie Sean. Und dann haben wir als Parameter-Eingabedatei Änderungsereignis R, und dann R Tolkien, die wir gerade e. Ordnung, also würden wir wissen, dass ganze oder Ereignisse funktionieren, bis jetzt wir nur live auf gültigem senden gemacht haben. Und so jetzt sind wir auf eine benutzerdefinierte Veranstaltung suchen, die 45 Auswahl ist. Wenn also eine Datei ausgewählt wird, wird diese automatisch ausgelöst. Und dies ist der Datentyp, den wir alle Details
speichern, die für das Ereignis benötigt werden , das stattfindet, richtig. Ein Fall in Punkt wird eine Dateivariable haben. Ich werde sagen, var-Datei ist gleich E Punkt. Ich wollte mir E. ansehen. Wir sehen, dass wir Aktenkegel haben. Werden wir mehrere Dateien bekommen? Wenn wir also dem Benutzer erlauben würden, mehrere Dateien hochzuladen, könnten
Sie einfach alle einmal als Array oder Sammlung bekommen, genau hier sind wir. Wir bitten nur um einen. Also E-Punktdatei. Aber dann müssen wir sicherstellen, dass diese Datei tatsächlich Inhalt hat, oder? Also oder weil denken Sie daran, dass, wenn die Klinik, selbst wenn sie nichts auswählen, dieses Ereignis gefeuert worden wäre. Richtig. Also versuchen wir, in die Datei zu gelangen, aber dann müssen wir immer noch sicherstellen, dass etwas
ausgewählt wurde und dann können wir unseren Prozess starten. In Ordnung. Keine automatische Füllung war reichlich Vorsicht. Möchten Sie unsere Erweiterung auf der Datei überprüfen. Also werde ich var EXT sagen, was kurz für die Erweiterung ist. Und dann werde ich nur ein System.out.println machen. Holen Sie sich die Erweiterung auf der Datei Punkt Nim. Ordnung, also hat dieses Dateiobjekt alles, was wir über die USA wissen
müssen , mit dem Inhaltstyp, wir haben den letzten geändert den Namen, die Größe von allem, was wir brauchen. Alles klar, Übrigens, dieser Datentyp wird Augenbrauen unserer Datei genannt. Das ist also Datentyp und das ist für Datei-Upload in Blazer, Augenbrauen oder Datei verfügbar. Als nächstes werden wir in eine if-Anweisung setzen, um die Dateierweiterungen zu überprüfen, die wir dafür sorgen. Also in dieser Situation wollen wir nur JPG, JPG und PNG. Natürlich, basierend auf Ihrer Situation, können
Sie mehr wollen oder Sie können unterschiedliche Einschränkungen haben. Aber wieder einmal ist dies alles übertragbare Wissen und übertragbare Konzepte. Also hier überprüfe ich nur, ob die Erweiterung, die wir gerade aus
dem Dateinamen gelesen haben, ist, ob sie eine unserer akzeptierten enthält, aber ich setze sie zu senken, weil manchmal Dateien
mit allen Großbuchstaben gespeichert werden, Mixed Caps sind, da die Erweiterung. Also wissen Sie, nur um alles auf einer Ebene zu halten, wo es in Kleinbuchstaben zu
zwingen und mit dem Kleinbuchstaben zu vergleichen. Dann in dieser if-Anweisung, wenn wir einen der Dateitypen erhalten, nach denen wir suchen, dann möchte ich einen brandneuen Wert für den Peak erstellen,
was ich eine Peak-ID nenne, aber es ist wirklich, dass das gegeben wird auf das Bild. Nein. Mein Szenario oder mein Grund dafür ist, ich nicht weiß, welchen lustigen Namen dieser Benutzer für eine dieser Dateien haben könnte, richtig? Ich möchte auch nicht riskieren, dass zwei Dateien mit demselben Dateinamen kollidiert werden. Also, was ich mache, ist die Generierung mit der Rasterbibliothek, guten Punkten, neues Gut für eine Zeichenfolge. Und was passiert ist, dass ein gutes Ihnen wie eine 16-Zeichenkette gibt. Und einige dieser Zeichenblöcke sind durch Bindestriche getrennt. Ich ersetze nur alle Bindestriche durch einen leeren Text. Am Ende bekommst du nur einen großen Blob scheinbar zufälliger Charaktere. Wenn Sie nicht mit dem vertraut sind, was ihre klebrigen es ist, das ist, was Sie davon erzählt werden. Und dann sehen wir Fahrzeug Punkt Bild Name ist. Sie verschmelzen das leere Volume mit der Erweiterung. Das ist also, was wir die Datei auf dem Dateisystem nennen wollen. Dann werde ich ein Fahrzeugpunktbild initialisieren,
das unser Militär zu einem neuen von RE angesichts der Größe file.js ist. Also haben wir die Datei jetzt, also initialisieren wir einfach eine Batterie, es ist fallen Losgröße. Und dann werden wir warten Datei nicht öffnen Stream, Punkt lesen Sie eine Senke und dann Fahrzeug Punkt-Bild, und das ist eine Szene, also das ist, warum es eine Linie. Also werde ich das nur zu einer Spüle leere machen. Okay, und das sollte sich um diese Ära kümmern. Da gehen wir. Alles klar, also wird das im Grunde nur sagen Datei
öffnen und kopieren oder Inhalte in unser Byte-Array, das Fahrzeug Punktbild ist. Das ist, wenn wir die Dinge bekommen, die wir wollen. Andernfalls werde ich nur Upload-Datei Warnung geben. Also einige Inhalte zu sehen. Bitte wählen Sie eine gültige Bilddatei aus und teilen Sie ihnen die Erweiterungen mit. Ich werde JPEG nicht setzen. Du könntest, wenn du willst, aber ich denke, das ist klar genug. In der Tat, wenn wir die Warenkorbdatei bekommen, möchte
ich nur sicherstellen, dass, wenn der Fehler vorher da war, dass es immer war. Also werde ich nur dies initialisieren oder den Wert der Upload-Datei Warnung zerstören nicht leer, wenn wir den Warenkorb gegeben haben. Also, wenn es MDRD ist und dann wird es immer noch leer sein. Wenn Sie Inhalte eingeben und wir den richtigen haben, dann wird es leer sein. Nein, also ist das in Ordnung. In Ordnung, also lasst uns diese Anwendung für einen Spin künstlicher Belastung nehmen. Die Mehrheit des Formulars. Ich gehe einfach voran und wähle hier eines meiner Bilder aus und erstelle dann das Fahrzeug. Und dann sehen wir, dass wir das neue Fahrzeug bekommen, aber wir haben keine Möglichkeit, dieses Fahrzeug anzuzeigen, oder? Nein. Es wäre also schön, wenn wir das Bild hier auf der Seite auf
der Indexseite sehen, um zu zeigen, welches Fahrzeug es ist. Also werden wir auf die Index-Seite springen und die folgende Änderung wird neue Header in dieser Tabelle leeren. Nein, ich muss kein Bild setzen. Ich werde keinen Text in die Kopfzeile einfügen, aber wir werden diese neue Spalte haben, diese neue td, die nur IMG SRC gleich dem Fahrzeugpunktbild Name ist. Also denken Sie daran, Bildname ist der Pfad auf dem Server, wo das Bild Telefon sein kann. Also sehen wir nur Ihre Quelle. Ist diese URL so ziemlich, die wir von der API-Seite erstellt hätten. Und dann setze ich nur einen benutzerdefinierten Stil ein, um zu sagen, Höhe und Breite sind 150 Pixel. Also werde ich das einfach speichern und nehmen, und wenn wir unsere Seite neu laden, sehen
wir unser Bild erscheint. In Ordnung, also nochmals ist das nur Einbettung. Lassen Sie mich ein inspect-Element machen und Sie sehen, dass dies die URL https lokalen Host ist. Also, das ist, was wir durch den Kontext, Zugriff auf sie sorry, den Hostwert, und dann den Upload-Ordner und dann den Bilddateinamen. In Ordnung, also lasst uns versuchen, eins ohne das Bild hinzuzufügen. Toyota besucht also, ich werde nur einige Dummy-Werte eingeben, um das schnell durchzustehen. Und dann gehen wir voran und klicken auf Fahrzeug erstellen. Und okay, also ist gerade etwas Interessantes passiert. Eins. Es gibt keine Schöpfung. So eindeutig gab es auch einen Fehler. Wir haben tatsächlich gesehen, dass 500 Seiten bündig auf und dann abspülen. Also ist etwas definitiv 0. Also lassen Sie uns zurück
zum Controller gehen und wir werden einige Änderungen hier vornehmen müssen. Tatsache ist also, dass unser Code hier davon ausgeht, dass ein Bild vorhanden sein wird. Also denke ich, es ist, es gibt mir einen Fehler an diesem Punkt, weil es dann sieht, richtig? Nichts, da dies an dieser Stelle null wäre, wenn während des Dateihochladevorgangs
kein Bild ausgewählt wurde. Alles klar, was wir dann tun wollen, ist vielleicht das in eine if-Anweisung umschließen, die wir nur versuchen,
all dies zu tun , wenn das Bild oder die Byte-Array-Länge größer als Z ist. Alles klar, also habe ich diese einfache Anweisung gemacht. Wenn Fahrzeugpunktlänge größer als 0 ist, dann gehen Sie vor und rufen Sie die URL, erhalten Sie den Pfad, und machen Sie all das ausgefallene Zeug alle, bevor wir versuchen, zu speichern. Das bedeutet also, wenn kein Bild GameOver, dann wird es nur wie normal funktionieren. Dieser Schritt ist also wichtig, weil wir das
auch berücksichtigen wollen, wenn jemand das Fahrzeug aktualisiert, er hat möglicherweise den Update-Vorgang gestartet und das Bild geändert oder nicht, richtig? Also, wann wissen wir, wenn zwei Gene. Also diese if-Anweisung könnte genau hier wiederverwendet werden. Wenn dieses Byte-Array Daten hat, dann ist es eine sichere Annahme, dass ein neues Bild vorhanden ist. Wir müssen den Dateipfad basierend auf dem neuen Namen rekonstruieren ,
der diesem neuen gegeben wurde, um diese Datei hochzuladen, gehen Sie weiter und aktualisieren Sie die Datenfelder. Und letztendlich aktualisieren wir das Fahrzeug. Dann bemerken Sie, dass sich alle diese Codezeilen irgendwie wiederholen. Also wäre es schön, wenn wir eine Form von Funktion erstellen, die diese ganze schwere Heben und wahrscheinlich nur den Bildpfadnamen zurückgibt. Also werde ich nur all
diese Zeilen nehmen und ich werde eine andere private Funktion erstellen, nicht wahr. Also diese Funktion, ich habe es gerade getan, so dass Sie
immer einfach anhalten und replizieren können , was ich Sie sowieso durchlaufen werde, private Zeichenfolge, ich nenne es erstellen Dateipfad. Ich hätte es erstellen Datei nennen können. Es hängt davon ab, dass wahrscheinlich Datei erstellen ist ein bisschen TR Beschreibung tut es die Datei zu erstellen. Und dann, was wir möglich werden, während das Byte-Array des Bildes und der String-Name, richtig? Also habe ich den Code kopiert und eingefügt. Deshalb haben wir diese Referenzpfeile. Also tauschen wir diese alten. Also statt Fahrzeug, der Bildname, werde ich nur Namen sagen. Anstelle von Fahrzeug Punktbild, Ich übergebe Bild. Und dann wäre das auch Bild. Ordnung? Und dann am Ende werde
ich nur diese konstruierte URL zurückgeben https Slash Schrägstrich die URLs Uploads und dann übergeben wir Buck-Namen. Ordnung. Was wir dann tun können, ist, dass wir sehen, ob die Bildlänge größer als 0 ist, dann wird der Bildname ein Aufruf dieser Funktion sein. Also nennen wir es Create File. Und wir fahren im Fahrzeug vorbei. Punkte. Und der erste ist das Byte-Array, also das Bild und dann Fahrzeugpunktbild Name. In Ordnung, so dass wir nicht zu viele
Codezeilen wiederholen müssen , ist nur eine einfache if-Anweisung und 19. Also denke ich, dass dies viel mehr ist, es ist viel sauberer und es ist in diesem Format wiederverwendbar. Wenn wir ein Bild bekommen, das Funktionsaufruf dieses Feld durch die Zeit aktualisiert, zu der es hier zurückkommt, wissen
wir, dass die Datei bereits erstellt worden wäre und dann gehen Sie weiter und aktualisieren. In Ordnung. Das ist also ein Thema, das behandelt wird, oder? Das warf die Ära, als es
kein Bild gab , das es durch einen Fehler zur Verfügung gestellt wurde? Nein. Das andere Problem ist, dass wir unseren Abfangjäger haben, der Jumbo bedeutet, was es schafft Raise. Alles klar, das ist also ein Kreieren für Fahrzeuge. Und denken Sie daran, dass wir unsere Abfangjäger eingerichtet hatten, um alle Aktivitäten zu überwachen. Also tatsächlich eine Antwort hier. Wenn Ihr Code nicht so aussieht, ist das in Ordnung. Das sollte nicht da sein. Aber wir haben diesen Abfangjäger, um
die alte Spalte dieser Operation zu überwachen und dann eine bestimmte Aktion zu ergreifen. Also haben wir das Axon tatsächlich gesehen, weil Sie den roten Text auf dem Bildschirm flush gesehen haben, aber dann ist es immer noch zur Indexseite navigiert. Und das wollen wir nicht unbedingt, oder? Also müssen wir hier einen kleinen Mut machen, wo
ich während des Tests, während der Implementierung, eine Ausnahme am Ende dieser switch-Anweisung werfen würde, die ich später. Also müssen wir es zurücksetzen, denn was passiert ist, ist, dass es diese if-Anweisung getroffen hat. Natürlich, wenn du einen Pfeil hast, bedeutet
das, dass wir wahrscheinlich FIFO 100 haben. Einer der oben genannten, wir wissen, dass es keine 40 ist, weil es an die Ressource ging. Wir wissen, dass es nicht das Unbefugte ist. Das bedeutet, es muss ein 500 gewesen sein und dann sollte es Knochen Werkzeug haben, die 500 Seite, aber dann sind es Knochen dort und dann immer noch hier navigiert. Wir brauchen also eine Möglichkeit, die Ausführung der Anwendung zu stoppen, nachdem dies geschieht. Und dieser sichere Weg wäre, die neue Ausnahme zu werfen. Also werde ich eine HTTP-Anforderungsausnahme auslösen. Dies ist also nur eine HTTP-Anforderungsausnahme, es wird nur die Nachricht darin haben. Nur um zu sehen, dass das wahrscheinlich schief gelaufen ist. Und so wird dies die Ausführung stoppen, nachdem es zu dieser Seite navigiert. Dann würde es nicht so weit gehen. In Ordnung. Lassen Sie uns das noch einmal versuchen. In Ordnung. Also sind wir wieder auf die Fahrzeuge erstellen neue Fahrzeugseite. Und ich werde kein Bild wählen und dann werde ich voran gehen und Fahrzeug erstellen. Und so bekam dieser Fehler. Entschuldigen Sie sich, dies sollte überprüfen, ob es nicht gleich null ist. In Ordnung, also sollte ich nicht die Länge nehmen, denn wenn nichts zur Verfügung gestellt
wird, wird es null sein. Das ist also mein Fehler. Lassen Sie uns einfach diese Einstellung vornehmen, damit das Fahrzeugpunktbild nicht gleich null ist. Dann gehen Sie voran und versuchen, das erstellen Fahrzeug zu tun. Okay, also lassen Sie uns das versuchen. Ordnung, also sind wir wieder im Bildschirm „Neue Fahrzeuge erstellen“. Wir wählen kein Bild. Und dann werden wir weitermachen und ein Fahrzeug erstellen. Jetzt, da wir das getan haben, sehen
wir, dass es in den Kopf geht, es
schafft, es erfolgreich, und es gibt kein Bild. Alles klar, was wir tun werden, ist nur
sicherzustellen , dass unser Abfangen funktioniert, weil wir das behoben haben. Ich will es nur überprüfen. Also am Anfang des schafft, richtig? Ich denke, wir würden diesen Test ausführen, wo ich am Anfang eine Ausnahme geworfen habe, aber dann war das darin, eine Liste zu bekommen. Es gab also keinen tatsächlichen Code, um danach irgendwo zu navigieren. Deshalb hätte ich Aktivität ohne rote Flags verlassen, aber normalerweise einfach eine Ausnahme an der Spitze der Post VBR werfen. Sie müssen diesen Schritt nicht unbedingt tun. Du kannst einfach mitverfolgen. Ich wollte nur überprüfen, dass oder Änderung, wo noch einmal ausfüllen oder Formular mit Dummy-Daten und dann klicke ich auf Create car. Und dann sehen wir, dass wir auf unseren 500 landen, ohne weggefahren zu werden. Das ist also das erwartete Verhalten dieses Interceptors und wie er navigiert. In Ordnung, also haben wir das angepasst und das sind nur die Teile des Prozesses. Und manchmal wirst du etwas suchen und dann später findest du einen Fehler. Aber es ist immer gut, diese Dinge früh zu fangen. Es ist gut, dass wo, wissen Sie, durch diese Aktivität
gehen und dann sehen wir ein Knick in der Rüstung und angepasst entsprechend. Okay, also noch eine Überprüfung, und das ist das Testen der Update-Funktion, richtig? Also ds1, um voran zu gehen und das Bild für den Prius zu aktualisieren. Und ich werde nur die schönen blauen Straßen wählen, die sie sind. Klicken Sie auf Aktualisieren und dort gehen wir. So sehen Sie das Erstellen von Arbeiten, Aktualisieren funktioniert. Es gab keine imaginäre es gibt. Lass es mich noch einmal machen. Weil Sie wissen, die Bilder, die Verfüllung für ein System, nein, also haben wir alle vier Bilder angezeigt. Okay, also kannst du dieses Konzept annehmen und weitermachen und wahrscheinlich durch den Ansichtsbildschirm verbessert werden. Und wieder einmal, dieses Konzept ist etwas, das Sie auf andere Dinge
anwenden können , wenn es um das Hochladen von Dateien geht. Ein weiteres gutes Beispiel wäre die Notwendigkeit von juristischen Unterlagen von den Kunden. Bei der Erstellung benötigen Sie eine ID, welche Steueridentifikationsnummern zur Verfügung gestellt werden, Sie brauchen eine ID zu viel, die spezifische, richtig? Fliegen Sie immer noch dran. So können Sie weitermachen und damit experimentieren. Aber Sie haben den Rahmen zu folgen.
41. Generic HttpClient Repository: Hey Leute, willkommen zurück. In dieser Lektion wollten
wir in diesem Kurs ein HTTP-Request-Repository einrichten. Und der ganze Kontext dafür ist, dass es ein paar Dinge gibt, die wir
tun wollen , und wir müssen ständig tun, wenn wir unseren HTTP-Client machen. Denn ich meine, diese Linie ist einfach NADPH. Wir wiegen die Client-Beiträge als
JSON, JSON async, erhalten die Endpunkte und wir übergeben das Objekt, es ist einfach genug. Aber dann, da Ihre Anrufe etwas komplizierter werden könnten. Und in dieser Situation, eine Ebene der Komplikation, dass wir diesen Abfangjäger einseitig zu diesem Interceptor direkt in jede Komponente, in die Komponente oder
in den Code hinter sich bringen mussten. Und dann mussten wir sicherstellen, dass diese Linie vorhanden war. Also bin ich mir sicher, das war irgendwie ärgerlich. Und dann, wenn Sie eine andere haben, wenn l eine andere Komponente oder sie werden in Betracht ziehen müssen, müssen
sie dies verlassen und dann in der Regel in Septen. Und wenn sich etwas ändert, haben
Sie eine ganze Reihe von Dingen zu Geparden. Natürlich ist es immer gut, wenn wir
unseren Code, von dem wir wissen, dass er sich wiederholt, in einer nutzbareren Form setzen , oder? So wird zusätzlich, bis der Interceptor,
der den HTTP-Client schlägt , direkt in jede Komponente injiziert. Und dann haben wir diese Funktionsaufrufe. Und dann, wenn wir irgendwelche zusätzlichen Informationen oder Hitters haben, die wir auf sie setzen müssten, würden alle diese Komponenten haben und noch einmal modifizieren. Was wir also tun werden, ist ein paar generische Repositories einzurichten. So hättest du die Macht gesehen, generische Sachen bereits aus, als wir unsere Einheit der Kraft gemacht haben, um die API zu bilden, sagte,
richtig, wir sagten das schlechte generische Repository und unsere Einheiten des Work-Repositorys. Auf der Client-Seite werden wir also unser HTTP-Client-Repository einrichten. In Ordnung, Seele. Was ich tun werde, ist einen neuen Ordner im Client-Projekt zu erstellen. Und wir werden diesen neuen Ordner anrufen, und ich werde es Verträge nennen, richtig? Weil Sie im Allgemeinen Verträge haben und Dienstleistungen direkt hier unten haben, nennen
wir es eiserne Repository- und Repository-Benennungskonventionen. Aber im Wesentlichen ist das das gleiche Konzept der Schnittstelle, die sagt, das ist, was ich tun kann. Und dann haben wir die Implementierung, die es tut. Wir wissen also, dass wir versucht haben, den Vertrag
in unsere Anwendungen zu injizieren , wie wir es mit der Arbeitseinheit I im Gegensatz zur Arbeitseinheit getan haben. In Ordnung, also wird unser Vertrag hier eine neue Klasse sein. Was ich gerade erschaffe Kunstklasse. Natürlich willst du das ändern. Ich nenne es nur ich HTTP-Repository. Wir gehen voran und fügen das hinzu, und dann ändern wir es von der Klassenschnittstelle. In Ordnung? Und dann wird dieses Repository einen generischen Parameter von t
nehmen. Wir nennen es nur t, wobei t eine Klasse ist. Dieser sichere Estrich oder T-Doppelpunkt Klasse. In Ordnung, also nehmen wir die verschiedenen Typen auf. Wieder mal, Generika. Also innerhalb dieser Implementierung werden
wir ein paar Methoden haben. Holen Sie sich, bekommt, dass eine Liste von t zurückgibt. So ist t wieder das Objekt, das wir anfordern oder der Datentyp, den wir anfordern. Also komm durch Kurven. Man bekommt, dass eine Liste zurückgibt und wir könnten
dies wahrscheinlich ein bisschen mehr qualifizieren , um zu sagen, bekommen alle bekommen Liste oder etwas, ich werde es einfach lassen, ich bekomme, dass alle vier null sind. Aber Aufgabe, die erstellt wird, die die URL und das zu erstellende Objekt nimmt. Wir haben Aufgabe die Aktualisierungen, die Tage die URL, das Objekt und die ID. Und wir haben Stoßzähne löschen, die nur die URL und die ID nimmt. Alles klar, das ist es für unseren Vertrag. Ich HTTP-Repository weiß, in unseren Diensten sind die Gründe, warum der
Dienstordner , den ich auf kras hinzufügen werde, und wir werden es HTTP-Repository nennen. Nun, http Repository, wir werden das generische oder Parameter haben. Und es wird vom HTTP-Repository erben, das auch diesen generischen Parameter hat. Und dann qualifizieren wir es, wo t eine Klasse ist. Und dann gehen wir einfach weiter und schließen die fehlenden Namespaces ein. Und dann müssen wir diese Implementierung der Schnittstelle tun. Also jetzt haben wir unsere Methode erstellt und sind bereit für, wissen
Sie, auszuarbeiten. Also muss ich zumindest den HTTP-Client injizieren. Und natürlich wissen wir, dass wir den Abfangjäger haben, den wir in jedem Anruf präsentieren wollen. In Ordnung, also werde ich einen Konstruktor machen. Und in diesem Konstruktor werde ich
den HTTP-Client und/oder den HTTP-Abfangdienst haben . Also werde ich nur weitergehen und
alle fehlenden Referenzen einschließen und dann initialisieren wir einfach Felder. Also habe ich die Feldnamen mit den auf den Partituren kopiert und eingefügt. Also lass mich einfach den Hafer tauschen. Wir sind bereit zu Fleisch, was auf einem erstellen passiert. Schauen wir uns einfach an, was wir getan haben, als wir erschaffen haben. Also, wenn wir sagten, erstellen Mikrofon, würde Wanda Abfangjäger, und dann würden wir diesen Aufruf machen, der diesen Endpunkt nimmt, den entsprechenden Endpunkt und das Objekt für die Erstellung. Also werde ich nur kopieren, ich bin nicht vor Gericht gegangen. Nun, ich werde es nur kopieren. In Ordnung. Und dann gehen Sie weiter und fügen Sie alle fehlenden Referenzen ein. So MC Methode eine Spüle. Und wir müssen auch einschließen, na ja, wir müssen keine Endpunkte einschließen. Grund bedeutet, dass wir die URL angeben. Also weiß ich nicht, was der Objekttyp ist. Ich weiß nicht, wie die URL hier ist. Es war eng gekoppelt, weil du wusstest, dass du auf dem Weg bist. Also wussten wir, das und das Objekt zu übergeben. Also hier wissen wir nicht, was die URL sein wird. Also kann ich diesen harten Wert nicht verwenden, da er von diesen spezifischen Komponenten kommt. Ich werde nur URL nehmen, die übergeben wird, wenn diese Methode aufgerufen wird. Und ich weiß nicht, was das Objekt ist. Kugeln, ich gehe einfach OBJ vorbei und das war's, richtig? Für den Löschvorgang. Was passiert, wenn wir es tun? Ich werde nur zu einer dieser Indexkomponenten springen. Und dann siehst du hier, dass ich nicht mal den Abfangjäger benutzt habe. In Ordnung, das ist also eins von diesen Dingern. So wollen wir abfangen sind die ganze Zeit anwesend. Aber natürlich war es mühsam, es zu wiederholen, aber ich werde mir nur diese Codezeile leihen, die relevant ist, also weiter, das Löschen, wir werden mit unserem Abfangjäger am dritten dieses Ereignisses beginnen, richtig? Und diese Methode Async. Und dann werden wir nur die URL und die ID sehen. Wieder einmal ist es nicht spezifisch, also müssen Sie das gleiche Format behalten. Also URL-Schrägstrich ID, Ordnung, für die bekommt, und ich bin sicher, dass Sie die Idee nicht bekommen, dieser Interceptor muss in jeder Methode verwendet werden. Weil wir natürlich überwachen wollen, was passiert, oder? Und dann werden wir nur die entsprechenden Anrufe einführen basierend auf dem, was wir in der entsprechenden Komponente getan hätten. Okay, also ging ich einfach weiter und füllte alle verbleibenden Methoden. Also für den get haben
wir den Abfangbegriff und dann geben wir unseren Gewicht-Client von JSON async zurück, Sie müssen möglicherweise eine fehlende Bibliothek einschließen, zum Beispiel diese. Aber wir schließen das ein und gehen voran. Wir haben den Typparameter vom Typ T, weil
wir noch einmal nicht wissen, was wir bekommen. Und dann sehen wir URL Schrägstrich die ID 4 bekommt alles ähnliche Konzept, außer dass wir
eine Liste zurückgeben und das sollte wahrscheinlich eher wie Alice sein, weil wir gesehen haben, dass ich in der Anfrage auflisten, richtig, also werde ich einfach zurückkehren und das ist in Ordnung. Und die URL, in Ordnung. Und dann für die Aufgabe Update, werden
wir sehen,
setzen Sie uns JSON eine Sync-Richtlinie, RL slush die ID und unser Objekt. Eine weitere Sache, die wir wahrscheinlich in
Betracht ziehen sollten , oder wir werden tun müssen, ist die Entsorgung, richtig? Also wollten wir nur sicherstellen, dass wir diese Kraft behalten. So gibt es eine Schnittstelle, die wir Einweg einschließen können. Und dann können wir mehrere Vererbung von mehreren Schnittstellen in C scharf haben. Und dann implementiert das die Dispose-Methode genau hier. Andere über bearbeiten mit unserem Code, wo wir sagen, dass in Abfangpunkt Punkt Ereignisse entsorgen. Alles klar, als nächstes müssen wir zu unserer
Datei program.cs gehen und unser HTTP-Repository registrieren. Das ist alles, was wir tun werden. Builder Dot Services sind transient und dann sagen wir typeof und übergeben dann den Namen unseres Vertrags, das Auge HTTP-Repository und dann die Typ Klammern. Da es generisch ist, sieht
die Implementierung oder die Registrierung etwas anders aus als das, was wir mit der Arbeitseinheit oder Distribution gesehen haben könnten. Lassen Sie mich das einfach schnell bringen. Also, als wir die Einheit der Arbeit gemacht haben, sah es so aus, dass ich vergänglich war, oder? Also haben wir die Klammern, diese Art von diesem Typ in dieser Situation. Wir werden offene Klammer,
Typ I HTTP oder Poster mit den Klammern Komma-Typ von HTTP-Repository mit Raketen sehen . Beachten Sie, noch einmal, dies ist generisch. Wir könnten spezifisch werden und tatsächlich wie
spezifische Implementierungen von Repositories haben , die spezifische Collie, tut mir leid, dass ich spinnen. Siehe in einer bestimmten Farbe, aber das direkt den Datentypen zugeordnet ist, die wir verwenden. Es könnte also das Buchungs-Repository, das Farben-Repository haben. Und das gibt uns natürlich die Möglichkeit, die Funktionalität direkt
für den jeweiligen Typ oder verschiedene Operationen zu erweitern . Vielleicht brauchen Buchungen etwas anderes, was die anderen nicht tun. Das generische Muster funktioniert möglicherweise nicht notwendigerweise. Also an diesem Punkt wieder etwas darüber, mehr Repositories zu haben, aber im Moment machen wir einfache Massen von, also werde ich nur das einfache generische Repository haben, das jeder verwenden kann und genießen und bemerken, wo ich es hinstelle. Ich versuche, es nach der Registrierung des HTTP-Clients und des Abfangs zu setzen. In Ordnung, jetzt, wo wir all das eingerichtet haben, können
wir zu unseren Komponenten zurückkehren. Und ich werde anfangen mit, wir fangen immer mit dem einfachen an. Also lasst uns Farben machen, richtig? Also in der Create-Lotterien oder Datei, hätten
wir den Abfangjäger sowie den Client injiziert. Wissen Sie, was ich tun werde, ist das HTTP-Repository zu injizieren. Und was wir hier tun müssen, ist entweder die using-Anweisung direkt an
die Komponente oder wir wissen, dass wir einfach eine using-Anweisung zu
den View-Importen hinzufügen können , so dass jeder sie haben wird. Okay, das ist also etwas, das man in Betracht ziehen kann. Aber ich werde nur mit den Farben und dem alten vorantreiben. Da es generisch ist, müssen
wir die Datenklasse angeben, also muss ich Farbe sehen. Ordnung? Und dann lassen andere es als Kunden. Also das bedeutet, okay, also wird das injiziert und dann hat der Client nicht mehr als JSON-Punkt eine Senke gestellt. Nein. Der Client wird einen Funktionsaufruf für create haben. Und die beiden Parameter sind der Endpunkt und die zu erstellende Farbe. Ich kann den Interceptor entfernen und lassen Sie mich einfach den Modus für ein Nein kommentieren. Und dann lasst uns diese Reiter nehmen. Wir werden also versuchen,
eine neue Farbe zu kreieren und dann zu sehen, wie alles miteinander verbunden ist. In Ordnung, also lassen Sie uns weitermachen. Bringen Sie Farben nach Hause, erstellen Sie neue Farbe. Und dann werde ich in das, was ist eine andere gemeinsame Caracalla? Lass uns einfach in Grün setzen. Und dann schaffen wir Farbe, und da gehen wir. So wird unser HTTP-Client immer noch ausgelöst, obwohl wir nicht angewiesen sind, ihn anzurufen. Und wir haben unser Repository wissen. Wir haben also weniger Injektionen und weniger
Kontaktstellen und insgesamt weniger Wartung, wenn sich etwas ändert, richtig? Also, jetzt kann ich einfach diese Schuldnerreferenzen entfernen,
das entfernen Vererbung entsorgen und die Injektion des Abfangs entfernen. Und dann können Sie sehen, dass unser Komponentencode ein bisschen sauberer aussieht. Das ist also ein nettes kleines Muster, an das man immer nachdenken kann. Wissen Sie, jederzeit, wenn Sie etwas immer und immer wieder tun und den Code wiederholen und dann beginnen Sie, es hinzuzufügen. Und dann haben Sie mehrere Kontaktpunkte, dann können Sie darüber nachdenken, wie Sie diese schweren Bits
von einer Komponente oder einer Methode oder einer anderen Klasse im Allgemeinen behindern können , und sie in eine Klasse für sich selbst und Wiederverwendung. So können Sie voran gehen und dies umsetzen. Dann würde ich Sie einfach auffordern, alle Ihre
Referenzen zu durchlaufen und zu aktualisieren, die direkt auf den HTTP-Client und der Interceptor zu wissen,
zeigt auf das entsprechende Repository dafür -Komponente. Also, als ich das entsprechende Repository sagte, na ja, dieses eine Repository, aber natürlich muss die Data-Klasse die richtige sein, oder? Natürlich haben wir bereits die übergebenen Endpunkte und die Objekte. Also, wenn Sie die falsche verwenden, dann erhalten Sie einen Fehler. Also werfen wir einen Blick auf Mikrofone. Wenn ich dies anscheinend an den Mix
ansehe, werde ich den Client durch dieses Repository ersetzen. Fügen Sie eine Referenz ein. Dann sage ich Farbe und dann hier unten sehe ich, dass dies erstellt werden sollte. Dann werde ich mit einem Pfeil enden, weil ich
den falschen Datentyp übergebe , richtig? So wissen Sie, dass die Konföderation, wenn nur um sicherzustellen, dass ich Datentypen hinzufügen, immer korrekt sind. Und dann können Sie einfach voran gehen und die Referenzen auf
den Interceptor und die Einwegreferenzen entfernen . Und dann können Sie das einfach mit allen anderen Komponenten entsprechend tun.
42. UPDATE: Magische Stränge entfernen: Alles klar, willkommen zurück Blizzard-Entwickler. In dieser Lektion werden wir versuchen,
unsere magischen Saiten zu reduzieren , und all diese Operation ist nicht einzigartig, um eine Entwicklung zu entflammen. Es ist nur eine gute Praxis im Allgemeinen. Und wir werden nur eine diskutieren, welche magischen Saiten darauf ankommen, warum wir sie reduzieren müssen. Also beginnend mit dem, was unsere magische Zeichenfolge ist, ist
eine magische Zeichenfolge jede Zeichenfolge, die ziemlich
hart codiert ist und es wird schlimmer, wenn sie um den Ort wiederholt wird. Ein praktisches Beispiel dafür , wo wir magische Strings verwendet hätten,
wäre wie in unserem Buchungscontroller für unsere API. Nein, das sind viele Extreme. Die Gefahren der Verwendung dieser magischen Strings
wären , dass, wenn ich den Tabellennamen von Fahrzeug morgen ändere, es keinen Hinweis von der IDE geben wird,
dass die Entwicklungsumgebung, dass sich etwas auf diesem möglicherweise nicht mehr relevant oder Warenkorb. Also, wenn ich diese magische Zeichenfolge hartcodiert habe und ich sehe Fahrzeug und Kunde. Und dann vielleicht änderte ich den Tabellennamen von Kunden weil denken Sie daran, dass diese beigefügt sind, die bei den Buchungen enthalten werden müssen. Das bedeutet also, dass es eine übereinstimmende Tabelle mit diesem Namen geben muss, damit sich der Name ändert, dann wird der Code keinen Fehler auslösen. Und wir werden nicht wissen, bis der Kunde Beschwerden, dass Hey, Ich klicke auf diese Schaltfläche und es hat nicht an diesem Punkt funktioniert. Es ist schon kein guter Eindruck. Ordnung, also werden wir uns ansehen, wie wir diese magischen Saiten Hafer ändern können. Und wir werden mit unseren Arbeitseinheiten beginnen. Okay, also der erste Weg, um unser eigenes zu bekommen, das mit
extremen Problemen übereinstimmt , wäre in der Liste der Includes anstelle von
harter Codierung, das Wort Fahrzeug , Hardcodierung, das Wort Kunde, ich könnte den Namen aus sehen und dann in den Namen der Klasse, die ich hinzufügen möchte, die Fahrzeug sein würde. Dies würde also tatsächlich eine Zeichenfolgendarstellung des Wortes Fahrzeug rendern, was in Form des Includes vollkommen legal ist, das eine Liste von Strings erwartet. Das heißt, wenn sich irgendetwas in der Fahrzeugklasse geändert hat, sich der Name geändert hat oder so etwas, dann würde dies definitiv einen Fehler werfen, weil es
keine Klasse mehr mit dem Namen Fahrzeug geben würde . Dies ist jedoch eine gute Lösung, aber es repariert nicht notwendigerweise das gesamte Szenario, zumindest relativ zu unserer Notwendigkeit, zusätzliche Eigenschaften aufzunehmen. Denn wenn in der Buchungsdomänenklasse, wenn ich tatsächlich den Namen der Immobilie vom
Fahrzeug ändern , um die Coups Auto oder so etwas zu speichern, dann gibt es immer noch keinen Hinweis auf dieser Ebene, dass es keine länger eine Navigationseigenschaft, die durch den Namen des Fahrzeugs aufgenommen werden soll. Also, was wir tun werden, ist alte den Mythos aus einschließlich ändern. Anstatt also eine Liste von Strings zu verwenden, werden
wir einen anderen Datentyp verwenden, der als AI abfragbar bezeichnet wird. Ich füge eine Abfrage von allem in Ordnung, Das ist, das ist ziemlich ein Bissen, aber es wird ähnlich aussehen wie unsere bestellten, ich bestellte abfragbar. Es ist eigentlich ein sehr ähnlich aussehender Datentyp. Also werde ich nur voran gehen und in
unserem generischen Repository die Liste der Includes ersetzen , die zu wissen ist. In Ordnung, wir kommen dran. Es wird die gleiche erste Teile-Funktion haben, unser Telefon Winkel Klammer ich abfragbar t,
es ist das gleiche, außer der zweite Teil ist, dass ich abfragbares t Komma-Objekt einschließe. In Ordnung? Und dann ist das wirklich nur die Funktion. Es gibt also etwas wie eine Funktion zurück. Und ich muss eine andere dotnet Core-Bibliothek einschließen. Das ist also das ganze Problem. Und dann hätten wir das Barometer-Herz ersetzt. Das wird also auch wieder für den Git tun müssen. Also werde ich einfach zum Get gehen und das auch ersetzen. Jetzt ist das in der Schnittstelle, natürlich, was auch immer wir tun, die Schnittstelle, die wir in der Implementierung tun müssen. So ist unsere Implementierung im
Moment nicht glücklich , weil wir etwas geändert haben, aber keine Sorge, wir werden bald auf die Geschwindigkeit so weit unser GET, wir tun das gleiche. Ich ändere dies zu unserem unglaublichen abfragbaren, und ich werde voran gehen und die fehlenden Referenzen einschließen. Dann wird das Gleiche für das alles. Ich weiß, dass wir getan haben, dass wir einiges umgestalten müssen. Erstens, unsere Methode ist auf jede andere Methode, die das aufruft. Ich benutze diesen Include-Parameter. Ordnung, also nein, innerhalb unserer Implementierung auf der Art und Weise, wie das Include null funktioniert, ist
es ein Mythos seltsam. Also müssen wir nicht für jede Immobilie gehen und versuchen, sie einzubeziehen. Stattdessen, was wir tun werden, ist nur entfernen Sie dies für jeden. Und dann sagen wir, Abfrage ist nicht gleich dem Includes, was wieder eine Methode ist. Und dann abfragen. Alles klar, so ziemlich, wenn wir ein Objekt übergeben , das ähnlich einem Lambda-Ausdruck aussehen wird, ähnlich wie die OrderBy Looks und so weiter. Aber wenn wir da sind, kommen wir dorthin. Was passieren wird, ist, dass, wenn etwas reinkommt,
in den oberen Mantel, den wir bereits mit dem Konzept von vertraut sind. Dann wird die Abfrage voran gehen und ausführen, die Teile davon gegen sich selbst enthält. Und dann haben wir diese Abfrage mit der mitgelieferten Genehmigung. Das sind eher Daten, oder? Also müssen wir etwas Ähnliches
in unseren bekommt alles tun , wo wir nur Abfragen sagen, die gleich ausgeführt werden, das schließt gegen sich selbst ein, bitte. Genauso mit dem RW. Beachten Sie, dass die Bestellung BY, die die gleiche Sache tat. Nun, das ist, was die Inklusive tun. Alles klar, ich schließe doppelt abfragbar ein. Jetzt, wo wir das haben, werde
ich zurück zu meinem Buchungscontroller springen. Und jetzt sehen wir, dass alles, was ich war irgendwie Chaos hat sich
gelöst , weil unsere Parameter nicht mehr Liste der Zeichenfolge enthält. Also kann ich das wirklich einfach entfernen, richtig? Wir wissen, dass wir Fahrzeuge und Kunden brauchen, also werde ich es mit diesem tun, das wir noch nicht modifiziert haben. Also für das Include-Spirometer, werden
wir Ausdruck übergeben. Also ging ich zu Q und einem Startup, der Lambda, Lambda-Ausdruck zu sehen. Und ich kann jetzt sehen, gehören. Da gehen wir. Jetzt enthalten kann kommen, aber es ist, was ich da drauf habe. Du gehst einfach weiter. Und wenn es mit einem Fehler kommt, können
Sie voran gehen und die fehlenden Referenzen einschließen. Wenn ich also sage, hier einschließen, kann
ich einen anderen Lambda-Ausdruck einfügen, der
Ausdruck enthält und dann die tatsächlichen,
die tatsächlichen Navigationseigenschaften der Buchungsklasse einschließt , so dass
wir wissen, wo direkt mit der Klasse reden, im Gegensatz zu Hoffentlich Drittens, setzen in eine Zeichenfolge und in der Hoffnung, dass es etwas in dieser Klasse passt. In Ordnung, damit ich C wissen kann, möchte
ich Fahrzeug einschließen. Und raten Sie was? Ich muss mehr als eine Sache einschließen, damit ich einfach ci und
das mitmachen kann und nochmals Dot Include sagen kann. Also beachten Sie, dass ich eingeschlossen habe und dann einschließen. Richtig. Also, wenn Sie es brauchen, um diese Eigenschaft und ein Kind dieser Eigenschaft enthalten, dann können Sie sehen, include, dot dann einschließen und Sie gehen weiter nach unten, um zu erreichen. Aber für jedes Mal, wenn Sie sagen, enthalten, Sie suchen direkt auf die Klasse in Frage, zumindest in diesem Fall Buchung. So schauen Sie sich nur die Buchungseigenschaften an, während Sie weitergehen. Also brauche ich und ich brauche Kunden. In Ordnung. Lassen Sie mich das einfach ein bisschen
in verschiedene Zeilen aufteilen , damit wir genau sehen können, was passiert. Und da gehst du. Es ist also alles stark getippt. Wenn sich also etwas in der Buchungstabelle ändert, wird
es definitiv den Code bringen, nur um zu sagen, dass wir das Repository ändern
würden und der gesamte Code ist kaputt. Es ist gut, wenn es in diesem Stadium kaputt wird, denn dann reparierst du es. Und dann können Sie Ihre Anwendung mit mehr Vertrauen veröffentlichen. Also werde ich einfach voran gehen und replizieren, die Aussage oben hier oben
enthalten, weil wir wissen, dass das ist, was dieser braucht. Entfernen Sie auch die Liste und lassen Sie mich einfach
sicherstellen , dass alle Pfeile, die ich geschrieben habe, loszuwerden, enthält Doppelpunkt. In Ordnung, also ist das ein Problem behoben. In Ordnung, also werde ich nur einen Build machen und sehen, wo sonst
kaputt sein könnte und unsere Fehlerliste, Glück ist es kurz, richtig? Nein, aber wir können hier sehen, wäre ein anderer Ort, an dem diese magischen Saiten ein Problem verursachen könnten. Alles klar, jetzt kann ich nur Punkte einschließen sehen und sich das ansehen. Ich verwende den gleichen Code, den ich für Buchungen verwendet habe, und ich erhalte Fehler. Warum bekomme ich Fehler? Nun, eins, Navigationseigenschaften nicht innerhalb von Fahrzeugen. Das ist also falsch. Kunde ist, was Fahrzeug ist nicht so oder so. Und nun, ich würde das Einverständnis von gleich nicht einschließen. Das Problem dabei war wieder einmal, dass, wenn ich hier einen Namen gegeben hätte, das ein Fahrzeug ist und es keinen Hinweis darauf geben würde, dass dies nicht funktionieren kann, bis das Programm abstürzt. Das spart also viel Zeit beim Debuggen
und Verhindern, dass Bücher jemals in diesem Stadium auftreten, richtig? So, jetzt kann ich sehen, schließen Sie das Mikrofon. Und dann kann ich sehen, dass wieder einschließen. Und dieser würde auf Abruf modelliert werden. Alles klar, jetzt haben wir alle drei von denen aufgenommen, und ich werde nur die Zeile kopieren und sie unten verwenden, enthält
auch Doppelpunkt und dann unsere Aussage und dann kann ich diese Listen loswerden. Alles klar, letztendlich hilft
das, viel von Ihrem Code zu bereinigen, es kugelsicherer
zu machen, während Sie weitergehen und er wächst. Nun ein weiterer Bereich, den ich ansprechen möchte, ein magischer Strom, der Probleme verursachen könnte, wäre innerhalb
unseres Buchungsobjekts oder Dummy ein Objekt, wo wir diese Validierung durchgeführt haben. Obwohl hier sehe ich, dass dies
unsere Botschaft ist und es gegen diese Eigenschaft angewendet werden muss. Noch einmal, wenn sich dieser Eigenschaftsname geändert hat, ist das zu viel von einem Pfeil. Aber wenn sich dieser Eigenschaftsname geändert hat und dann haben wir es hier geändert und wir haben es dort geändert. Wir könnten leicht vergessen, es dort zu ändern weil wir wahrscheinlich mehr von den roten Linien angezogen sind,
als auf der Suche nach jedem erfreut, dass wir das Wort oder die Wörter datieren gesagt haben. Also mein Punkt wäre noch einmal, und wir können in diesem Fall die ursprüngliche Methode verwenden, die ich gezeigt habe, wo wir den Namen aus
sehen und dann bitte den Namen der Eigenschaft darin. Dies wird also zu einer Zeichenfolge gerendert. Wenn sich also irgendetwas im Namen der Immobilie ändert, wird uns
diese rote Linie auch warnen. Das sind also kleine Entwicklungstipps. Wieder einmal ist dies nicht geschäftlich spezifisch, es ist mehr nur allgemeine Entwicklungsrichtlinien um sicherzustellen, dass Sie kugelsicher bauen. So Anwendungen und dass sie mehr wartbar für den längeren Lauf.
43. WICHTIG – Fix: Hey Leute, ich habe nur ein kurzes Addendum zur vorherigen Lektion, wo wir unseren Code ein wenig umgestalten und die konstanten magischen Strings
entfernen würden , wie sie genannt werden, wenn wir unsere Endpunkte aufrufen, aber diese Teile des Refactorings und die Art, wie ich schrieb es eine Art eingeführtes Problem mit dem Löschen. Was passiert also, wenn Sie den Code wie ich geschrieben haben, würden
Sie enden, wenn Sie dies löschen,
dieser Endpunkt würde eine 404 zurückgeben. Und der Grund dafür ist, dass ich
die statische Mix-Endpunkt-Zeichenfolge mit diesem abschließenden Schrägstrich erstellt habe . Und dann beim Erstellen der URL, setzen Sie uns
immer noch Schrägstrich. Das würde also bedeuten, dass Sie api Schrägstrich,
Schrägstrich als die ID haben würden . Und dann würde das tatsächlich dazu führen, dass es so einfach aufhört zu arbeiten. Sie könnten dies beheben, indem Sie vielleicht diesen abschließenden Schrägstrich der API und der statischen Zeichenfolge unter entfernen, anstatt diese nachgestellten Schrägstriche entfernen. Auf diese Weise können Sie, wenn Sie eine neue URL erstellen, diesen Schrägstrich setzen. Oder wenn Sie den Slush auf der statischen Zeichenfolge lassen und den Schrägstrich dort entfernen möchten. Aber ich denke, es ist schwieriger zu sehen, dass funktioniert, oder Sie wissen genau, wie das funktioniert. Also werde ich die Slushes von den API-Endpunkten entfernen. Und dann, wenn ich die URL selbst
bilde, werde ich diesen Schrägstrich dort setzen.
44. Progressive Web: Hey Leute, willkommen zurück. Also sind wir hier, um über progressiven Webanwendungen zu sprechen. Nein, progressiven Webanwendungen sind kurz PWA. Es ist persona bezieht sich auf Web-Anwendungen, die Verwendung von
modernen Browser-APIs machen und ermöglichen es Ihnen, herunterladbare Web-Ups zu erstellen. Also lass das ein wenig reinsinken. Also, wenn wir sagen, herunterladbare Web-Apps, diese Web-Anwendungen, ähnlich wie Orbiting ist hier oben. Denken Sie daran, als wir es erschaffen haben. Und ich habe darauf geachtet, auf bestimmte Optionen hinzuweisen. Und einer von ihnen war progressiven Web-Anwendungen. So kam es mit bestimmten Dateien, die progressive Webanwendungen unterstützen, nämlich den Worker-Service und jene JS-Datei als Manifest JSON. All diese sind irgendwie enthalten, weil wir uns für die progressive Web-Anwendung entschieden haben. Alles klar, so, um diese Web-Anwendung herunterladen und nur,
nur die 0, dass dies in Chrom-Browser verfügbar ist. Wie Sie hier sehen können, verwende ich Microsoft Edge. Ich habe Edge benutzt. - Was? Microsoft Edge mindestens zum Zeitpunkt dieser Aufzeichnung, basiert auf der Chrome-Engine von Google Chrome. Google Chrome ist der Pionier für diese Technologie. Opera basiert auch auf dieser Technologie. Nicht ganz sicher über die Unterstützung von Firefox für progressive Webanwendungen, zumindest zum Zeitpunkt dieser Lektion. Aber wir können Edge verwenden und einen Proof of Concept machen. Also, um diese APP herunterzuladen,
alles, was wir tun müssen, ist nach diesem kleinen
Baustein oben hier in der Adressleiste zu suchen und zu sehen, wenn ich über sie schwebe,
es heißt Installierte aktuelle Verwaltung. Das ist also der Name unserer App, die wir erstellt haben. Und ich kann einfach voran gehen und darauf klicken. Also die Sache ist, dass das oben ist eigentlich wie eine modifizierte Version eines Windparks bis, das in der Vergangenheit getan. Ordnung, also macht das eigentlich, es ist webbasiert, aber es gibt bestimmte Leute, die gerne die Apps auf ihrem Computer haben. Sie wollten manchmal im Offline-Modus arbeiten. Und all diese Dinge können durch diese fortschrittliche
Webanwendungstechnologie für Web-Apps ermöglicht werden. Also, wenn ich voran und klicken Sie auf Install in tatsächlich nur
ein paar Sekunden und setzen Sie diese Anwendung auf meinem Computer. Also hier ist die Anwendung auf meiner Maschine. Und Sie können sehen, dass es nicht mehr im Browser verdient. Ich kann immer darauf klicken. Gehen Sie zu Info. Ich kann es im Browser öffnen, wenn ich möchte. Ich kann deinstallieren. Ich kann sogar ein Mediengerät kosten, es ist auf meinem Computer. Ordnung, und es gibt das Symbol in der Startmenüleiste. Du kannst es wahrscheinlich nicht sehen. Aber ich bin tatsächlich über das Symbol hier unten, wo ich es tatsächlich einfach an die Taskleiste anheften kann. Da ist das Symbol. In Ordnung, also all diese Dateien,
der Manifest Dot JSON. Selbst wenn ich aufhöre, lass mich anhalten und mich zu diesen Akten überspringen. Das Manifest JSON hier könnte ich den Namen der Anwendung und den kurzen Namen,
all diese Dinge,
die buck gewachsene Farbe der Symbole ändern all diese Dinge, . Es gibt eine Reihe von Dingen, die Sie aus diesen Dateien tun können, die beeinflussen, was angezeigt wird, wenn diese heruntergeladen wird. Das ist also dieses Symbol, das ist Asche, die auf meiner Anwendung auftauchte, die sie auf dem Computer installiert hat. In Ordnung. Also, wenn wir das o auf das Firmenlogo oder so weiter ändern, direkt am Fledermaus, wenn es installiert wird, ist
das das Bild, das angezeigt wird. Und noch einmal kann er alle Änderungen in diesen Dateien vornehmen. Aber ich wollte nur 0, dass nur alle hart die Box nur durch die Auswahl ein paar zusätzliche Optionen. Als wir dieses Projekt erstellten, hatten wir angegeben, und wir erhielten so gnädig die Möglichkeit progressive Webanwendungen mit unserem Blazer zu
nutzen. So können wir jetzt eine hybride Situation haben, wo Web ein Web up, sie können leicht auf einem Windows-Gerät installieren, auf einem Linux, auf einem MAC, auf einem iOS, auf einem Android, es wirklich nicht viel auf einmal. Wir verwenden einen modernen Browser, der diese Technologie unterstützt.
45. Änderungen in GitHub hinzufügen: Hey Leute, willkommen zurück. Und wir sind an einem anderen Kontrollpunkt, wo wir gerade unsere Quote GitHub einchecken werden. Aber bevor wir das tun, möchte
ich einige derwichtigsten Gesprächspunkte von
den Aktivitäten, die wir zusammen abgeschlossen haben,überprüfen wichtigsten Gesprächspunkte von
den Aktivitäten, die wir zusammen abgeschlossen haben, und einige der Vorbehalte darauf hinweisen, weil ich Ihnen
einige Dinge gezeigt habe und dann habe ich Sie irgendwie verlassen, um zu beenden es hoch. Ich ermutige Sie, es zu beenden, noch alle natürlich, haben meine cool zu referenzieren, aber nur für den Fall, dass Sie in irgendwelche Schwierigkeiten auf dem Weg laufen, Ich möchte nur darauf hinweisen, bestimmte Dinge alle, um Sie. Und das werden wir tun, bevor wir weitergehen und vorwärts gehen. Also als Zusammenfassung einige Dinge, die wir in diesem Abschnitt 1 getan hatten, begannen
wir mit der Anpassung der, oder zumindest Blick darauf, wie wir über die Anpassung der Identitätsseiten gehen können. Wir haben gesehen, dass sie alle dort generiert wurden, wo wir
sie in der Identitätsseite gerüstet haben. Und wir haben gesehen, dass wir den Login ändern oder registrieren können. Wir können sie nach unseren Geschäftsregeln und Anforderungen erweitern. Sie haben also eine gute Idee, wie das alles zu tun ist. Wir haben auch die Implementierung von JS Interrupt mit Bibliotheken von Drittanbietern untersucht. Also werde ich nur mit der Buchungsseite gehen, wo wir das auf der Indexseite gemacht haben. In Ordnung. Eine andere Sache, die ich getan hätte, ist sicherzustellen, dass alle Komponenten Code hinter der Datei haben. Also noch einmal, das ist eigentlich optional, also sage ich nicht, dass Sie es sollten oder wenn Sie es nicht haben, haben
Sie nichts erreicht, denn wenn es funktioniert, funktioniert und
es hat funktioniert, es tut mir leid, in beiden Formaten zu arbeiten. Ich habe jedoch
jede einzelne Komponentenbewertung in den Code hinter der Datei importiert . In Ordnung, also für die Indexseite, müssen
wir die AI-Entsorgung implementieren, weil denken Sie daran
, dass wir diese Entsorgungsmethode haben , die wir implementiert haben. Also in der Komponente selbst sagten wir, ich wegwerfbar oder ich entsorgen dot entsorgen. In dieser Situation werden wir es nur erben und dann benutzen,
und das haben wir schon mal getan, also ist das nichts für Fremde. Sonst wissen wir es nicht. Wir haben unsere Injektionen, während wir weitergehen, wir machen unsere JS Runtime und weiter nach unter einer Spüle, wir gehen voran und rendern die Datentabelle. Wir sind schon einmal durch die Schule gegangen, aber nur als Zusammenfassung wissen
wir, wie wir wissen, was es braucht, um eine JavaScript-Bibliothek von Drittanbietern
in unseren Blazer-Anwendungen zu implementieren oder zu integrieren. Diese Technik geht also für grundsätzlich jede JS-Bibliothek von Drittanbietern, die Sie hier implementieren möchten. Eine andere Sache, die ich außerhalb der Kamera gemacht hätte, ist, ein gewisses Maß an Sicherheit zu implementieren. Es gibt also eine Sicherheitsrichtlinie namens „Content-Sicherheitspolitik“, in der wir voran gehen und Einschränkungen für
die Skripte setzen können , die wir auf unserer Anwendung ausgeführt werden möchten. Jetzt ist diese Richtlinie nicht eindeutig für Blazer, sondern eine Webrichtlinie. Ich implementiere es nur in Blazer hier, aber so
muss diese Richtlinie aussehen, damit Sie pausieren und versuchen können, sie zu replizieren. Aber ich ging, um dich durch sie zu führen. Also der Metatag, HTTP Dash equiv. Inhaltssicherheitsrichtlinie. Es ist also nur ein Header, den wir an den Browser senden, um
den Browser wissen zu lassen , welche Skriptdateien, welche CSS-Dateien wir auf unserer Anwendung ausführen möchten. Und das wird wichtig, um im Kampf gegen Cross-Site-Scripting-Angriffe zu helfen. Diese Richtlinie geht also einfach voran und legt Einschränkungen fest. Und es lässt es wissen, dass alles, was nicht von der Website selbst kommt oder diesen bestimmten Code enthält oder eine unsichere Auswertung hat und nicht ausgeführt wird. Wir lassen sie auch wissen, dass wir Skripten aus diesen Quellen vertrauen. Und ähnlich für die Stile, die wir sagten:
Okay, wir werden uns selbst akzeptieren. Wir können Inline-Stile akzeptieren, und wir akzeptieren ein Stylesheet von hier. Also Nevada Dritte, so ziemlich, wenn wir gehen, um weiter zu gehen und andere Bibliotheken von Drittanbietern, und wir wollen unsere Website auf die gleiche Weise schützen als wir nur diesen Metatag erweitern müssen, um diese Dinge aufzunehmen. Nein, Inhaltssicherheitsrichtlinien sind sehr beliebte Methode zum Sichern von Websites. Wieder, lesen Sie mehr darüber von sogar Firefox-Website, die ich gerade auf dem Bildschirm CSB gebracht habe. Und Sie können einfach nachlesen und genau sehen, welche Art von Schutz Sie
bekommen können , und beobachten, wie diese Werte wirklich bedeuten, wenn sie diese Politik erstellen. Nun ging es weiter, wir gingen auch voran und modifiziert oder in Septa Service, als wir die Datei Upload modifizierten. Also testen wir eine Sache, entfalten eine andere Lücke. Aber wir gingen weiter und fügten diese Ausnahme zum Abfangen 0 hinzu, da wir es brauchten, um die Ausführung zu stoppen, sobald ein Fehler aufgetreten ist, weil es tatsächlich weiter versuchen würde, auszuführen. Also mussten wir es in seinen LKWs stoppen und dem Benutzer mitteilen, dass etwas schief gelaufen ist. Und in den gleichen Notizen hatten
wir Datei-Uploader implementiert. Wir haben es speziell für die Fahrzeuge gemacht. Und die Unterarmkomponente für die Fahrzeuge ist viel größer als die anderen Formkomponenten, weil es ein bisschen mehr Logik gibt. Aber wieder einmal, so können wir den Komponentencode irgendwie
in die Datei isolieren , so dass alles kompakt und leicht zu finden bleibt, oder? In einem Angebot, die Wiederholung
und Heimat in den Zehnern zu reduzieren oder den Client und die gleiche Methode immer wieder aufzurufen, nun,
wir haben ein HTTP-Repository erstellt,
das ich es einfach als HTTP-Repositories bezeichne, die generisch genug sind, um Akzeptieren Sie jeden Datentyp und führen Sie die erforderliche Aktion aus, kennen Sie einige Dinge, die ich möchte. Einige Entscheidungen wurden hier getroffen, dass später, als ich ein Refactoring war, zurückkam, um Mann zu verfolgen, Sie wahrscheinlich entweder durch seine R gegangen sind, werden durch sie gehen. Also lassen Sie mich einfach darauf hinweisen, dass Sie bei der Umsetzung eines Put-dies als Idealist gesagt haben, aber dann, wissen Sie, ich kann sie nicht viel mischen. Ich listet und listet den ganzen Code auf. Das hätte also einige Konflikte verursacht. Also entweder ändern Sie es in die Liste und ändern Sie dann alles andere, um dies der Idealist und alles als Analytiker
aufzulisten oder ändern. So oder so, diese kleine Datentyp-Diskrepanz könnte hier und da ein paar Kopfschmerzen verursacht haben. Aber meine einfache Reparatur diese für mich auf dieser Liste, weil die meisten anderen Dinge, die wir sowieso in meinem Code oder im Rest des Programms sind. Alles klar, damit du weitermachen kannst und darauf achten kannst. Und Sie würden auch sehen, dass, wenn Sie das Repository und die Liste
erstellen, es tatsächlich einfacher ist, für Sie
diese Datentyp-Diskrepanz für diejenigen, die Liste sind, nicht wahr? Also, wie ich schon sagte, ich bin gemischt und passt zu ihnen. Das ist nicht unbedingt eine gute Praxis. Wann man das aufräumt, natürlich. Aber wenn Sie eine Liste USA LLC verwenden, wenn Sie Liste nutzlos verwenden. Aber das Gute an Idealisten ist, dass es nur ein Hindernis für eine Liste oder Sammlungstyp ist, der Liste ist. Da wir also eine Liste aus unserem generischen Repository zurückgeben, hat
dies keinen Datentypkonflikt verursacht, da wir die L2 zuweisen. Es ist eine Abstraktion, es ist ein höheres Hindernis. Ordnung? Also, das ist relativ unbekannt ist ja, ich zeige nur, dass alt, falls Sie sich fragen. Und dann haben wir schließlich erkundet, was es braucht, um progressive Web-Anwendung zu haben, wie genau es funktioniert. Da ist noch viel mehr dran. Was ich nicht zu tief bekommen werde,
aber wir sahen, wie einfach es ist, es einfach auf der Maschine oder auf einem Gerät zu installieren. Und wir können die Bilder und bestimmte Bits von
Informationen aus diesen Dateien, die sich im www-Stammordner befinden, anpassen . In Ordnung. Also mit all dem gesagt und getan, und das ist wir gehen voran und machen einen Check-in. Dies ist ein riesiger Check-in für mich wegen einiger Dateien, die auf dem Weg geändert wurden. Und wir haben die Bilder und all diese wunderbaren Dinge. Also natürlich, die Unruhen oder freundliche und nützliche Nachricht, die an sich selbst,
an zukünftige Sie und an Ihr Team zeigt , was genau getan wurde. Und dann werde ich einfach ein Commit machen und drücken. Also ein Push natürlich sendet es Wunder, Shauna Waschbecken bedeutet, dass, wenn es Veränderungen gibt, die oben im Leerlauf sind, dann wird es sie nicht auch ziehen, da ich der Einzige bin, der arbeitet, es spielt keine Rolle, welche man verwendet wird. Also, das ist in Ordnung. Und das war's für diesen Abschnitt. Wir sehen uns. Und das war's für diesen Abschnitt. Wir sehen uns bald.
46. Bereitstellen von Azure: Hey Leute, willkommen zurück. Wir sind also an diesem Modul, in dem wir unsere Anwendung auf Microsoft Azure bereitstellen können. Und Microsoft tut Ihr ist der Flaggschiff-Cloud-Anbieter von Microsoft. Und was sie tun, ist die Möglichkeit, Ihre Anwendungen praktisch nahtlos im Internet
bereitzustellen. Und sie bieten eine verwaltete Infrastruktur so dass Sie sich keine Sorgen machen müssen, um
Server zu konfigurieren und diese und die Sicherheit, die sie Ihnen all das sofort bieten. Und es ist relativ erschwinglich. Daher werden wir unsere Anwendung so bereitstellen, wie Sie sie hier sehen, in Azure. Ich habe in einem anderen Tab mit Azuri verbunden. Sie können dorthin Azure Dot microsoft.com gelangen. Und was sie haben, das
erste, was Sie sehen werden, ist, dass Sie kostenlos loslegen können. Es ist also wirklich einfach, sich anzumelden, besonders wenn Sie bereits ein Live von Kegel haben, die Sie wahrscheinlich verwendet haben, wenn Sie Visual Studio zu
Beginn dieses Kurses installiert haben, im vergangenen Preis dieses Kurses sind. Aber es ist einfach für Sie, sich anzumelden, kostenlos
loszulegen, Sie erhalten 12 Monate, sowie 200 Dollar Credits, um Dienstleistungen und Experimente zu erreichen, die Sie wollen. Nun, persönlich, habe ich eine Bezahlung, wenn Sie nach oben gehen,
was bedeutet, dass ich nur für den Ressourcenverbrauch bezahle. Also in diesem Tutorial, einige Ressourcen werden nicht kostenlos sein, wie wenn Sie auf dem freien Plan sind, das ist in Ordnung. Aber wenn Sie sind, wenn Sie bereits Ihre Probezeit erschöpft sind und dann tun Sie diesen Kurs und Sie implementieren, dass Sie am Ende für bestimmte Dienste bezahlen müssen, was ich auf sie alle hinweisen werde. Es ist, als wir weitergehen und versucht haben, alles auf das Minimum zu halten. Aber wenn Sie nicht unbedingt folgen können und bullseye tun, werden wir zumindest sehen, wie es funktioniert die Bereitstellung einer Anwendung auf Microsoft Azure und es ist ziemlich einfach. Also lasst uns anfangen. Kein Buck in unserem Projekt, wir haben einige Vorbereitungsarbeiten in unseren Konfigurationen zu tun, bevor wir uns beide in unserer AP settings.js JSON-Datei vorstellen können. Wir müssen einen Pfad konfigurieren. Nun, wir müssen ein SSL-Zertifikat einrichten und es für unseren Identitätsdienst konfigurieren. Was passiert, ist, dass
wir basierend auf der Konfiguration, dass Identitätsserver die Schrauben geändert hat, der Konfiguration, dass Identitätsserver die Schrauben geändert hat,ein SSL-Zertifikat konfigurieren müssen, damit die Client-Anwendung tatsächlich mit der Server-Anwendung sprechen kann. Alles klar, denn dann wird es beim Start fehlschlagen. Also hatte eigentlich einen kleinen Eimer mit der Summe überspringt vor der Schnalle. Und ich zeige Ihnen nur die Lösung für dieses sehr,
sehr weit verbreitete Problem, das Sie am Ende haben könnten, wenn Sie diese Schritte nicht befolgen. In Ordnung, also muss die Client-Anwendung mit unserem Server mit dem Identitätsdienst
kommunizieren. Es muss im Grunde tun wie hinter den Kulissen,
melden Sie sich an, damit der Client weiß, oder die, sorry, der Identitätsdienst weiß, dass der Client hier ist, er ist bereit, sich zu verbinden. Dies geschieht über eine sehr sichere Verbindungen. Daher ist ein SSL-Zertifikat notwendig, um dies zu erleichtern. In der Entwicklung ist das in Ordnung, weil in App-Einstellungen JSON Entwicklungspunkt ist. Sie werden hier sehen, dass es die wichtigsten Typentwicklungen sagt. Es steht also nur, okay, nun, das ist Entwicklungsmoment, es ist kein Problem, aber in unserem Unruhen. Sie haben also keine solche Einstellung. Und wir haben den Client, wo er sagt, dass dies
der Client ist , der das Profil verbindet, ist, dass es ein Identitätsserver ist, SPA. Und wenn Sie zu den Controllern und allen IDC-Konfigurations-Controller gehen, dann werden Sie sehen, wo all das Client-Zeug hineinkommt. Also diese Kontrolle und im Ausland, es hat nicht viel Sinn zu Beginn dieses Kurses. Und ich habe nicht zu viel Zeit damit verbracht, zu erklären, was hier vor sich ging. Aber dann basierend auf all
der Interaktion und all den Dingen, die wir bis zu diesem Punkt getan haben. Und Sie sehen, wie wir gegen den Server verpflichtet sich auf unsere Gewinne authentifizieren müssen. Ich hatte Entität, um den Client erfolgreich zu nutzen, die Tolkien müssen bei all diesen Dingen einfach sein. Also zieht dieser Controller im Grunde nur diese Saiten. Es weiß, wo die Kunden-ID, wieder, diese Anlage, richtig? Es weiß alles über all das und es ist im Grunde nur die Erleichterung dieser Kommunikation. Aber wieder einmal müssen SSL-Zertifikate vorhanden sein. Erleichtern Sie das. Jetzt in dieser Bereitstellung stellen
wir nur eine persönliche Anwendung bereit. Das Zertifikat wird also
eine Selbstzensur sein , die wir auf der Maschine erzeugen und dann verwenden werden. Aber in einer Produktionsumgebung würden Sie natürlich ein
produktionsfertiges und ordnungsgemäß ausgestelltes Zertifikat von einer der führenden Behörden verwenden wollen. Die Konzepte bleiben jedoch gleich. Also lasst uns einfach anfangen. Also, jetzt, um loszulegen, was wir tun wollen, ist bringen PowerShell werden mit diesem sehr leistungsfähigen Tool. Wieder einmal, wenn Sie auf einem Windows-Computer sind, aber es ist ein sehr leistungsfähiges Tool und wir werden es verwenden, um oder SQL-Skripte zu generieren. Sie möchten es also als Administrator aufzeigen. Alles klar, So Führen Sie als Administrator aus, Sie können entweder in der Suchleiste suchen oder Sie können das Symbol selbst finden Klicken Sie mit der rechten Maustaste und dann sehen Sie, dass Sie es als
Administrator ausführen , so dass Sie beide Optionen verwenden können, um dieses Gebäude zu erhalten. In Ordnung, also der erste Befehl, und was wir tun werden, ist, einige zu bauen. Also, wenn dies das erste Mal mit Porsche leicht bekommt ein C,
Art, wie es funktioniert. Nun, nun, es wäre nicht das erste Mal, dass Bullshit verwendet wird, weil der Paketmanager und Visuals Student tatsächlich
PowerShell-Befehle und Commandlets verwendet , oder? Also diese Art von Format erhalten Sie Strich-Hilfe oder die Strich-Datenbank und fügen Sie eine Strich-Migration hinzu. All das sind, was sie PowerShell-Kommandos nennen, richtig? Also hier werden wir einen Befehl zu verwenden geführt, um eine neue Suche zu erstellen. Das ist also eine Variable. Okay, wenn du nicht PHP tust, sollte das dir nicht zu unvertraut aussehen. Und dann sagen wir neues Selbst und dann
kann er Tab drücken und es wird automatisch die Zeile vervollständigen, richtig? Also Newell selbstsignierte Zertifikate, DNS, Name. Und dann werde ich es nennen, nennen
wir es Auto in Tau war Auto oder ein Handtuch Watson, richtig? Das ist es, was ich im DNS gefangen bin. Im Allgemeinen möchten
Sie also die URL für die Website darstellen. Wieder einmal ist dies nur Deployment oder On Up. Die Konzepte sind also vorhanden, auch wenn die Praktikabilität möglicherweise nicht unbedingt in einer realen Situation zutrifft. Alles klar, DNS-Name, ich nenne es Auto, bis Watson oder du kannst es etwas
nennen, mit dem du dich wohler fühlst. Der Speicherort des Zertifikatspeichers. So ist es irgendwie Standardspeicherort Cert-Doppelpunkt Über Schrägstrich lokale Maschine, die nur kontextualisiert und das ist in Ordnung. Und dann sind wir einfach, wie groß das nur Fälle gesehen hat, sie werden zu klein sein. Da gehen wir. Das sieht ein bisschen besser aus. Ordnung. So werden Sie selbst zensieren DNS Name Auto, bis war nicht
CERT , Zertifikat, Speicher, Standort, Suche, lokale Maschine, Zertifikat Doppelpunkt Schrägstrich, lokale Maschine slush. Und beachten Sie die Richtung dieses Schrägstrichs, Schrägstrich mein Recht. Also dann erstellt es es es, und dann speichert es alle Details innerhalb dieser Variablen namens CRT. In Ordnung, dann müssen wir den Schutz fördern. So werden wir PWD sehen und konvertieren Tool, oder sorry, konvertieren Tool, sicheren Stream. Da gehen wir. Dash String, und dann geben wir ihm einfach eine Zeichenfolge. Also wollte ich den Standard-Boss verwenden oder dass wir kennen und lieben. Natürlich würden
Sie noch einmal ein viel stärkeres Passwort in unserer realen Situation verwenden. Und dann haben wir sagen, eine Kraft und als hübsch und Texte drücken Sie Enter. Also speichern wir das Passwort als PWD. Dann bauen wir den Weg. Also fünf ist gleich, und dann sagen wir Sir Colon. Und dann, wenn ich einfach Tab drücken, beendet
es lokale Maschine M Wanne, sagen Candace, verwenden Sie die Spitze Art der Geschwindigkeit dies entlang. Ich mache das nur langsam, damit sie folgen können. Und sie sagen Cert-Punkt-Daumenabdrücke. In Ordnung. Und dann werden wir das alles aufgebaut haben, das in eine physische Datei exportiert wurde. Also werde ich sagen, export dash b, fx, zertifikat, dash CERT, cert und surf ist gefallen dot py. Und dann ist der Dateipfad, wo wir wollen, dass er anruft, richtig? Also habe ich einen Dateipfad bei c Doppelpunkt Schrägstrich sh. Okay, lass mich einfach einen Doppelpunkt machen. Das ist also mein Ordner auf meinem Computer. So können Sie fortfahren und Ihren eigenen Ordner auf Ihrem eigenen Computer erstellen. Und dann können Sie diesen Dateipfad verwenden. Es wird es nicht für Sie erstellen, also stellen Sie sicher, dass es existiert. Aber Sie wollen ihm den Dateinamen geben, damit ich sehen kann, dass Blazer nicht cert war, dann nennen wir es einfach Punkt, Punkt p Effekte. In Ordnung, also das ist die Datei, die ich generieren wollte. Und dann ist das Passwort die Es wird alles in Ordnung sein, gehen Sie voran und drücken Sie die Eingabetaste, und dann wird es mir zeigen, dass die Suche erstellt wurde. Also zur Leichtigkeit, wenn ich es einmal tun
werde weil es zwei Gründe gibt, warum ich es so machen werde. Eins, für Leichtigkeit in auf schnelle Gewinne. Also werden wir es einfach in das Projekt stecken. Werden wir wissen, wo es ist? Und wir werden auch in der Verbindung oder die Details der Aufzählung in unserer Klinik,
in unseren App-Einstellungen, in unseren Konfigurationen, so dass es verwendet werden kann. Ich werde es in die Pole verwandeln. Und wahrscheinlich wäre die Art und Weise, wie Sie es wahrscheinlich wirklich
in unserer realen sicheren Umgebung tun wollen , zwei. Wenn es bereitgestellt wird, wenn es als Ihr hochgeladen in Azure bereitgestellt wird, lassen Sie uns das Zertifikat verwalten und dann
Ihre Konfiguration so einrichten , dass das Zertifikat als von Azure verwaltet wird. Nun, weil ich alles kostengünstig halten wollte, werde
ich nicht die kostenpflichtige Version von Uzziah drehen, die all das ermöglicht. Wir nutzen das kostenlose Kontingent. Aus diesem werde
ich es einfach halten. Aber wieder einmal, das Konzept ist da. In Ordnung, Seele. Lassen Sie uns dieses Zertifikat in unser Projekt importieren. Und alles, was ich getan habe, war, es im Dateisystem zu finden und es zu kopieren und in das Projekt einzufügen. Und hier ist es. Und was wir tun wollen, ist die Eigenschaften zu ändern, um sicherzustellen , dass es tut mir leid, es kopiert immer. Du kannst nicht kopieren sagen, wenn neuer, das ist in Ordnung. Alles klar, was passiert, ist, dass wir wollen, wenn wir bereitstellen, dass es das in der Bereitstellung enthält. Also jetzt alles, was wir brauchen, um unsere Konfiguration zu aktualisieren, damit der Identitätsserver weiß, wohin er gehen und das Zertifikat finden soll, das diese Verbindung vermitteln soll. Wieder einmal ist dies so, dass wir durch diese Aktivität kommen können. Aber der Prob, der sicherere Weg, dies zu tun, wäre, dass
Sie den Schlüssel verwalten und dann den Konfigurationspunkt zu diesem verwalteten Schlüssel haben. Ordnung, so gibt es keine physische F0, F4 Taste, auf die jemand zugreifen kann. Und natürlich, ich meine, dieser Weg kann sicher sein, wenn wir nur viel Knochen für den Zugriff auf den Dienst und niemand wirklich auf die physische Schlüsseldatei zugreifen kann und alles, was Kugeln, wissen
Sie, wahrscheinlich besser, um es einfach zu verwalten, weil Uzziah würde es nicht am besten wissen. Also hier werden wir in einigen Konfigurationen für Schlüssel setzen. Also innerhalb des Identitätsserver-Konfigurationsobjekts oder des JSON-Objekts haben
wir Clients, und das sind unsere Clients und so weiter. Unsere Kunden werden ein Komma setzen und dann die Schlüssel eingeben. Und dann sagen wir Doppelpunkt und öffnen dann ein neues Konfigurationsobjekt. Und dann werden wir den Typ, den Namen
des Speichers, den Dateipfad und den Pfad angeben . Und so sieht das aus, oder? Also haben wir den Typ, der Datei ist. In Ordnung? Wenn es von einem 0 Typ verwaltet wird, wäre anders. Also haben wir Typ, der Dateispeicher-Name ist. Wir nennen es einfach meinen Dateipfad, den Pfad, der behauptet. Also habe ich es gerade an eine Wurzel des Projekts gelegt. Ich hätte es in einen Ordner legen können, was auch immer, aber wo immer ich es hinstelle, Das ist der Dateipfad und das Passwort ist die Haltung, die verwendet wurde. Ordnung? Wenn jemand auf den Gesponserten zugreift und auf die Akte zugreifen kann, dann könnte es offensichtlich jemand kaputt machen. Aber noch einmal, dies ist ein selbstsigniertes Zertifikat. Die ganze Idee dahinter ist also nicht die
sicherste zu sein und sicherer zu sein kostet mehr Geld. In dieser Situation halten
wir es nur noch einmal niedrig. Nachdem wir das alles getan haben, können
wir weitermachen und bereitstellen. Also gehe ich mit der rechten Maustaste auf das Serverprojekt, klicken Sie auf Veröffentlichen. Und dann auf dem veröffentlichten Bildschirm sagen wir Start. So aus veröffentlichten können wir immer einfach alles in einen Ordner senden, es auf uns, einen lokalen Server
legen und es laufen lassen. Wir könnten in Azure bereitstellen, was wir tun werden. Je nach Institution können Sie eine der oben genannten auswählen. Nun, noch einmal konzentrieren wir uns auf Azurit und es schwimmt einfach als Nächstes hinein. Und dann wollen wir ein App-Dienst wird es halten Fenster, so weiter,
ändern, dass Weiter, und dann werden sie Ihr Abonnement bestätigen auf. An dieser Stelle werden Sie möglicherweise aufgefordert, sich anzumelden. Du kannst weitermachen und das tun. Aber die Semikolons, die für Visual Studio verwenden, sind meine Microsoft.com und werden auf 0 verwendet. Sie kennen mich
also, sie wissen, welche Subskripte usw. Und Sie haben Pay-as-you-go Dev-Schrägstrich Test, wo Sie nur für das bezahlen, was Sie verwenden und Sie erhalten die Ressourcen auf den Folien oder niedrigere Kosten. Aber natürlich benutzen Sie sie nicht aus Unternehmensgründen, oder? Also, das ist mein Abonnement, auf dem ich bin. Ich habe mehr Ressourcengruppen, oder Ressourcengruppe ist wie ein Container, wie ein logischer Container, der besagt, dass alle diese Ressourcen dazu gehören. Also neigen Sie dazu, unsere Ressourcengruppe pro up zu haben. Ordnung? Also werde ich voran gehen und eine neue Ressourcengruppe erstellen. Nun, eigentlich erstelle ich, also erstelle ich einen neuen AP-Dienst
, der dann diese Ressourcengruppe für diesen App Service vorschlägt. Und App Service ist ein verwalteter Server. Und ich sehe weiterhin verwaltet,
verwaltet, was bedeutet, dass Sie sich keine Sorgen um
die Infrastruktur und die Installation von Windows bei der Konfiguration von IIS machen müssen . Du musst dir darüber keine Sorgen machen. Alles ist voreingestellt. Die Umgebung ist, dass sie im Grunde sagen, dass ich die Umgebung habe, gib mir
einfach die Dateien und ich mache den Rest. Damit wir ihm einen Namen geben können. Also können wir dies wahrscheinlich ändern, um zu sagen, als wäre Strom nicht aktuell, Blazer, etwas, was auch immer der Name ist , den Sie möchten, basierend auf dem, was Ihr Unternehmen will. Ressourcengruppe. Sie können dies standardmäßig belassen oder wenn Sie erstellen möchten, dann möchten Sie einen bestimmten Namen haben, dann können Sie das tun. Der ganze Dampf Plan Lärm, wo wir es ändern müssen. So kann ich auf Neu klicken und wir können einen der Standort auswählen. Also basierend darauf, wo ich East US 2 mein engstes Rechenzentrum ist. Aber dann sehen Sie, dass sie dort für einige geografische Orte geblieben sind. Ich möchte diejenige wählen, die Ihnen am nächsten ist, um die effizienteste oder auf der rechten Seite zu haben? Also, nachdem ich East US 2 gewählt
habe, wähle ich, welchen Plan ich will. Und natürlich steht das magische Wort ganz oben, das freie. Also gehe ich voran und klicke. Okay. Und dann können
wir auf Erstellen klicken und dann geben Sie das ein paar Minuten. Ich sagte Minuten, aber es dauerte wirklich weniger als eine Minute, zumindest für mich. Aber am Ende dieser Aktivität haben wir das absurde geschaffen. Dann kann ich einfach voran gehen und auf Fertig stellen klicken. Die Ressource ist also in der Arbeitslast vorhanden. Es sitzt bekannt warten Web, stellen Sie es noch. Nun, wir haben noch eine lose, und das müssen wir binden, und das ist unsere Datenbank, richtig? Also muss ich die Bedürfnisse der Bienen konfigurieren. Verwenden wir Azure SQL oder verwenden wir eine lokale Datenbank? Und die gesamte Azure SQL-Datenbank ist eine weitere Version der Verwaltungssoftware. Die T Pflege all das für Sie. Sie sehen nur Sag mir, was wollen Sie, dass die Datenbank für Sie erstellt wird? Alles, was Sie tun müssen, ist eine Tabelle zu erstellen, lesen und schreiben und Mary verlassen, Sie müssen sich keine Sorgen über die Installation von
Encirclement-Umgebungen auf all diesen Dingen machen. Also verwenden wir einfach die Azure SQL-Datenbank. Klicken Sie auf Weiter, null. Die Datenbank braucht einen Server, wie wir wissen, oder? Verwenden Sie die Taten von B, wie wir einen Server haben müssen und bitte, also müssen wir diese tatsächlich erstellen. Und dann, dass dieser Schritt ist, wo die Kostenrechnung kommt, direkt bei. Dieser Schritt ist nicht notwendigerweise kostenlos. Alles klar, So Datenbankname, wir werden nur die Standardwerte, aktuelle Managementpunkte Server DB, wo die Anforderungen erfüllt werden. Nun, das ist eine Datenbank, also müssen wir den Server erstellen. Also, nachdem Sie wieder bekommen, so dass die Server oder zu einem Preis und wirklich kommt in, weil ärgern, müssen
Sie für diesen Platz zu zahlen. Und ich werde diesen DB-Server nur den netten generischen Namen nennen. Ich möchte nicht, dass es zu spezifisch
ist, da es einen Server tut , der viele verschiedene alte Spieß haben wird, der nicht verfügbar ist. Derzeitiges Management, Watson. Und das ist ein Schlitz an der Watson ist natürlich scharf für WebAssembly, so dass es klingt wie akzeptiert, dass ein East US 2. Also möchten Sie alle, die sie werden wenige Ressourcen in CMD geographische Region halten. Und ich werde nur den wahren Krieg als Benutzername und p
sin Dala Sand Dollarzeichen W 0 RD für das Passwort verwenden , das gleiche Dollarzeichen, Dollarzeichen W 0 RD. Ordnung. Das ist alles, was nötig ist, um einen brandneuen Service einzurichten. Sie werden leicht, das ist nein, wenn Sie Microsoft-Server auf Ihrem Computer installieren, es Bravo würde ein wenig mehr Aufmerksamkeit als die einfache Form, die Kickoff eine OK Schaltfläche und dann auf Erstellen. Und dann könnte das eine Weile dauern. Und wenn es fertig ist, haben
wir unseren Datenbankserver und Datenbank Android für Sie erstellt. Also können wir einfach weitermachen und Next drücken. Und dann bitten sie uns, die Verbindungszeichenfolge zu bestätigen. Also diese Wiederverwendung den gleichen wahren Krieg und P-Zeichen, Dollarzeichen, Dollarzeichen W RD. Alles klar, dann geben sie Ihnen den Verbindungszeichenfolgenwert
, den Sie immer nur einen Blick darauf werfenkönnen, dass , den Sie immer nur einen Blick darauf werfen jeder es kopieren und für Ihre eigenen Zwecke behalten kann. Aber diese Datenquelle ist die Adresse des Servers. Nun, ja. Also der Datenbankserver. In Ordnung. Und das ist der Name der Datenbank. Wissen Sie, eine Schraubverbindungs-Saiten bereits. Aber Sie könnten tatsächlich einfach ein SQL Server Management Studio öffnen, diesen Wert
eingeben und dann authentifizieren und dann eine Verbindung herstellen. Und das Gute ist, dass es automatisch gesichert ist, so wie Ihr Has es alles auf die schwarze Liste gesetzt hat. Es gibt nichts allein. Also, wenn Sie versucht haben, von Ihrem Computer aus zu verbinden , wird
es sagen, gut, ich sehe Ihre IP-Adresse, aber er ist authentifizieren und dann angeben, dass Sie
weiß aufgeführt werden wollen , so dass wir, wissen Sie, Nicht autorisierte Zugriffe werden aufgrund dieser Standardsicherheitsrichtlinie in Ihrer Datenbank nicht signifikant abgefangen. Ich versuche nur, dir zu zeigen, wie cool es ist, wenn es darum geht, das Sparen zu behalten. Und fragen Sie dann, wo möchten Sie Ihren Verbindungswert speichern? Ich lasse es einfach in App-Einstellungen. Key Vault ist ein kostenpflichtiger Service. Wenn ich mich nicht irre, wie Ihre App-Einstellungen, die Komponenten kommt, natürlich, Sie haben eine, die funktioniert und dann eine, die sehr sicher ist, sicherer. Also bleiben wir bei dem, der sowieso funktioniert. In Ordnung, also gehen wir weiter und klicken Sie auf Weiter. Und dann werden sie vorschlagen, dass wir
einige Abhängigkeiten von Acetyl-CoA Secret Store bereitstellen müssen , damit wir auf Finish klicken können, erlauben Sie, dass seine Sache zu tun. Und wenn es fertig ist oder veröffentlicht Pitch wissen hat keine Warnungen, dass alles gut ist. Aber ich möchte eine Änderung vornehmen, bevor ich auf Veröffentlichen klicke und das sind die Optionen auf Veröffentlichen. Also werde ich Edit drücken. Und dann wird dieses neue Dialogfenster angezeigt, das wir vorher nicht gesehen haben. Aber ich werde zu den Einstellungen gehen und dann wird es entdecken
, die Datenbanken endete Kontexte. Was passiert ist, dass an dieser Stelle wird es die Beats fettleibig zu schaffen, aber es wird keine Tabellen und keine Daten nach unserem C, dass Daten und so weiter, richtig? Also werde ich voran gehen und es wissen lassen, dass ich will, dass es diese Migration auf die Öffentlichkeit
anwenden, auf veröffentlicht, sorry. Und wir können wählen, diese Verbindungszeichenfolge zur Laufzeit zu verwenden, oder? Also werde ich die einfach zu den anderen Einstellungen bringen. ihnen nicht wirklich schuldig. Wir können wählen, um diese Erweiterung zu installieren. Ich bin mir nicht sicher, ob das ein kostenpflichtiger Service ist, um ehrlich zu sein. Und dann können wir wählen, dass jedes Mal, wenn wir 12 veröffentlichen, einen Ordner
säubern und erneut veröffentlichen. Ich muss das wohl nicht tun. Aber ich werde all diese getickt lassen und dann weiter gehen und sparen. Und dann in dem Moment, in dem wir eng zusammengearbeitet haben, lassen Sie uns auf Veröffentlichen klicken. Und wenn all das erledigt ist, bekommen
wir diesen 500-Fehler. Ihr zumindest gibt es Fortschritte. Also, was ich tun werde, ist, mich im Portal anzumelden. Das ist also mein Portal. So sieht es aus. Hallo, Sie können es anpassen, also macht es nichts aus, wie langweilig mein Dashboard aussieht, entweder ohne viele Ressourcen ohnehin, aber ich gehe einfach direkt zum App Service. Und von dort werde ich das Seitenmenü benutzen. Also können Sie, ich meine, wenn Sie diesen Bereich haben, aber um es zu betrachten, können
Sie sich etwas Zeit nehmen und schätzen, dass Sie verschiedene Metriken bekommen, die Daten erreichen. Oft haben Sie einen 500-Fehler getroffen. Du siehst also, dass wir gerade einen getroffen haben. Es ist ein sehr nützliches Dashboard. Sie können erneut neu starten, stoppen und eine Reihe von Dingen löschen, richtig? Also, was ich tun möchte, ist ein fortgeschrittenes Tool zu bekommen. Unter Entwicklungstools gehen also auf erweiterte Tools. Wir können auf Los klicken. Und dann bringt uns das zu einem Dashboard, das uns erlaubt, in das eigentliche Dateisystem zu gehen, oder? So kann ich zu einer Debug-Konsole gehen, cmd. Und dann kann ich hier tatsächlich die Dateien ansehen, die hochgeladen wurden. Ich kann zu Websites www root gehen, und dann sind dies die Dateien, die veröffentlicht wurden. In Ordnung. Du siehst also, dass alles genau da ist. Ordnung. Also möchte ich wissen, warum das Gefühl ist. Ich wollte jemanden verliebt sehen, um die Web-Punkt-Konfiguration zu ändern, die ganz unten in dieser Liste ist. Und dann werde ich sagen, es STD-Logo aktivieren wahr ist. Speichern. Und dann werde ich versuchen, wieder durch die Websites zu graben. Also sagen, ich habe einige Suchen von einer anderen Aktivität geöffnet. So SS Refresh. Und wenn das aktualisiert wird, bedeutet
das, dass es ein neues Protokoll erzeugt hätte,
jemand, der Buck geht. Und das Log-Ziel ist diese Protokolldateien und da ist unser Logo, stdio dot, dot, dot, dot. Sieh es dir an. Es besagt, dass ein Fehler beim Laden der Zertifikate, der Datei, aufgetreten ist. Sehen Sie Holmes sagte WW Wurzel, Blazer, Watson Zertifikat war nicht Telefon. Deshalb so, nur um
den Punkt nach Hause zu fahren , dass wir brauchen, um dieses Zertifikat laufen weil Sie einen anderen Pfeil gesehen hätten, wenn die Kreise und Präsident und wissen, dass wir gesagt haben, dass die Suche vorhanden ist, es kann es nicht finden, wir bekommen immer noch einen Fehler, oder? Die Suche ist also absolut lebenswichtig. Was brauchen wir jetzt? Was ich tun muss, ist zurückzuschauen und zu sehen, warum es dieses Zertifikat nicht finden kann. Also ist es in Ordnung, also werde ich immer Copy sagen. Alles klar, so scheint es, dass es eine Kopie ist, die alles ist. Und dann werde ich eine neue Veröffentlichung machen. Und wenn es fertig ist, dass diese Zeit veröffentlicht. Boom, da geht's. So haben wir unseren Blazer WebAssembly im Internet veröffentlicht. Es gibt unsere URL aktuell im Management war nicht websites.net. Natürlich können Sie Ihre benutzerdefinierte Domain kaufen und wie sie richtig eingerichtet ist. Aber lasst uns versuchen zu lieben und worin. Alles klar, hier ist, was wir brauchen, um diesen Stil zu reparieren, aber wenn man beiseite steht, kann man ihn später immer wieder reparieren. Aber hier sind wir im Internet, also haben wir unseren Mix, wir haben unsere Modelle,
alles, was wir in die Datenbank aufgenommen hatten, als wir anfingen, ist da. Und dann können wir weitermachen und unsere Arbeit so tun, wie wir es wünschen. In Ordnung, also haben wir
unsere Anwendung erfolgreich im Internet mit freundlicher Genehmigung von Microsoft als 0 bereitgestellt und Sie sehen, es hat nicht auf unserer rechten Seite genommen. So einfach ist es, eine Anwendung mit Microsoft Azure im Internet bereitzustellen. Das ist es also für diese Aktivität. Danke, dass du dich mir angeschlossen hast.