Professional Documents
Culture Documents
Napredne Web Tehnologije k1
Napredne Web Tehnologije k1
KOLOKVIJ 1
Razlike:
Framework ili softversko okruženje je apstrakcija u kojoj se softver opće funkcionalnosti može prilagoditi
pisanjem dodatnog koda, pružajući specifične aplikacijske funkcionalnosti. Olakšava razvoj aplikacija,
softverskih proizvoda i rješenja. Može uključivati različite programe za podršku, kompajlere, biblioteke, alate
i APIje.
Neki od okruženja su: .NET framework, Bootstrap framework, ASP.NET, Django (Python), Zend, Express.js,…
ASP.NET je Microsoftova tehnologija za razvoj web aplikacija (ubuduće app) koje je moguće razvijati na više
načina:
1. Razvoj app za interakciju s korisnikom koja treba imati odgovarajuće korisničko sučelje. Postoje 3 pristupa:
a) Web forms - tip ASP.NET app koji koristi web forme uz web forms sintaksu. Web forme su gotove
kontrole od kojih se slaže app. Temeljna kontrola je klasa Page koja predstavlja jednu stranicu.
Programski kod se uglavnom odvaja u code-behind datoteke.
b) MVC - tip ASP.NET app koja se temelji na MVC predlošku, a koristi Razor sintaksu za kombiniranje
HTML i C# koda. Osnovni element prikaza je WebViewPage, ali je ugrađen u MVC predložak.
Programski kod se također piše u code-behind datotekama.
c) Web API - tip ASP.NET app koji omogućava kreiranje RESTful servisa. Koristi se kada se razvija app
koja nije namijenjena krajnjem korisniku, nego drugoj app.
Single page web app podrazumijeva da se s web servera dohvaća samo jedna HTML stranica unutar koje se
izvođenjem JavaScript koda sa web servera dohvaćaju ostale informacije (JSON) i rezultati.
Dizajnerski predložak (design pattern) je općenito rješenje koje se može ponovno upotrebljavati za rješavanje
različitih problema prilikom dizajniranja app. Sam predložak nije direktno prevodiv u kod, već je idejno
rješenje i treba ga se treba implementirati na definiran način. On je šablona kako riješiti određeni problem.
Odnose se na različite razine apstrakcija i granulacija sustava. Arhitekturalni predložak je onaj koji se odnosi
na cijeli sustav (najviša razina).
Cilj je ubrzati i olakšati razvoj app, ponovna uporabljivost koda, jednostavno testiranje app,…
Apstrakcija je bilo koja tehnika kojom se pristupa kompleksnosti računalnog sustava skrivanjem
“nepotrebnog“ u trenutnom kontekstu.
MVC (Model View Controller) je arhitekturalni predložak namijenjen odvajanju prezentacije sadržaja od
ostatka app, tj. odvajanje koda za grafički prikaz od koda za poslovnu logiku od koda korisničke akcije.
- Model - središnji dio predloška, upravlja podacima u sustavu i implementira poslovnu logiku. Korisničke
ulaze prima preko kontrolera.
- Prikaz - bilo koja vizualizacija podataka korisniku. Prilikom prikazivanja podaci se mogu organizirati na
različite načine, tj. mogu se stvarati različiti prikazi, ovisno o potrebama korisnika.
- Kontroler - dio koji prihvaća ulaze korisnika te ih prema potrebi prevodi u naredbe modelu ili drugom
prikazu. Na osnovu zahtjeva korisnika generira prikaze s podacima iz modela.
Koncept konvencija nad konfiguracijom (convention over configuration ili coding by convention) je softverska
dizajnerska paradigma (pristup razvoju softvera) prema kojoj se odluke i izbori poput imenovanja klasa,
mapiranja handlera,… u aplikaciji koje developeri trebaju donijeti tijekom razvoja aplikacije predefiniraju
(default). Kaže da je svojstva web app jednostavnije i bolje definirati konvencijom, nego konfiguracijskim
datotekama. Danas se većinom koristi ovaj pristup.
1.) Svaka klasa kontrolera završava riječi Controller i nalazi se u Controllers direktoriju. (ProductController)
3.) Prikazi koje kontroleri koriste smješteni su u poddirektorij Views direktorija i imenuju po konvenciji
prema imenu kontrolera bez sufiksa Controller. (/Views/Product)
4.) Svi dijelovi sučelja, koji su ponovno upotrebljivi, se smještaju u poddirektorij Shared Views direktorija.
Inverzija kontrole (IoC - Inversion of Control) je princip dizajniranja softverskih kojim se na različite načine
mijenja uobičajena kontrola tijeka izvršavanja app prema kojoj se app izvršava od početka app do kraja i
„sama” ima kontrolu nad tijekom izvršavanja. Povećava kvalitetu koda (reuseability, maintainablility,
testability, portability, …) kroz SoC i smanjuje ovisnosti među komponentama koda (decoupling).
(npr. kod JavaScripta, kada se desi neki događaj, event handler callback funkcija se smješta u red. Ne izvršava
se odmah u glavnoj niti nego se periodički dohvaćaju funkcije iz reda da bi se izvršile u glavnoj niti)
Loša strana IoCa je to što može zakomplicirati debugiranje app.
EDP (event driven programming) je programska paradigma koja se obično koristi kod GUIja (graphical user
interface) i obično je implementirana kroz IoC.
Factory predložak je jedan od strukturalnih predložaka čija je namjena inverzija kontrole prilikom stvaranja
objekata. Objekt koji instancira određeni objekt, kako bi ga koristio, prepusti stvaranje objekta koji će
koristiti. Time se smanjuje sprega između te dvije klase, tj. objekta koji se koristi i korištenog objekta.
Factory predložak se može implementirati kao Factory Method (implementira se nasljeđivanjem), Simple
Factory i Abstract Factory (mehanizam sučelja), ovisno o potrebama app. Podrazumijeva se da postoji
centralno mjesto za stvaranje objekata koje koriste drugi objekti.
Klasične tehnologije pojedini URI mapiraju u pojedinu .html, .php, .asp, .aspx datoteku. Nedostaci ovog
pristupa su da iz URIja korisnik ne može razumjeti što dohvaća, web tražilice ne mogu dobro povezati takav
URI s pojmovima pretraživanja i URIji nisu estetski.
PURL (persistent URL) je tip URLa koji usmjerava zahtjeve na točno mjesto traženog resursa. Mora uvijek ostati
isti makar se struktura stranice mijenja.
Prednosti rutiranja klijentskih web zahtjeva je mogućnost korištenja tzv. taštih (vanity) URLa koji su razumljiviji
korisnicima kao i tražilicama (npr. http://localhost/Filmovi/Ljubavni/Titanic).
Placeholderi su definirani vitičastim zagradama, segmenti su odvojeni kosom crtom “ / “. Više placeholdera
unutar jednog segmenta odvaja se literalom “ - “.
Parametar id ima svojstvo da ga se ne treba imenovati u zahtjevu i ne treba biti dio query stringa, već se može
navesti kao dio puta.
Proširena metoda (extension method) je metoda koja se dodaje objektu nakon kompajliranja bez potrebe za
stvaranjem nove klase s dodanom metodom, ponovnim kompajliranjem, itd.
Inicijalizatori kolekcija rade na isti princip kao i inicijalizatori objekata, a omogućavaju postavljanje zadanih
vrijednosti u kolekcije.
Imenovani argumenti omogućavaju povezivanje argumenta s imenom parametra (ne s pozicijom parametra u
listi). Opcionalni argumenti omogućavaju izostavljanje vrijednosti pojedinih parametara.
StopRoutingHandler ili IgnoreRoute su metode koje se koriste ako ne želimo da neke zahtjeve obradi
mehanizam rutiranja.
ActionLink metoda generira link na akciju kontrolera, a Action generira samo URL.
.axd ekstenzija ne definira fizičku datoteku, već dinamički kreirani handler prema dll ili nekim drugim
datotekama app. ASP.NET MVC routing podsustav ne bi trebao izvršavati ovakve zahtjeve.
Sve metode koje dinamički kreiraju URL-ove pozivaju jednu od dvije verzije metode GetVirtualPath na kolekciji
ruta (Route.GetVirtualPath) aplikacije:
Prva metoda ima trenutni RequestContext (objekt koji sadrži informacije o trenutnom HTTP zahtjevu) i tablicu
definiranih ruta. Prolazi kroz tablicu provjeravajući može li kreirati URL. Ako ruta odgovara, metoda vraća
instancu VirtualPathData s URLom, ako ne odgovara vraća null, a podsustav rutiranja dohvaća sljedeću rutu.
- public VirtualPathData GetVirtualPath(RequestContext requestContext, string name, RouteValueDictionary values)
Druga metoda koristi ime rute kao treći parametar. Imena ruta u kolekciji ruta aplikacije su jedinstvena, stoga
nije potrebno prolaziti kroz cijelu kolekciju, već se odmah dohvaća imenovana ruta. Ako imenovana ruta po
parametrima ne odgovara, metoda vraća null i ne provjerava dalje druge rute.
Model u MVCu je klasa (kolekcija klasa) u objektno orijentiranom smislu, zbog toga podaci u app trebaju biti u
obliku instanci klasa modela, odnosno objekata. Pretvaranje fizičkog zapisa podataka u objekte app je
unošenje dodatne razine apstrakcije u app.
ORM (Objektno relacijsko mapiranje) je postupak kojim se objekti app prevode u zapise u relacijskoj bazi
podataka i obrnuto. Problemi tijekom mapiranja zovu se object-relational impedance-mismatch.
NuGet je Microsoftov package manager koji dolazi kao ekstenzija za Visual Studio. Automatizira instalaciju,
nadogradnju i uklanjanje softvera vodeći računa o povezanom softveru, dijeljenim bibliotekama, … Za .NET
upravlja paketima na razini app (Application-level Dependency manager) i omogućava jednostavno
dodavanje potrebnih paketa koji nisu standardno dio projekta. NuGet se može pozvati iz konzole ili preko
grafičkog sučelja.
CDN (Content Delivery Network) je mreža zemljopisno distribuiranih servera koji sadrže različite sadržaje (web
sadržaje, softver za preuzimanje, video sadržaje, licencirane CDN, ….). Obično su to sadržaji poput jQuery.js i
slično, koji se mogu koristiti unutar web app. Dva razloga zašto koristiti tuđe CND: nije potrebno sam ih
hoastati na svom web serveru i to što CND može usmjeriti klijenta na dohvaćanje CND sadržaja koji je “bliži“.
(npr. CloudFront, Microsoft,…)
EF se oslanja na ADO.NET koji je dio .NET frameworka koji omogućava spajanje aplikacije na različite izvore
podataka i upravljanje podacima koji se nalaze u izvoru podataka (najčešće baza podataka). ADO.NET je OO
skupina biblioteka s gotovim klasama koje uključuju funkcionalnosti potrebne za rad s izvorima podataka.
ODBC (Open Database Connectivity) je API za pristup bazi podataka koji je razvio Microsoft.
EDM (Entity Data Model) je način opisivanja strukture podataka neovisno o tome kako su podaci pohranjeni.
Temelji se na ER (Entity-Relationship) modelu.
Ovakvo odvajanje pruža prednosti lakše komunikacije svih dionika (stakeholders), lakše razumijevanje domene
od strane developera, lakši prijenos na različite načine fizičke pohrane podataka,…
Object Service je glavna ulazna točka za dohvaćanje podataka iz baze i spremanje podataka u bazu. Zadužen je
za materijalizaciju, postupak pretvaranja podataka koje je vratio Entity client data provider u entitete.
Entity Client Data Provider sloj ima glavnu namjenu u prevođenju L2E i Entity SQL upita u SQL upite koje može
razumjeti relacijska baza. Komunicira s ADO.Net data providerima koji šalju i dohvaćaju podatke iz baze.
ADO.Net Data Provider sloj komunicira s bazom podataka korištenjem standardnog ADO.Net pristupa.
L2E (LINQ to Entities) je jezik za generiranje upita nad objektima. Vraća entitete definirane u konceptualnom
modelu. Entity SQL (samo za EF 6) je još jedan jezik za generiranje upita nad entitetima.
DDM (Domain Drive Modeling) ili DDD (Domain Driven Design) je pristup razvoju složenih app gdje model
domene definira entitete i relacije, logički model za relacijsku bazu se približava fizičkoj pohrani kroz
normalizaciju, ograničenja stranih ključeva, i dr., a fizički model za određenu implementaciju baze podataka
specificira detalje pohrane poput indeksiranja, uskupljivanja (clustering) podataka i sl.
Četiri (tri) pristupa razvijanju app u EF: - Model first ili Code first kada se stvara nova baza podataka
- Database first ili Code first kada već postoji baza podataka
Database First iz postojeće baze reverznim inženjerstvom može se dobiti model app. Model je u .edmx fileu.
Code first - odmah se pišu obične C# klase koje su neovisne o EF, a EF zaključuje iz koda, pomoću niza
konvencija, kako i gdje pohraniti instance.
- podaci klase objekata Student bit će pohranjeni u tablicu Students
- svojstvo klase ID ili imeklaseID će biti mapirano u primarni auto-inkrementalni ključ u tablici,…
Svojstva su slična podatkovnim članovima klase i omogućavaju čitanje i zapisivanje vrijednosti privatnih
članova kroz pristupnike (accessors). Pristupnici svojstva sadrže naredbe za dohvaćanje ili postavljanje
svojstva. Deklaracija pristupnika može sadržavati pristupnik get ili set ili oba. Kod deklaracije svojstva oba
pristupnika trebaju biti deklarirana unutar tijela svojstva tj. {}. Tijelo pristupnika nalikuje metodi. Pristupnik
get treba vratiti vrijednost tipa svojstva te mora završiti ili s return naredbom ili s throw naredbom.
Pristupnik set je sličan metodi povratnog tipa void. Koristi implicitni parametar value istog tipa kao i svojstvo.
Podatkovne anotacije (data annotation) su atributi kojima definiramo svojstva entiteta (klasa) podatkovnog
modela. Atributi su mehanizam u C# kojima možemo definirati nova deklarativna svojstva klase. (npr. kada
želimo primarni ključ mapirati uz svojstvo koje nije imena ID ili imeklaseID, koristimo [Key]). Koriste se i za
definiranje metapodataka koje će EF koristiti prilikom kreiranja baze. Zatim u modelu se koriste kao
validacija na strani klijenta, te kao validacija podataka na strani servera.
Code first podržava korištenje EF fluentnog APIja koji omogućava definiranje svojstava modela programskim
kodom, za razliku od podatkovnih anotacija koje su deklarativne. Moguće je i kombiniranje ova dva pristupa,
ali u tom slučaju je fluent API jači (fluent API > data annotation > default conventions).
Fluentna sučelja je API dizajnerski predložak za implementaciju OO APIja koji omogućava pisanje fluentnog
koda, lakšeg za čitanje. Oslanja se na ulančavanje metoda (samo non-void metode).
Required (RequiredAtribute) definira da je određeno svojstvo obavezno. Validacija unosa podatka i na strani
klijenta i na strani servera.
DataType anotacija definira tip podatka specifičnije, nego što to rade osnovni tipovi podataka (npr. CreditCard,
Curency, Custom, Date, DateTime, Duration, EmailAddress, Html, Password, Text,…).
DisplayFormat atribut podržava različite opcije formatiranja podataka prilikom prikaza kroz niz parametara.
Column atribut definira ime kolone u tablici koja odgovara klasi u kojoj se atribut koristi.
StringLength atribut definira veličinu string svojstva i na strani servera i na strani klijenta.
Operator ?? (null-coalescing) se koristi za operacije nad nulabilnim tipovima. Vraća operand s lijeve strane ako
je različit od null, inače vraća operand s desne strane operatora.
Tip varijable je nullable ako mu se može dodijeliti neka vrijednost ili null vrijednost, što znači da varijabla nema
nikakvu vrijednost. (String može biti null, Int32 ne može).
Formatiranje je postupak konvertiranja instance klase, strukture ili vrijednosti enumeracije u string. String za
formatiranje sadrži placeholder ({0}) u koji se smješta vrijednost koja se treba prikazati. Element za
formatiranje ima oblik: {index [,alignment] [:formatString]}
Relacije se definiraju kroz navigacijska svojstva klase. To su svojstva tipa druge klase prema kojoj se definira
relacija (navigacija).
Navigacijska svojstva omogućavaju navigaciju u oba smjera (od roditelja prema djetetu i obrnuto) vraćajući ili
referencirani objekt (kardinalnost jedan) ili kolekciju objekata (kardinalnost relacije više).
Kardinalnost se određuje iz brojnosti svojstva. Za više se stavlja da je svojstvo tipa List ili neke druge klase koja
implementira ICollection sučelje.
Code first omogućava i definiranje svih tipova relacija za što se mogu koristiti sva 3 pristupa (konvencije,
podatkovne anotacije i fluent API). Također, zaključuje o relacijama među objektima prema konvencijama na
temelju navigacijskih svojstava. Svako svojstvo koje se zove jednako kao primarni ključ, u drugom entitetu
smatra se stranim ključem. Detekcija stranih ključeva nije case sensitive. Ako je strani ključ nullable, relacija
je opcionalna.
Relacija 1-1 je neuobičajena i EF je ne očekuje. Zajebana je jer EF ne može odredit ko je roditelj, a ko dite pa se
takve relacije eksplicitno definiraju korištenjem ForeignKey atributa u klasi koja je dijete. ForeignKey treba
biti jedinstveno svojstvo iz klase roditelj u relaciji (uobičajeno se koristi ključ) i to se svojstvo koristi kao
primarni ključ u klasi djeteta.
Relacija N-M uobičajeno nije podržana u relacijskim bazama. Ovakve relacije se realiziraju asocijativnim
entitetima (međutablicama). EF može obraditi ove relacije, ali trebaju biti definirane sa List (ili bilo kojom
ICollection implementacijom) s obje strane relacije.
Lazy loading je uzorak (design pattern) u programiranju prema kojem se inicijalizacija objekta odgađa sve do
trenutka dok taj objekt nije potreban. Pridonosi efikasnosti programa kada se pravilno koristi. Suprotan
predložak je eager loading. EF podržava lazy loading.
Kada se entitet pročita iz baze, podaci iz relacija nisu dohvaćeni. Dohvaćaju se automatski tek kada se prvi put
pristupa tim podacima. DbContext klasa podržava ovakav način dohvaćanja podataka.
Eager loading je uzorak u programiranju prema kojem se podaci iz relacija dohvaćaju zajedno s osnovnim
entitetom, što se obično realizira jednim join upitom koji dohvaća sve podatke. Ovakav način dohvaćanja
podataka se obično radi pozivom Include metode na osnovnom entitetu.
Explicit loading je (šta i ovi gori) prema kojem se relacijski podaci trebaju dohvaćati eksplicitno u kodu (nije
automatski) što se radi preko object state managera za entitet i pozivom Collection.Load ili Reference.Load.
Obično se koristi kada je lazy loading isključen.
OSM (Object State Manager) je interna komponenta konteksta. Zadužen je za upravljanje promjenama stanja
entiteta, praćenje relacija među entitetima te dodavanje ili brisanje entiteta.
Scaffolding je mehanizam koji omogućava automatsko generiranje osnovnog koda kontrolera i prikaza na
temelju modela na temelju predložaka. Sve zna di šta triba ić: kako će nazvat kontrolere, di ide koji dio koda
koje komponente, di smistit generirane dijelove koda,…
Inicijalizatori baze (database initializers) koriste za to da pri svakom pokretanju app, EF ponovno kreira bazu i
onda je pomoću Seed metode popuni podacima. Ovaj pristup koristi se samo pri razvoju app.
Kontroleri (upravljači) su središnji dio ASP.NET MVC predloška. Odgovaraju na zahtjeve korisnika prema app
(HTTP zahtjevi). Preusmjeravanje dolaznih HTTP zahtjeva se radi kroz mehanizam rutiranja. Kontroler je klasa
koja nasljeđuje klasu System.Web.Mvc.Controller. Uobičajeno je, ali nije obavezno da kontroler koristi
modele podataka i prikaz.
Akcije (actions) su metode unutar kontrolera koje se pozivaju preko HTTP zahtjeva. Ne smiju biti statičke i
moraju biti public. Ne mogu imati za parametre neograničene tipove i ne mogu se overloadati.
Neograničeni tipovi (unbounded generic type) su generički tipovi koji sadrže parametar tipa T koji još nije
specificiran (npr. List<T>). Zatvoreni tip je kada je tip specificiran (npr. List<int>).
Zadano je u MVCu da su sve public metode akcije.
Akcija Indeks() je definirana kao osnovna akcija koja će se pozvati ako ni jedna druga akcija nije navedena u
HTTP zahtjevu (npr. http://server/Prazni nije navedena akcija). Obično se povezuju sa samo jednom
korisničkom aktivnošću (npr. klik na link, upisivanje URLa u preglednik,...). Svaka korisnička akcija predstavlja
generiranje HTTP zahtjeva koji se prema URL i definiranim tablicama rutiranja povezuje s akcijom.
Create/ Update/ Delete podataka je operacija sa dva koraka: 1.) Prikaz forme (HttpGet)
2.) Prihvaćanje korisničkog ulaza (HttpPost)
ActionVerbs selector je atribut koji se koristi za definiranje izbora akcija na osnovu metode u HTTP zahtjevu.
MVC podržava ograničavanje izvođenja akcije prema metodi HTTP zahtjeva s: HttpGet, HttpPost, HttpPut,
HttpDelete, HttpOptions i HttpPatch selektorima akcijskih glagola.
ActionResult klasa predstavlja rezultat izvršene akcije, ViewResult je klasa koja generira odgovarajući prikaz.
1.) Korištenje modela u prikazu koji se kreira pozivom funkcije View() u kontroleru (strongly-typed view)
2.) Korištenje ViewBag dinamičnog objekta koji je na raspolaganju samo u promatranoj akciji i nema
potrebe za tipiranjem podataka, već sve radi automatski.
3.) Korištenje TempData. Kolekcija tipa rječnik sa string ključevima i objekt vrijednostima. Omogućava
pamćenje podataka od jedne do druge akcije unutar istog ili između dva kontrolera.
Dinamički objekti nisu ograničeni statičkim tipom ili formatom, već se svojstva i metode takvih objekata
određuju prilikom izvođenja koda, a ne prilikom kompajliranja. Definiraju se ključnom riječi dynamic.
1.) Eksplicitno obrađujući ulazni zahtjev preko svojstva Request u klasi Controller što zahtjeva dosta koda.
2.) Povezivanje modela (Model Binding) je mehanizam koji olakšava prosljeđivanje podataka iz HTTP
zahtjeva u akcije kontrolera automatskim povezivanjem. Imena ulaznih parametara iz HTTP
zahtjeva mapiraju se u parametre akcije po imenu ovim redoslijedom:
1. Podaci s forme (poslani POST metodom)
2. Podaci iz rute
3. Podaci iz upitnog URIja
Bind atribut koristit se za definiranje vlastitog načina povezivanja. Exclude svojstvo atributa Bind sadrži listu
imena svojstava za koje povezivanje nije dozvoljeno, a Include sadrži listu svojstava za koje je povezivanje
dozvoljeno.
ModelState je svojstvo kontrolera preko kojeg se mogu dobiti informacije o povezanim podacima.
Filter je mehanizam koji omogućava modificiranje ponašanja akcije tako da omogući kroz mehanizam pipelinea
izvršavanje određene funkcionalnosti nad HTTP zahtjevom prije ili nakon izvršavanja funkcionalnosti akcije.
Vlastiti filteri mogu se definirati kada postoji potreba za izvršavanjem neke funkcionalnosti nad više akcija.
Mogu se postaviti nad pojedinom akcijom ili nad cijelom klasom kontrolera. Mogu biti globalni.
5 tipova filtera: - Autorizacijski filteri - izvršavaju se prije drugih filtera i prije nego što se kod akcije pozove na
izvršavanje. Odnose se na autentifikaciju i autorizaciju.
- Filteri resursa - izvršavaju se nakon autorizacijskih filtera i prije pozivanja modela pa se mogu
koristiti za upravljanje povezivanjem.
- Akcijski filteri - izvršavaju se prije i poslije akcije.
- Filteri rezultata - mogu se izvršiti prije i poslije vraćanja rezultata iz akcije.
- Filteri iznimki - izvršavaju se samo ako je akcija ili drugi filter generirao iznimku.
HandleError koristi se za baratanje iznimkama koje se podižu u akciji, a koje nisu definirane u kodu.
HandleErrorAttribute omogućava definiranje načina obrade iznimki podignutima u akciji. To je inače zadano
tako da MVC prikaže Error prikaz iz ~/Views/Shared.
ValidateAntiForgeryToken je filter koji se koristi za zaštitu app od CSFR (CSFR - cross site request forgeries)
napada. Radi se na app razini korištenjem slučajnih promjenjivih tokena prilikom generiranja i održavanja
sesije logiranog korisnika. CSFR napad je pokušaj da druga web stranica objavi neželjene podatke na našu
stranicu koristeći podatke koji su na prevaru dobiveni od korisnika.
Ovaj mehanizam se implementira tako da server pošalje klijentu HTTP cookie s tokenom, a drugi token koristi
kao hidden u formi. Kada klijent pošalje HTTP zahtjev, ukoliko ne sadrži cookie s odgovarajućom vrijednosti i
hidden token u formi, generira se greška.
Prikaz (pogled) je zadužen za kreiranje sučelja MVC app prema korisniku. Pohranjuje u datoteku s ekstenzijom
.cshtml u Views direktoriju projekta. Views direktorij sadržava jedan direktorij po kontroleru s istim imenom
kao i kontroler. Ime prikaza obično je isto kao i ime akcije u kontroleru koja će pozvati taj prikaz. Prikazima
se ne može direktno pristupati, već se uvijek renderiraju od strane kontrolera koji osigurava podatke za
prikaz.
Mehanizam prikaza (view engine) podržava različite načine za generiranje prikaza MVC app (koji je u biti
HTML kod u kombinaciji s JS i CSS kodom) koji se isporučuju u klijentski preglednik.
Razor sintaksa je markup sintaksa, bazirana na C# programskom jeziku koja omogućava kombiniranje HTML i
C# koda. Znak @ kaže Razor engineu da slijedi C# kod, a on će sam zaključiti kada kod prestaje.
Blok koda (code block) sadrži jednu ili više naredbi ograđenih vitičastim zagradama {}
var je ključna riječ pri deklaraciji varijable. Automatski definira tip varijable prema tipu s desne strane znaka
jednako. Ovo je implicitni način definiranje tipa, za razliku od uobičajenog eksplicitnog s navođenjem tipa.
Prilikom deklaracije varijabli se odmah pridjeljuje vrijednost. Obično se koristi u LINQ upitima i za kreiranje
anonimnih tipova.
- Klasa Controller ima ViewData svojstvo koje je instanca klase ViewDataDictionary koje služi za postavljanje
ili dohvaćanje rječnika (dictionary) za prikaz. ViewBag sadrži iste podatke kao i ViewData samo se s
njima lakše radi.
- ViewDataDictionary ima svojstvo Model koje se postavlja na onaj objekt (ili kolekciju) koji predamo pozivu
metode View prilikom kreiranja prikaza.
- Klasa WebViewPage ima svojstvo Model koje poprima rječnik iz kontrolera.
- @model direktiva u prikazu specificira tip objekta koji se predaje prikazu preko Model svojstva.
- radi IntelliSense
Views/Shared direktorij sadrži prikaze koji su zajednički (npr. prikaz greške, raspored prikaza svih stranica).
Rasporedi prikaza (layout) pomažu održavati konzistentnost izgleda unutar više prikaza u app. Obično se
koristi za definiranje zajedničkog predloška za app.
Povezivanje pojedinog prikaza s layoutom se radi automatski preko _ViewStart.cshtml prikaza koji u sebi sadrži
referencu na zadani layout. Razor mehanizam će izvršiti kod te datoteke prije ostalog koda unutar tog
direktorija što znači da se _ViewStart.cshtml izvršava prije prikaza koji je pozvan.
RenderBody() metoda u rasporedu prikaza se koristi za iscrtavanje sadržaja koji se povezuje s rasporedom
prikaza, a nije naveden u imenovanim sekcijama i obavezna je u rasporedu prikaza.
RenderSection(name, [required]) metoda u rasporedu prikaza omogućava iscrtavanje samo dijelova iz prikaza
koji se povezuje s rasporedom prikaza u kojem se koristi. Možete koristiti više sekcija.
Parcijalni prikazi se koriste ako postoji isti HTML sadržaj koji treba biti prikazan na više mjesta. Imenuju
znakom _ na početku imena. Ne mogu se prikazivati samostalno, već se prikazuju unutar nekog drugog
Viewa. Uključivanje parcijalnog prikaza u drugom prikazu radi se s @Html.Partial pomagačem (helper).
HTML pomagači (helpers) su metode koje se mogu pozvati na svojstvu Html (tipa klase HtmlHelper) u prikazu.
Namijenjeni su olakšavanju pisanja prikaza minimizacijom C# koda u HTMLu. Za rezultat generiraju HTML
kod. Postoje još i URL i AJAX pomagači.
Prema namjeni dijele se na: - akcijske pomagače - vezani uz akcije kontrolera (ActionLink)
- pomagače prikaza - olakšavaju prikazivanje podataka modela (DisplayFor)
- Begin Form pomagače - generiraju forme (BeginForm Method)
- pomagače za editing - stvaraju polja za unos podataka (EditorFor)
- validacijske pomagače - po pravilima modela stvaraju JS kod za validaciju
(ValidationSummary)
Responzivni dizajn je inteligentno prilagođavanje prikazanog sadržaja različitim dimenzijama ekrana. Podržan
je u svim verzijama ASP.NET MVCa kroz Bootstrap framework.
Bootstrap je web frontend framework, tj. okružje za razvoj sučelja web app prema korisniku, napisan u CSSu i
JavaScriptu. Prednosti su responzivni dizajn, podrška teme prikaza i gotove komponente.
Bundling je mehanizam koji grupira više datoteka u zajedničku kolekciju ukoliko se radi o datotekama
povezanih funkcionalnosti (obično JS ili CSS) koje će se onda dohvaćati preko samo jednog HTTP zahtjeva od
klijenta kao jedinstveni resurs. Ovo je prednost jer klijent šalje samo jedan HTTP zahtjev čime se ubrzava
dohvaćanje sadržaja s web servera.