- Razor Pages ponuja model, osredotočen na strani, na ASP.NET Core, pri čemer si deli enako zmogljivo usmerjanje, vmesno programsko opremo in mehanizem za ogled Razor kot MVC.
- Pravi projekti se osredotočajo na mapo Pages, wwwroot, appsettings.json in Program.cs, kjer so konfigurirane storitve, vmesna programska oprema in obravnavanje napak.
- Orodja, kot so Visual Studio, Rider in VS Code, poenostavljajo razvoj, odpravljanje napak, navigacijo in refaktoriranje modelov, pogledov in sintakse Razor.
- ASP.NET Core poenostavlja objavljanje aplikacij Razor v IIS, Azure, strežnike po meri ali Docker, kar omogoča skalabilne in ponovljive uvedbe.

Če prihajate iz Angularja in ASP.NET Web API-ja ter začenjate uživati v C# v ozadju, je Razor Pages neverjetno naraven način, da to veselje prenesete v frontend, ne da bi pri tem opustili svoje obstoječe znanje JavaScripta. Namesto da bi se takoj lotili povsem drugačnega uporabniškega vmesnika, lahko ostanete na znanem ozemlju ASP.NET Core, uporabite sintakso Razor za upodabljanje na strani strežnika in še vedno dodate JavaScript, kjer koli je to smiselno.
ASP.NET Core Razor Pages je Microsoftov priporočeni pristop za gradnjo sodobnih spletnih aplikacij v okolju .NET, ki ponuja čist model, ki temelji na straneh in je nadgrajen z zmogljivim cevovodom ASP.NET Core. Je večplatformski, brezhibno deluje z orodji, kot so Visual Studio, Visual Studio Code in JetBrains Rider, in se prilagaja vsem od majhnih prototipov do aplikacij produkcijske ravni, ki jih podpirajo baze podatkov. V tem priročniku si bomo ogledali, kako so strukturirane resnične aplikacije Razor Pages, kako Program.cs vse povezuje, kako delujejo statične datoteke in konfiguracija ter kako pridejo v poštev orodja, odpravljanje napak in uvajanje.
Kaj pravzaprav je ASP.NET Core Razor Pages (in kako se primerja z MVC)
Razor Pages je funkcija ASP.NET Core, ki omogoča gradnjo spletnih aplikacij okoli strani namesto krmilnikov, kar ponuja enostavnejši miselni model, hkrati pa še vedno uporablja isti osnovni okvir kot MVC. V osnovi deluje na istem skladu za usmerjanje, vmesno programsko opremo in gostovanje kot krmilniki in pogledi, vendar vsaka stran obravnava svoje lastno vedenje, namesto da bi vse centralizirala v razredih krmilnikov.
Vsako stran Razor običajno predstavljata dve datoteki: datoteka .cshtml za označevanje in datoteka .cshtml.cs za logiko strani v jeziku C#. Datoteka .cshtml vsebuje vaš HTML, pomešan s sintakso Razor (na primer zanke, pogoje in pomočnike HTML), medtem ko datoteka kode za .cshtml.cs vsebuje metode obdelovalca, kot sta OnGet, OnPost, lastnosti modela in vso logiko, potrebno za upodabljanje ali obdelavo strani.
Pred Razor Pages je bil prevladujoči vzorec v ASP.NET MVC, kjer so krmilniki vračali poglede in usmerjali vse zahteve prek akcijskih metod. MVC je še vedno v celoti podprt in je preizkušen vzorec z močnimi konvencijami, vendar je v mnogih scenarijih Razor Pages hitrejši za razmislek, ker je koda, ki naloži in obdeluje stran, fizično poleg njene oznake in ne zakopana v ločenem krmilniku.
Čeprav Razor Pages preusmeri fokus stran od krmilnikov, še vedno uporablja isti Razorjev mehanizem za prikaz in podpira tako HtmlHelpers kot TagHelpers za ustvarjanje dinamičnega HTML-ja. TagHelperji so še posebej priročni: razširjajo običajne oznake HTML z atributi, kot so asp-action, asp-controller or asp-route tako lahko povežete povezave in obrazce s končnimi točkami v ozadju, ne da bi morali napisati kup ročnih URL-jev ali vgrajenega JavaScripta.
Za razvijalce, ki že poznajo JavaScript in so že delali z ogrodji SPA, Razor Pages ponuja hibridni pristop: strežniško upodobljen HTML za hitro prvo nalaganje in SEO, z JavaScriptom in knjižnicami za vmesnik, ki so po potrebi nameščene na vrhu. Niste vezani na nobeno določeno ogrodje JS in lahko ohranite zaledni in sprednji del v isti rešitvi, kar poenostavi uvajanje in vzdrževanje.
Ustvarjanje in izvajanje spletne aplikacije Razor Pages
Ko ustvarite nov projekt ASP.NET Core Razor Pages z uporabo Visual Studia, Visual Studio Code ali Riderja, predloga poveže minimalno, a popolno aplikacijo, vključno s datoteko Program.cs, mapo Pages, konfiguracijskimi datotekami in statičnim spletnim korenom. Takoj po namestitvi dobite delujoče spletno mesto, ki ga lahko takoj zaženete in nato razvijete v nekaj bolj dovršenega, kot je katalog filmov ali katera koli druga aplikacija, ki temelji na podatkih.
Preden zaženete aplikacijo prek HTTPS, mora ASP.NET Core uporabiti razvojno potrdilo, ki mu zaupa vaš operacijski sistem, in ko prvič zaženete projekt, se lahko prikaže pogovorno okno, ki vas prosi, da mu zaupate. Ko se prikaže to pogovorno okno, izberite Da pomeni, da se strinjate z uporabo lokalnega razvojnega potrdila za promet HTTPS v vašem računalniku, kar je potrebno za pravilno testiranje varnih končnih toček brez opozoril brskalnika.
V sistemih Windows, macOS ali Linux vam Visual Studio Code omogoča zagon aplikacije s pritiskom na Ctrl+F5 za zagon brez odpravljanja napak ali z uporabo plošče Zaženi in odpravljaj napake, če želite priklopiti program za odpravljanje napak. Prvič vas bo VS Code morda pozval, da izberete vrsto razhroščevalnika, kot je C#, .NET 5+ in .NET Core ali določeno konfiguracijo zagona, kot je C#: RazorPagesMovie [https] RazorPagesMovie odvisno od različice .NET in konfiguracije delovnega prostora.
Po zagonu se vaš privzeti brskalnik odpre na URL-ju, podobnem https://localhost:<port>, kjer so vrata naključno dodeljena ali določena v launchSettings.json, in si ogledujete domačo stran, ki jo ponuja aplikacija Razor Pages. V nekaterih predlogah boste namesto tega videli http://localhost:5001 ali drugo pristanišče; ključno je, da localhost pomeni, da gre za vaš računalnik in ne za zunanji gostitelj.
Ko končate s testiranjem, lahko ustavite delujočo aplikacijo iz svojega IDE-ja: v Visual Studio Code uporabite meni Zaženi in izberite Ustavi odpravljanje napak ali pritisnite Shift+F5, medtem ko v programu Visual Studio za Mac uporabite Debug > Stop Debugging. S tem se ustavi primerek spletnega strežnika Kestrel, ki je bil zagnan za sejo, in sprostijo vrata za druge zagone.
Razumevanje strukture projekta: mape in ključne datoteke
Praktične aplikacije Razor Pages so organizirane okoli nekaj pomembnih map in konfiguracijskih datotek, s katerimi boste nenehno delali: Pages, wwwroot, appsettings.json in Program.cs (v starejših različicah pa Startup.cs). Ključnega pomena je, da se udobno znajdete v teh delih, saj praktično vsak vadniški, vzorčni ali produkcijski projekt uporablja iste konvencije.
Mapa »Strani« je srce projekta Razor Pages, ki vsebuje vse strani .cshtml in njihove datoteke kode v ozadju .cshtml.cs, skupaj s skupno postavitvijo in delnimi pogledi. Vsak par strani (na primer Index.cshtml in Index.cshtml.cs) predstavlja klicno končno točko v vaši aplikaciji in posebne datoteke, ki se začnejo s podčrtajem, kot je _Layout.cshtml, definirajte vsebino, ki se ponovno uporablja na več straneh.
Datoteka postavitve, običajno poimenovana _Layout.cshtml, določa krom vašega spletnega mesta, kot so zgornja navigacijska vrstica, noga in obvestilo o avtorskih pravicah, ter zagotavlja prostor za upodabljanje telesa vsake posamezne strani. Ko spremenite postavitev, takoj vplivate na videz in delovanje vseh strani Razor, ki jo uporabljajo, zato je to glavno mesto za urejanje menijev, blagovnih znamk in skupnih skriptov ali slogov.
Mapa wwwroot je določena spletna korenska mapa, kjer se nahajajo statična sredstva, vključno s CSS, JavaScript, slikami in navadnimi datotekami HTML, ki jih lahko spletni strežnik neposredno streže. Brskalnik lahko dostopa do vsega, kar se nahaja pod wwwroot (odvisno od konfiguracije statične datoteke), zaradi česar je to pravi dom za slogovne predloge spletnih mest, knjižnice na strani odjemalca in slike, na katere se sklicujete v svoji označevalni datoteki.
Konfiguracija aplikacije je običajno shranjena v appsettings.json (in različice, specifične za okolje, kot je appsettings.Development.json), ki vsebujejo nastavitve, kot so povezovalni nizi in zastavice funkcij. Konfiguracijski sistem ASP.NET Core naloži te datoteke in jih združi z okoljskimi spremenljivkami in drugimi ponudniki, kar olajša povezovanje odsekov z razredi močno tipiziranih možnosti v vaši kodi.
Program.cs in cevovod ASP.NET Core
Datoteka Program.cs vsebuje vstopno točko za vašo aplikacijo Razor Pages in določa, kako so spletni gostitelj, storitve in cevovod vmesne programske opreme konfigurirani, preden prva zahteva doseže vaše spletno mesto. V sodobnih različicah ASP.NET Core uporablja Program.cs poenostavljen model »minimalnega gostovanja« z izjavo najvišje ravni, ki ustvari WebApplicationBuilder in nato zgradi in konfigurira WebApplication na primer.
Tipičen vzorec v datoteki Program.cs se začne z var builder = WebApplication.CreateBuilder(args); ki nastavi gostitelja s pogostimi privzetimi nastavitvami, nato pa pokliče builder.Services.AddRazorPages(); za registracijo strani Razor z vsebnikom za vbrizgavanje odvisnosti. Po konfiguraciji storitev, var app = builder.Build(); ustvari objekt aplikacije, ki ga nato povežete z vmesno programsko opremo in končnimi točkami.
Obravnavanje napak in varnostno delovanje sta močno odvisna od okolja, zato običajno vidite preverjanje okolja, kot je if (!app.Environment.IsDevelopment()) da omogočite funkcije produkcijske ravni. V tem stanju boste običajno našli app.UseExceptionHandler("/Error"); ki pošilja neobravnavane napake na namensko stran z napakami in app.UseHsts(); ki aktivira varnostni protokol HTTP Strict Transport Security (HSTS), da brskalnikom naroči, naj za vašo domeno vedno uporabljajo HTTPS.
Cevovod vmesne programske opreme se nato sestavi s klici, kot je app.UseHttpsRedirection();, app.UseStaticFiles(); or app.MapStaticAssets();, app.UseRouting(); in po izbiri app.UseAuthorization(); sledijo preslikave končnih točk. Preusmeritev HTTPS sili nezaščitene zahteve HTTP v nadgradnjo na HTTPS, vmesna programska oprema za statične datoteke (ali novejše statično preslikavanje sredstev v .NET 9) omogoča neposredno streženje virov iz wwwroot, usmerjanje pa določa, katera končna točka obravnava vsak dohodni URL.
Končno so strani Razor povezane z usmerjanjem z app.MapRazorPages(); po izbiri verižen z .WithStaticAssets(); v novejših predlogah za integracijo optimizacije statičnih sredstev, aplikacija pa se zažene z uporabo app.Run();. Na tej točki aplikacija posluša na konfiguriranih vratih in strežnik Kestrel je pripravljen za obdelavo dejanskih zahtev, bodisi lokalno v razvoju bodisi na produkcijskem gostitelju, kot so IIS, Azure App Service ali Docker.
Strani, modeli in modeli ogledov Razor v resničnih aplikacijah
Za vsako netrivialno aplikacijo Razor Pages stoji nabor modelov domen in modelov pogledov, ki predstavljajo vaše podatke in način njihovega prikaza, ne glede na to, ali upravljate katalog filmov, blog ali poslovno nadzorno ploščo. Modeli se običajno tesno preslikajo v entitete baze podatkov, medtem ko so modeli pogledov lahko prilagojeni enemu specifičnemu zaslonu ali uporabniškemu toku, pri čemer se za lažje upodabljanje združuje več modelov ali vnaprej oblikovanih vrednosti.
Običajen razvojni potek dela je, da se začne s preprostimi razredi C#, ki uporabljajo polja in podpise metod kot zareze, in jih postopoma razvije v ustrezne modele z enkapsuliranimi lastnostmi, atributi za validacijo in logiko. Orodja, kot je JetBrains Rider, olajšajo ta razvoj z namenskimi dejanji, ki samodejno pretvorijo polja v lastnosti, ustvarijo izpeljane tipe za hierarhije dedovanja in uporabijo druge refaktoringe, ko izpopolnjujete svoj objektni model.
Dedovanje in vmesniki pomagajo uveljaviti koherentno strukturo vaših modelov, jih uskladiti z dejanskimi poslovnimi pravili in omogočiti polimorfizem, kjer so določena vedenja skupna, vendar se implementacije razlikujejo. Na primer, morda imate bazo ContentItem tip z izpeljanimi Movie, Series in Documentary razredi, vsak s subtilnimi razlikami, vendar s skupno pogodbo, ki se uporablja v celotni aplikaciji.
Ko so vaši modeli na mestu, lahko strani Razor ali poglede MVC ustvarite ročno ali z orodji za oder, ki ustvarijo strani za seznam, ustvarjanje, urejanje in brisanje entitet. Scaffolding drastično pospeši zgodnji razvoj in zagotavlja, da so usmerjanje, vezava modela in validacija pravilno povezani, kar lahko nato prilagodite z lastnimi oznakami in slogi.
Sintaksa Razor, ki se uporablja v datotekah .cshtml, se gladko združuje z modeli z močnim tipiziranjem in modeli pogledov, kar omogoča prikaz podatkov, izvajanje zank in pogojnih izrazov ter ustvarjanje povezav in obrazcev z uporabo HtmlHelpers ali TagHelpers brez izgube varnosti med prevajanjem. Ta kombinacija jezika C# in označevanja ohranja veliko logike na strani strežnika, vendar v brskalniku še vedno ustvari čist HTML, ki se lepo ujema s CSS in JavaScript.
Delo s sintakso Razor, TagHelperji in navigacijo v Riderju
Sintaksa Razor je lahka plast čez HTML, ki se aktivira vsakič, ko @ prikaže se simbol , ki omogoča enostavno vdelavo izrazov, stavkov ali klicev pomočnikov C# neposredno v vašo oznako. Sezname elementov lahko pregledujete, prikazujete ali skrivate elemente glede na pogoje ali prikazujete vrednosti in oblikovane datume, ne da bi morali pisati ločen jezik za predloge ali povsod vgrajevati JavaScript.
TagHelperji se zdijo kot naravna razširitev HTML-ja, kjer so posebni atributi, ki se začnejo z asp- spremenijo vedenje ali izpis elementov, pogosto nadomestijo starejše metode HtmlHelper in odstranijo potrebo po povezovalnem elementu v skriptu. Primeri vključujejo asp-action in asp-controller za usmerjanje sidrnih oznak in obrazcev do določenih dejanj ali usmerjanje atributov, kot so asp-route-id za čisto posredovanje parametrov v URL-jih.
Podpora za IDE je zelo pomembna, ko ste poglobljeno v HTML, Rider pa ponuja koristne funkcije, kot so drobtinice na dnu urejevalnika, ki prikazujejo vašo trenutno lokacijo v strukturi dokumenta. Drobtinice lahko prilagodite v razdelku Urejevalnik v nastavitvah ali možnostih, zaradi česar je navigacija po dolgih datotekah Razor z ugnezdenimi oznakami veliko manj boleča.
V MVC projektih Rider razume tudi konvencije, ki povezujejo krmilnike, dejanja in poglede, zato vam lahko z miško nad rezultati dejanj prikažete možne poti pogledov in Ctrl + klik (ali Cmd-klik v sistemu macOS) skoči neposredno na ustrezno datoteko .cshtml. Bližnjice, kot so Ctrl + B or Cmd-B omogočajo hiter način za navigacijo po vaši kodni bazi, ne da bi se morali pomikati po raziskovalcih rešitev.
Poleg orodij, specifičnih za Razor, Rider vključuje širok nabor namer in hitrih popravkov za HTML, CSS in JavaScript, ki vam pomagajo pisati čisto, dobro strukturirano kodo na strani odjemalca znotraj istega integriranega razvojnega okolja (IDE) kot vaš zaledni sistem C#. Ta tesna integracija lahko prihrani veliko preklapljanja konteksta pri gradnji kompleksnega, interaktivnega uporabniškega vmesnika, ki se še vedno zanaša na strežniško upodobljene poglede ali strani Razor.
Odpravljanje napak v Razor Pages in aplikacijah ASP.NET Core
Odpravljanje napak je vsakodnevna dejavnost v spletnem razvoju in aplikacije ASP.NET Core, ki izvajajo Razor Pages, niso izjema, zato je močna podpora za odpravljanje napak v vašem integriranem razvojnem okolju (IDE) bistvenega pomena. Tako Visual Studio kot Rider ponujata interaktivne razhroščevalnike, ki se lahko priklopijo na vaš proces Kestrel, se po korakih pomikajo skozi kodo C#, pregledujejo spremenljivke in ocenjujejo izraze med izvajanjem aplikacije.
Riderjev razhroščevalnik v sistemu Windows podpira funkcijo »Uredi in nadaljuj«, ki vam omogoča prilagajanje kode, medtem ko je aplikacija zaustavljena na prelomni točki, in uporabo sprememb brez ponovnega zagona celotne seje odpravljanja napak. Ta zmožnost odpravljanja manjših napak ali eksperimentiranja med odpravljanjem napak znatno pospeši odpravljanje težav, zlasti pri velikih projektih z netrivialnimi časi zagona.
Privzeta stran z izjemami za razvijalce v ASP.NET Core je samodejno omogočena, ko je okolje nastavljeno na Razvoj, kar vam omogoča podrobno sled sklada, informacije o zahtevah in diagnostiko, kadar pride do neobravnavanih izjem. Ta pogled je izjemno koristen med lokalnim odpravljanjem napak, vendar nevaren v produkciji, ker lahko razkrije notranje podrobnosti o vaši aplikaciji in okolju.
Za zaščito občutljivih informacij produkcijska in testna okolja običajno onemogočijo stran z izjemami za razvijalce in namesto tega uporabijo konfigurirano pot za obravnavo izjem, pogosto /Error, da se med beleženjem dejanskih podrobnosti na strani strežnika prikaže uporabniku prijazen zaslon z napako. To vedenje je v datoteki Program.cs nadzorovano s preverjanjem okolja in klici metode UseExceptionHandler in UseHsts.
Ko gre resnično iz tira in vadnice ne ustrezajo vašemu vedenju, je pogosto koristno primerjati svoj projekt z znanim dobrim vzorcem, ki ga zagotavlja Microsoft ali drugi verodostojni viri. Številni uradni vadniki za Razor Pages objavijo dokončan vzorčni projekt, ki si ga lahko ogledate ali prenesete, da ga primerjate s svojo kodo in odkrijete manjkajočo konfiguracijo, tipkarske napake ali napačno postavljene datoteke.
Objavljanje in uvajanje pravih aplikacij ASP.NET Core Razor
Pri pošiljanju aplikacije Razor Pages se vsa prejšnja struktura in konfiguracija izplačata, saj ASP.NET Core podpira več možnosti uvajanja, ki ustrezajo različnim gostovalnim okoljem in delovnim procesom. Ne glede na to, ali imate raje IIS v sistemu Windows, vsebnike Linux v Dockerju ali upravljano platformo, kot je Azure App Service, lahko postopek objavljanja poganja MSBuild in ga integrira v vaše cevovode CI/CD.
Visual Studio in Rider ponujata profile za objavljanje, ki lahko zapakirajo vašo aplikacijo in jo namestijo v IIS z uporabo Web Deploy (MSDeploy), jo kopirajo v lokalno ali omrežno mapo ali pa jo prek FTP, FTPS ali SFTP neposredno naložijo na oddaljeni strežnik. Z ustvarjanjem profila za objavo kodirate nastavitve uvajanja, tako da so prihodnje objave preproste kot izbira profila in klik gumba ali izvajanje ukaza.
Za scenarije v oblaku je priljubljena tarča storitev Azure App Service, IDE pa integrirajo orodja Azure za ustvarjanje in objavljanje spletnih aplikacij neposredno iz vašega projekta, pri čemer se spet opirajo na MSBuild in MSDeploy. Ta pristop zagotavlja doslednost gradnje in uvajanja med lokalnim in oblačnim okoljem ter ga je mogoče avtomatizirati v Azure DevOps, GitHub Actions ali drugih sistemih CI.
Docker je še ena prvovrstna možnost za ASP.NET Core, ki vam omogoča, da aplikacijo Razor Pages shranite v vsebnike, tako da jo je mogoče predvidljivo izvajati v katerem koli okolju, ki podpira vsebnike. Rider in Visual Studio vam lahko pomagata pri ustvarjanju datotek Dockerfiles in konfiguracij docker-compose, kar omogoča potek dela, kjer razvijate, odpravljate napake in uvajate svojo aplikacijo znotraj vsebnikov, bodisi lokalno bodisi v orkestratorjih, kot je Kubernetes.
Ne glede na cilj korak objave prevede vašo kodo C#, združi poglede Razor, kopira statična sredstva in, odvisno od nastavitev, lahko ustvari tudi samostojno izvajalno okolje, tako da gostiteljski računalnik ne potrebuje skupne namestitve .NET. To združevanje je tisto, kar vaš razvojni projekt spremeni v artefakt, ki ga lahko uporabijo resnični uporabniki.
Če združimo vse te dele – od razvojnih certifikatov in datotek Program.cs, prek Pages in wwwroot do odpravljanja napak in objavljanja – Razor Pages ponuja pragmatičen način za gradnjo resničnih spletnih aplikacij ASP.NET Core, ki so vzdrževalne, zmogljive in udobne za razvijalce, ki že uživajo v delu v jeziku C# in se še niso pripravljeni povsem zanašati na ogrodje z eno stranjo za vsako situacijo.