Når man udvikler moderne applikationer med .NET MAUI og Blazor, er det essentielt at forstå integrationen mellem de forskellige lag i applikationen – fra brugergrænsefladen til backend-tjenester. I denne proces er namespace-ændringer, korrekt konfiguration af XAML-filer og overgangen fra ContentPage til Shell centrale elementer. I MainPage.xaml sættes titlen til "Home", hvilket skaber en klar og genkendelig startside for brugeren. Derefter tilføjes en ny ContentPage, AppShell.xaml, hvor den oprindelige rod erstattes med en Shell-komponent, og projektets Views namespace importeres med en præfiks for at organisere visningerne. Shell'en konfigureres med flere tabs og routes, som er case-sensitive, hvilket understreger vigtigheden af konsistens i navngivning og navigation.
Overgangen i AppShell.xaml.cs fra ContentPage til Shell-klasse ændrer applikationens navigationsarkitektur markant og muliggør en mere dynamisk og skalerbar brugeroplevelse. Samtidig ændres MainPage i App.xaml.cs til at pege på AppShell, hvilket sikrer, at navigationen benytter den nye shell-struktur. Kørsel af applikationen på forskellige platforme – Android og Windows – demonstrerer .NET MAUI’s platformuafhængige natur. Valg af emulatorer og målplatform sker via Visual Studio’s toolbar, hvor udvikleren kan teste brugergrænsefladens funktionalitet i flere miljøer.
Brugerinteraktionen med Blazor-komponenter, som for eksempel en tæller på Counter-siden, fungerer problemfrit både på Android og Windows, hvilket fremhæver den hybride arkitekturs styrke. Udskiftning af standard Blazor-komponenter med brugerdefinerede eller open source-komponenter, som beskrevet i tidligere kapitler, er direkte muligt og understøtter fleksibel udvikling.
På serversiden skabes en minimal API-webservice til kategorier og produkter i Northwind-databasen. Ved at tilføje et nyt webservice-projekt med skabelonen ASP.NET Core Web API uden controller-baserede API’er, men med minimal APIs, optimeres koden til at være mere kompakt og læsbar. Integration af databasekonteksten via projekt-referencer sikrer konsistens i dataadgangen. Justering af launchSettings.json til at definere specifikke porte for HTTP og HTTPS samt aktivering af OpenAPI support muliggør nem test og dokumentation af API’erne gennem Swagger.
I Program.cs fjernes unødvendige services som vejrtjenesten, mens HTTPS-omdirigering deaktiveres under udvikling for at undgå komplikationer. Minimal API-endpoints defineres for operationer på kategorier, hvilket demonstrerer en effektiv måde at implementere RESTful services uden det fulde overhead af controllerklasser. Dette giver udvikleren bedre kontrol over endpoints og reducerer kompleksiteten i projektet.
Det er væsentligt at forstå, at den skiftende arkitektur mod minimal API og Shell-baseret navigation ikke blot er et spørgsmål om syntaks eller filstruktur, men et paradigmeskifte i, hvordan moderne .NET-applikationer designes og skaleres. Det kræver en solid forståelse af komponenternes livscyklus, routing, og tilstandshåndtering på tværs af platforme. Desuden bør læseren være opmærksom på nødvendigheden af nøje versionsstyring af framework og emulatorer for at undgå uventede kompatibilitetsproblemer.
Derudover bør integrationen mellem frontend og backend ses som en helhed, hvor enkelhed i API-design kombineret med robust brugergrænseflade sikrer en god brugeroplevelse. At mestre disse principper åbner døren for at skabe applikationer, der ikke blot er teknisk avancerede, men også nemme at vedligeholde og videreudvikle i takt med skiftende krav og platforme.
Hvordan forbinde og administrere Azure SQL Edge via Docker og Visual Studio
Når du arbejder med SQL Server i Azure, har du mulighed for at vælge mellem flere forskellige installationsmetoder, afhængig af dine behov og miljø. En af de mere praktiske løsninger er at bruge Azure SQL Edge i en Docker-container, især når du ikke har adgang til en Windows-maskine eller ønsker at undgå ekstraomkostninger ved at bruge Azure-ressourcer. Azure SQL Edge er en minimal version af SQL Server, som er designet til at køre på tværs af platforme, herunder Linux, Mac og Windows. Denne version inkluderer kun database-motoren og er derfor ideel til udvikling og test.
For at komme i gang med Azure SQL Edge i Docker skal du først installere Docker, hvilket kan gøres via deres officielle dokumentation. Når Docker er installeret og startet, skal du trække den nyeste containerbillede af Azure SQL Edge ved hjælp af kommandoen:
Når billedet er blevet trukket, kan du køre containeren med følgende kommando:
Her er det vigtigt at vælge et stærkt kodeord, da Azure SQL Edge kræver, at adgangskoden er mindst 8 tegn lang og indeholder tegn fra tre af de følgende fire sæt: store bogstaver, små bogstaver, cifre og symboler. Uden dette krav vil containeren ikke kunne oprette forbindelse til SQL Edge-motoren.
Når containeren kører, kan du bruge et databaseværktøj som Visual Studio 2022, SQL Server Management Studio, eller Azure Data Studio til at oprette forbindelse til SQL-serveren. I Visual Studio skal du åbne Server Explorer og vælge at oprette en datakobling. Udfyld dialogboksen med de nødvendige oplysninger, og højreklik derefter på datakoblingen for at vælge "New Query".
For at oprette tabeller og indsætte data i din database skal du kopiere og indsætte SQL-scriptet fra filen Northwind4AzureSQLedge.sql i forespørgselsvinduet og køre det. Når du ser beskeden "Command completed successfully", er tabellerne, såsom Categories, Customers og Products, blevet oprettet, og du har nu en fungerende Azure SQL Edge-database, som du kan arbejde med i din konsolapplikation.
En af fordelene ved at bruge Azure SQL Edge i Docker er, at det er en meget lettere løsning end at bruge den fulde version af SQL Server, og det kan køre på en bred vifte af operativsystemer, herunder Linux og MacOS. Det er dog vigtigt at forstå, at SQL Edge er en minimalistisk version af SQL Server, og derfor ikke nødvendigvis understøtter alle de funktioner, du vil finde i den fulde version.
Derudover er det også nyttigt at være opmærksom på, hvordan T-SQL fungerer i SQL Server. T-SQL (Transact-SQL) er SQL Servers dialekt af Structured Query Language og bruges til at interagere med data i SQL-databasen. T-SQL er ikke case-sensitive, hvilket betyder, at du kan skrive SQL-kommandoer som SELECT, select, int eller INT, og det vil blive forstået korrekt af serveren.
Når du arbejder med T-SQL, skal du være opmærksom på de forskellige datatyper, som SQL Server understøtter. For eksempel kan du bruge datatyper som bigint, decimal, varchar, og datetime, afhængigt af hvilken type data du arbejder med. Desuden kan du oprette kommentarer i dine SQL-scripts for at gøre dem lettere at forstå og vedligeholde. Dette gøres ved at bruge -- for at kommentere ud en linje eller /* og */ for at kommentere ud et blok af kode.
En anden vigtig komponent i SQL Server er variabler. I T-SQL erklæres lokale variabler ved at bruge DECLARE og navngives med et @-tegn foran. Variabler bruges til at opbevare midlertidige data, som du senere kan referere til i dine SQL-kommandoer.
Når du arbejder med SQL Edge i Docker eller andre SQL Server-implementeringer, er det også vigtigt at forstå, hvordan du skal håndtere forbindelser og sikkerhed. Forbindelser til SQL Server bør altid være krypterede, og det anbefales at bruge sikre loginmetoder, som f.eks. certificater eller brugernavne og adgangskoder, for at beskytte dine data mod uautoriseret adgang.
I det store hele er brugen af Azure SQL Edge en effektiv og praktisk måde at håndtere relationelle data på, især når du arbejder på tværs af platforme og vil minimere omkostningerne ved at bruge eksterne Azure-ressourcer. Men som med alle databaseløsninger, skal du være opmærksom på de specifikke krav og begrænsninger, som Azure SQL Edge medfører, og hvordan du bedst integrerer det i dine udviklingsprojekter.
Hvordan beskytte brugerdata med kryptering og signering i C#
I moderne softwareudvikling er beskyttelsen af brugerdata afgørende. En af de mest grundlæggende teknikker til at beskytte brugerens adgangsoplysninger er brugen af saltede og hashede adgangskoder. I denne artikel udforsker vi, hvordan man kan implementere brugerstyring med kryptering i C# ved hjælp af saltning og hashing. Vi ser også på, hvordan data kan signeres og valideres for at sikre, at de kommer fra en betroet kilde.
Først opretter vi en User-record i et bibliotek, der gemmer brugerens navn, en tilfældigt genereret saltværdi og den saltede og hashede adgangskode. Dette kan opnås med følgende kode:
Når en bruger opretter en konto, skal vi sikre os, at deres adgangskode ikke blot gemmes som tekst, men bliver først saltet og derefter hashet. For at gøre dette skal vi generere en tilfældig salt, som derefter kombineres med adgangskoden, før den hashes. Dette gøres i metoden Register:
Når en bruger senere logger ind, valideres den indtastede adgangskode mod den saltede og hashede adgangskode, der er gemt i systemet. Dette gøres i metoden CheckPassword:
I denne tilgang er det vigtigt at forstå, at selvom to brugere har den samme adgangskode, vil de have forskellige saltværdier, hvilket resulterer i forskellige hashede adgangskoder.
En af de vigtigste principper i sikkerhedsdesign er at sikre, at følsomme data aldrig overføres eller gemmes uden at blive krypteret. Dette gælder især for adgangskoder. I stedet for at gemme adgangskoderne som almindelig tekst, skal vi sørge for, at de er blevet saltet og hashet. Hashing er en envejstransformering, hvilket betyder, at den oprindelige adgangskode ikke kan genskabes fra den hashede værdi.
Men hvordan beskytter man ikke kun adgangskoder, men også selve dataene? En metode til at beskytte data og sikre, at de stammer fra en betroet kilde, er signering af data. Signering er en proces, hvor du signerer en hash af data i stedet for dataene selv. Dette sikrer, at ingen har ændret dataene under transmissionen.
Signering af data kan gøres med en offentlig-nøglekryptografisk metode som RSA. Her er et eksempel på, hvordan man kan implementere signering og validering af data med RSA og SHA256 i C#:
Når man anvender RSA til at signere data, skal man kun bruge den offentlige nøgle til at validere signaturen. Den private nøgle holdes hemmelig og bruges til at generere signaturen.
Det er også vigtigt at forstå, at signeringen af data ikke kun beskytter dataene mod ændringer, men også giver en mekanisme til at bekræfte, at dataene stammer fra en betroet kilde. Når du modtager data, kan du validere signaturen med den offentlige nøgle for at sikre, at dataene ikke er blevet ændret, og at de kommer fra en person, der ejer den private nøgle.
Et af de grundlæggende principper i moderne sikkerhedsdesign er at bruge kryptering til at beskytte både data under opbevaring og under transmission. Saltning og hashing af adgangskoder sikrer, at følsomme oplysninger som adgangskoder ikke kan læses direkte fra databaser, mens signering giver en måde at validere ægtheden af data, der overføres.
Endtext

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский