Artikel top billede

(Foto: Computerworld)

Microsoft lukker fjenden ind

Nu kan du bygge web- og cloud-applikationer med ASP.NET 5 på både Linux, Mac OS og Windows!.

Af Tom Madsen, Alt om Data

Denne artikel er oprindeligt bragt på Alt om Data. Computerworld overtog i november 2022 Alt om Data. Du kan læse mere om overtagelsen her.

ASP.NET der kan køre på en Linux maskine med en Apache Web Server? Hvad er nu det for noget? I de seneste år er Microsoft blevet mere åbne overfor open source, og med det nylige direktørskifte fra Steve Balmer til Satya Nadella, er dette blevet endnu mere tydeligt. Med ASP.NET 5 har Microsoft besluttet, at al udviklingen af ASP.NET skal foregå som open source, på GitHub. Men hvorfor nu egentlig det?

Figur 1: Nu er det JSON, du bruger, istedet for XML, og web.config er væk. Figur 1: Nu er det JSON, du bruger, istedet for XML, og web.config er væk.

ASP.NET kom frem for 15 år siden, og i den tid har udvikling til web ændret sig markant. ASP.NET har fulgt med, og da MVC blev populær med Ruby on Rails, fik også ASP.NET-udviklerne MVC-udvikling på ASP.NET. Men ASP.NET er 15 år gammel og målt i internettid er det det samme som 50 år. Med ændringen af fokus i webudvikling til Single Page App’s (SPA) og vægten lagt på JavaScript, der kører i browseren i stedet for som med ASP.NET, der eksekverer på serveren, er tiden kommet for Microsoft til at pifte ASP.NET-stakken op. Og det er ikke nogen lille øvelse, Microsoft har sat gang i. Ikke bare fordi ASP.NET 5 nu vil kunne køre på Linux og MacOS, men lige så meget fordi en masse af den kode, der ligger nedenunder ASP.NET, er blevet fjernet til fordel for en meget mindre ASP.NET-kerne, der vil forvente at få de dele, den skal bruge via NuGet. F.eks. er den traditionelle System.Web.dll ikke længere at finde i ASP.NET 5.

Figur 2: Den eneste forskel imellem en Web Applikation og Web API er razor. Figur 2: Den eneste forskel imellem en Web Applikation og Web API er razor.



Mindre apps giver fordele
Det betyder alt sammen, at når vi vil udvikle en web-app på ASP.NET 5, så vil vi være i stand til at udvikle den på lige nøjagtigt de moduler, vi har brug for til vores app, og ikke flere. Vi vil ikke længere skulle trækkes med hele den underliggende .NET, vi har brugt de sidste 15 år. Så vores web-apps vil være mindre og kan dermed hurtigere kunne blive publiceret til f.eks. en cloud-udbyder. Men at appen er mindre er også godt for sikkerheden i vores app. At den ikke længere har brug for hele stakken nedenunder ASP.NET, betyder, at den overflade, som vores app viser til omverdenen, er mindre, og dermed nemmere at sikre, fordi vi ikke længere behøver at bekymre os om at lappe på .NET-delen, som vi ikke bruger i vores app.

Figur 3: Der er mange nye foldere og filer i et ASP.NET-projekt. Figur 3: Der er mange nye foldere og filer i et ASP.NET-projekt.

At ASP.NET er open source og udviklet på GitHub gør, at udviklere, der ikke er ansat af Microsoft, kan bidrage til udviklingen af ASP.NET 5, og Microsoft har endda også godkendt og inkorporeret kode fra eksterne udviklere i ASP.NET 5-koden. Her skal det lige indskydes, at det ikke kun er ASP.NET, der er blevet open source, også Entity Framework 7 er open source og bliver udviklet på GitHub. Det er den fagre nye verden for Microsoft!

Teknikken bag ASP.NET
Lad os nu kikke lidt på detaljerne i den nye teknik bagved ASP.NET 5. ASP.NET 5 kører på det, som Microsoft har kaldt for DNX eller ’.NET Execution Environment’, og hvert projekt vil dermed være et DNX-projekt. DNX er både et SDK og et runtime miljø, dvs. at DNX svarer til det CLR-miljø, som de sædvanlige .NET apps kører på. Det er DNX, der skal installeres på Linux og MacOS for at kunne køre ASP.NET 5-apps. DNX er udviklet med .NET Core for øje. .NET Core er det minimalistiske .NET-miljø, der gør det nemmere at udvikle en ASP.NET 5 app, med kun de .NET-biblioteker du har brug for i stedet for hele .NET-stakken af kodemoduler. Et DNX-projekt er en folder med en project.json-fil inden i. På figur 1 kan du se, hvordan sådan en fil ser ud.

Figur 4: Med gulp kan du automatisere mange af de manuelle processer. Figur 4: Med gulp kan du automatisere mange af de manuelle processer.

Filen er fra det ASP.NET-projekt, som vi kikker på om lidt. Som du kan læse ud af filnavnet, så er indholdet af filen i JSON-format. I denne fil angiver du de afhængigheder, som dit ASP.NET 5-projekt har, og som du kan se, så er versionsnumre en integreret del af JSON-filen. En af de frække nye ting i ASP.NET 5, er, at hvis du sidder på en maskine og har konfigureret nogle afhængigheder af nogle pakker kaldet for x, y og z, og du så åbner projektet på en maskine, der kun har pakkerne x og z, og forsøger at compilere projektet, så vil Visual Studio 2015 automatisk detektere, at du mangler y, og downloade y for dig inden compileringen begynder.

.NET Core
Inden vi begynder at kikke på et konkret ASP.NET 5-projekt, så lad os lige kikke nærmere på .NET Core. Selvom fokus i denne artikel er på web-apps, så kan .NET Core sagtens bruges til at udvikle f.eks. en mobil app. .NET Core er bygget modulært op, og pga. denne modularitet er .NET Core nøglen til den nye udviklingsmodel, hvor vi har et minimalt .NET-miljø, og hvor vi tilføjer de dele fra Microsoft eller tredjeparts open source-kode, som vores app skal bruge for at fungere. Så fremadrettet vil NuGet blive en integreret del af vores udviklingsmetodik, hvis det ikke allerede er det. Men lad os nu kikke på et konkret ASP.NET 5-projekt.

Figur 5: Bruger du allerede NPN fra node.js, så vil Bower være nemt for dig. Figur 5: Bruger du allerede NPN fra node.js, så vil Bower være nemt for dig.



Lav et projekt i Visual Studie
I Skrivende stund er den seneste version af ASP.NET 5 beta 8. Når du læser dette, så kan der være både beta 9 og/eller en RC kandidat ude. Så hvis du finder, at der er ting, der har ændret sig i forhold til de skærmbilleder, jeg viser her, er det forklaringen. Jeg bruger Visual Studio 2015 i Enterprise-versionen, men alle de ting, jeg viser her, vil også virke i den gratis Community-version.

Så lad os lave et nyt projekt i Visual Studio.

I det første vindue, hvor du vælger, hvad det skal være for et projekt, skal du sørge for at vælge .NET Framework 4.6 i den dropdown-liste, der er øverst i vinduet. Giv projektet et navn, og klik OK. På Figur 2 kan du se, hvordan det næste vindue ser ud. Her skal vi vælge, hvilken version af ASP.NET vi vil udvikle imod. Vi vælger Web Application under ASP.NET 5 Preview Templates og klikker OK. Prøv bare at eksekvere projektet, når Visual Studio er færdig med at lave det. Du vil se, at den nye ASP.NET 5 template er forskellig fra den ’gamle’ version. Men tag et kik på figur 3. Selve strukturen i et ASP.NET 5-projekt er blevet ændret i forhold til de forrige ASP.NET-projekter. Væk er Global.aspx og Web.config, og i stedet for har vi filerne config,json og startup.cs. Men der er kommet nye ting til, og f.eks. har vi nu en folder kaldet for wwwroot. Den indeholder alle de statiske filer som css, JavaScript og billeder. Vi har også pludseligt fået nogle nye JavaScript-filer kaldet for henholdsvis bower.jason og gulp.js. Hvad er nu det for noget?

Figur 6: Der er fuld intellisense, hvis du vil tilføje nye pakker til dit projekt. Figur 6: Der er fuld intellisense, hvis du vil tilføje nye pakker til dit projekt.

 

Gulp er en Task Runner udviklet i JavaScript. En Task Runner bruges til at automatisere mange af de processer, som vi gør manuelt såsom minificering af css og JavaScript. Du kan se et udsnit af gulp-filen i mit projekt på figur 4. Hvis du allerede er en webudvikler og ikke bruger gulp i dit workflow, så kan jeg på det varmeste anbefale, at du begynder at bruge gulp! Til et legeprojekt, som det vi har gang i her, giver det ikke megen mening, men et projekt skal ikke blive ret meget større, før du kan spare en betydelig mængde tid med gulp. Bower.json er en pakkemanager. En pakkemanager bruges på samme måde som f.eks. NPM i node og NuGet i .NET. På figur 5 kan du se, hvordan min bower.json-fil ser ud. Som du kan se, så indeholder den bare en liste med de afhængigheder, som mit projekt har af forskellige pakker. Hvis du vil tilføje pakker til bower.json, så kommer det med fuld IntelliSense i Visual Studio 2015. På figur 6 kan du se, hvordan det ser ud, når jeg forsøger at tilføje angularjs til mit projekt. Du kan også gøre det via en kommandolinje, men hvorfor det når IntelliSense i Visual Studio hjælper mig?

I gang med at kode
Et ASP.NET 5-projekt er et MVC 6-projekt. MVC 6 er den seneste version af de MVC-udvidelser, som Microsoft har tilføjet til ASP.NET. Bruger du allerede MVC i dine ASP.NET-projekter, så vil alle de ting, som du kender fra MVC 5, stadigvæk virke i MVC 6. Men lad os komme i gang med at kode.

Figur 7:  En Entity-model i ASP.NET er den samme som i et ASP.NET 4.5-projekt. Figur 7: En Entity-model i ASP.NET er den samme som i et ASP.NET 4.5-projekt.

Tryk på Ctrl F5 for at få Visual Studio til at starte projektet uden at debugge. Når startsiden dukker frem, så tryk på linket, der hedder About i toppen af siden. Uden at lukke siden ned, skift tilbage til Visual Studio og åbn filen, der hedder HomeController.cs i folderen Controllers. Nummer to meto-de i den fil har en linjekode, der hedder: ViewData[”Message”] = ”Your Application Description Page”. Lav den linje om til at sige ASP.NET 5 Styrer, imellem citationstegnene efter lig med-tegnet. Gå tilbage til About side og tryk F5. I stedet for at sige ”Your Application Description Page”, siger den nu ASP.NET 5 Styrer, og den gjorde det uden, at du compilerede din applikation først! Det gør det noget hurtigere at implementere små fixes til koden uden at skulle igennem en compilering først.

De fleste moderne webapplikationer bruger en kombination af server side og client side-kode til at løse sin opgave. ASP.NET har med tiden givet os flere og flere muligheder for at udvikle vores applikationer som client side apps, og med ASP.NET 5 kan vi nu lave SPA-apps, der har det meste af sin logik kørende som JavaScript på klienten, aka. Browseren, som så kalder web-services på serveren. Den kode, der kører på serveren, vil være struktureret efter MVC-princippet og være MVC 6. Med MVC 6 har Microsoft forenet standard MVC med Web API-projekttyperne. Tidligere var det sådan, at Web API havde lidt MVC i sig, men med ASP.NET 5 så vil en Web API-app være en MVC 6 app. MVC 6 bruger ligesom MVC 5 razor til at genere sine websider, så alle vores razor-evner vil kunne overføres direkte til MVC 6. Den eneste forskel, der er imellem et MVC 6 projekt og et WebAPI-projekt, er, at der ikke vil være nogle websider i et Web API-projekt, og dermed ikke noget razor-kode. Alle de andre ting som f.eks. Controller og Model vil være de samme imellem de to projekttyper.

Nu skifter vi til koden server side. Først har jeg højreklikket på folderen kaldet Models og valgt at tilføje en ny klasse. Du kan se koden til klassen på figur 7. Dernæst har jeg tilføjet koden fra figur 8 til metoden About i HomeController-filen. Hvis vi forsøger at compilere koden nu, så får vi en fejl. Her rammer vi en af de ting, som ikke er blevet implementeret i .NET Core 5.0 endnu. For at få det her til at virke, er vi nødt til at fjerne referencen til .NET Core 5.0 fra filen project.json. Derfor må du åbne project.json og finde den linje, der hedder dnxcore50 under frameworks. Husk at fjerne kommaet fra linjen lige op over. Hvis vi prøver at compilere nu, så lykkes det. Nu skal vi så opdatere vores view for at få det til at vise den information, som vores model har hentet om vores maskine. Så åbn filen, der hedder About.cshtml i under Views/Home. Ændrer du på koden i den fil, så kommer den til at se ud som på figur 9. Hvis du eksekverer projektet nu, så skulle du meget gerne få det billede frem, som du ser på figur 10, når du klikker på About-linket.

Figur 8: Environment-koden er ikke implementeret i ASP.NET 5 endnu. Figur 8: Environment-koden er ikke implementeret i ASP.NET 5 endnu.



Sikkerhed i ASP.NET 5
Nu har vi kigget lidt på nogle af de forskellige dele af ASP.NET 5, men rundt om ASP.NET 5 findes der adskillige uundværlige dele som f.eks. sikkerhed. En af kernedelene i sikkerhed er beskyttelse af data, og med alle de eksempler, vi har set de seneste år om data, der er blevet lækket pga. hackere eller decideret dårlig kode, er vigtigheden ikke blevet mindre.
Med ASP.NET 5 kommer der en ny model for databeskyttelse, der skal erstatte <machineKey> elementet fra den gamle web.config-fil. Hele ideen med den nye model kommer sig af behovet for at kunne gemme data sikkert, men lige så meget for at kunne give data tilbage til klienten på en sikker måde. Og på internettet kan du ikke stole på en klient på samme måde, som du kan inde på et firmas netværk. Klienten kan forsøge sig med alle mulige former for snyderi, som din web-app skal kunne imødegå på en sikker måde. Det er ikke nogen nem opgave. Hele designet af den nye model fra Microsofts side er baseret på at identificere de svagheder, der er i den nuværende model og give os bedre og nemmere erstatninger for dem. Selve databeskyttelsesmodellen er delt ind, så der er et API, som udviklerne kan bruge, men der er også et API rettet imod konfiguration, som både udviklere og systemadministratorer kan bruge. Sikkerhedsmodellen har naturligvis understøttelse for brugen af Azure AD, men du kan bruge andre authentificerings-udbydere via Oath 2.0., Facebook eller Google.

Figur 9: Kender du allerede til MVC 5, så vil MVC 6 ikke være noget problem. Figur 9: Kender du allerede til MVC 5, så vil MVC 6 ikke være noget problem.



Ikke fast udgivelsesdato
ASP.NET 5 er stadigvæk under udvikling, og Microsoft har ikke givet en fast udgivelsesdato endnu. Men udviklingen skrider fremad, og der er typisk nye ASP.NET-frigivelser hver anden måned. Som nævnt, så er ASP.NET open source, så du kan følge udvikling på GitHub på første parket. Udviklingen af dokumentation for ASP.NET 5 er også open source. Du kan finde den, og bidrage til den på docs.asp.net. Her finder du eksempler, som du kan gennemgå og eksperimentere med, efterhånden som ASP.NET skrider frem.
ASP.Net 5 er fremtiden, hvad angår ASP.NET-udvikling, men lige nu er der mange ting, som ikke kan lade sig gøre i ASP.NET 5. Det samme vil være gældende, når den endelige udgave bliver frigivet. Derfor vil den ’gamle’ ASP.NET være fuldt ud understøttet af Microsoft i årene fremover. Så er du allerede  igang med et ASP.NET 4.5-projekt, så står du altså ikke lige overfor, at det bliver forældet. Men hold godt øje med ASP.NET 5. For det faktum at Microsoft nu lader et af deres kerneområder eksekvere på både Linux og Mac vil gøre det nemmere i de kommende år, efterhånden som vi allesammen vil anvende Cloud mere og mere.

Figur 10: Med tre linjer kode har vi fået View’et til at vise info om vores maskine. Figur 10: Med tre linjer kode har vi fået View’et til at vise info om vores maskine.