ASP .NET Core hands-on
-
Upload
ugidotnet -
Category
Technology
-
view
66 -
download
0
Transcript of ASP .NET Core hands-on
ASP.NETCorehands-onAndreaSaltarelloEnosRecanati
Prossimafermata:AppDay(24/2/2017)
• HTTP,ovvero"Nonavraialcunprotocolloaldifuoridime"(45min)-Speaker:AndreaSaltarello• Xamarin (60min)- Speaker:CorradoCavalli• Implementareilbackend conASP.NET(45min)- Speaker:AndreaSaltarello• Azure API(60min)- Speaker:LorenzoBarbieri• Thenext phase ofUX:conversational (45min)- Speaker:ElisabettaSchiatti• AppePrivacy:aspettispecificidellanormativa,trapresentee(prossimo)futuro(45min)- Speaker:AndreaPalumbo• Moretocome,staytunedJ
Talk.About();
• AnatomiadiunaapplicazioneASP.NETCore• ArchitetturadiASP.NETCore• MVCCore
ASP.NETCoreataglance
LaDev story:glieditorPersviluppare,abbiamovarieopzioni:
1. Supportoper:Sublime,Atom,Emacs,VimeBrackets2. Solosupporto xproj3. macOS:solocsproj;Windows:xproj perv2015,csproj perv2017
Linux macOS WindowsCLI+OmniSharp¹ solo.NETCore solo.NETCore solo.NETCore
Xamarin Studio solo.NETCore²
VisualStudioCode solo.NETCore solo.NETCore X
VisualStudio³ solo.NETCore X
LaDevstory:ildeploy
• (ASP).NETCoreèdistribuitoindueversioni:• LTS:supportateper3anni*o*per1annodopoilrilasciodellaLTSsuccessiva.L’attualeversioneLTSèla1.0.3
• Current:supportate,all’internodellacorrispettivaLTS,per3mesiapartiredalrilasciodella«current»successiva
Sonotuttedisponibiliqui.
• .NETCoreonly:• ildeploy permettesiadiusarel’installazionedelFXalivellodimacchina,siaunalocaleallaapplicazione
• nonesistonodroprelease,tutteleversionisonoinstallateside-by-side
[https://www.microsoft.com/net/core/support ]
AnatomiadiunaapplicazioneASP.NETCore
UnaapplicazioneASP.NETCore:• Può«girare»siasu.NETCoresiasu.NETFramework• Limitatamentea.NETCore,puòesseresviluppatasu:Linux,macOS,Windows• Èuna«normale»applicazioneconsole“ospitata”daunservereconfiguratamediantecodice
demoDevStory
Una«normale»applicazioneConsole…
…ospitatadaunserver…
• Sonoi«container»:ASP.NETCorefornisceiseguenti:• Kestrel(managed,xplat)• WebListener(httpsys,1.1+)
…econfiguratamediantecodice
Perconfigurareunaapplicazioneusiamo:• project.json perspecificarelereference,daVS2017/MacGAinpoiyeolde csproj• Startup.cs (oomologa)perconfigurareimiddleware
1. ConfigureServices()2. Configure()
• [OPT] appsettings.json per«informazioni»diconfigurazione• ASPNETCORE_ENVIRONMENT
Middleware
Sonofunzioni che:• implementanoladelegateRequestDelegate• vengonoaggiuntiallarequest pipelinediASP.NETCoremedianteimetodiMap*,Run eUse*diIApplicationBuilder
publicvoid Configure(IApplicationBuilder app,IHostingEnvironment env,ILoggerFactory loggerFactory){
app.Run(async (context)=>{
awaitcontext.Response.WriteAsync("HelloWorld!");});
}
demoMiddleware
Middleware
ASP.NETCorefornisceoutoftheboxalcunimiddleware,traiquali:• Identity• MVC• ResponseCaching (1.1+)• ResponseCompression (1.1+)• Rewrite (1.1+)
Perconvenzione,vengonoregistrati inConfigureServices edattivati inConfigure
[https://blogs.msdn.microsoft.com/webdev/2016/11/16/announcing-asp-net-core-1-1/ ]
MVC
ASP.NETMVCCore
E’ilmiddleware fornitooutoftheboxdaASP.NETCoreperimplementareapplicazionibasatesullavarianteModel2 delpatternMVC(quelladiStruts,Rails,Monorail,…)
APImoltosimileaMVC5diASP.NET4,maconalcunedifferenzestrutturali:• pipelineMVC-WebAPI integrata• supportoacontrollerPOCO• dependency Resolver InjectionPervederloinazione,guardarequi:http://www.ugidotnet.org/video/189329326/NET05--ASP-NET-MVC-Core-1
Talk.About();
• Routing• Navigation Flow
• MVC• Controller• Razor
• Dependency Injection
P.S.:demoscaricabiliqui:http://nsk.codeplex.com
AnatomiadiunURL
DatounoURL,ades:
http://www.sito.net/Customer/Detail/1
Ilrouting engine diASP.NET:• mappaleroute versoaction/file• effettuailparsing delloURLerecuperaiparametri• Puòessereconfiguratopersupportareroute personalizzate
IntroduzioneaASP.NETMVC(1/4)
http://www.sito.net/Customer/Detail/1
IntroduzioneaASP.NETMVC(2/4)
http://www.sito.net/Customer/Detail/1
IntroduzioneaASP.NETMVC(3/4)
http://www.sito.net/Customer/Detail/1
IntroduzioneaASP.NETMVC(4/4)
http://www.sito.net/Customer/Detail/1
Controller
• Unasingola,edopzionale,classebase:Microsoft.AspNet.Mvc.Controller• SonoActiontuttiimetodipubblicidiuncontroller.• Serestituiscono:• IActionResult,il“giro”èquellodiMVC• !=IActionResult,il“giro”èquellodiWebAPI (quindicontentnegotiation oProducesAttribute)
• Secostruiamodeglihelper,decoriamoliconNonActionAttribute
NavigationFlow
Leaction restituisconounvaloreditipoIActionResult.“Pragmapolimorficamente”parlando:
• ViewResult.Restituito dalmetodo View• PartialViewResult.Restituito dalmetodo PartialView• ContentResult.Restituito dalmetodo Content• JsonResult.Restituito dalmetodo Json• EmptyResult.Restituito dalle actionche vogliano restituire “null”• RedirectToRouteResult.Restituito dai metodi RedirectToAction eRedirectToRoute• RedirectResult.Restituito dalmetodo Redirect• YourOwnPersonalResult (semi-citJ);esempi qui equi
demoJSONCustomActionResult
Razor view engine
Razor èilmotoredirendering delleview,che:• Sonofileconestensione.cshtml• ContengonounmixdimarkupecodiceC#• Possonoesseretipizzate
Unaview puòesserevisualizzata:• indipendentemente• all’internodiunlayout• all’internodiun’altraview (Partial View,Editor/Displaytemplate)
All’internodiunaview abbiamoaccessoagliHTMLhelper method
demoLayout
POCOController
Nessunaclassebase;puòessereconvenientedichiarareedattivare:
• IUrlHelperFactory• IActionContextAccessor• publicActionContext ActionContext {get;set;}*• publicViewDataDictionary ViewData {get;set;}*
*Soloconcontainerditerzeparti:• https://github.com/aspnet/Mvc/issues/2151#issuecomment-104541719• https://github.com/aspnet/Announcements/issues/28
demoPOCOController
TagHelper
Sonolaforma“accatiemmellizzata”degliHelper method:• PackageMicrosoft.AspNet.Mvc.TagHelpers (ocmq contenenteclassiderivatedaTagHelper)• @addTagHelper AssemblyName (es:"Microsoft.AspNet.Mvc.TagHelpers")• @removeTagHelper• @tagHelperPrefix• !
PossiamocostruireTagHelper customereditandolaclasseTagHelper
demo_ViewImports.cshtmlCustomTagHelperEnvironment
Display/Editortemplates
IDisplay/Editortemplate:• Permettonodi“insegnare”aRazor comerenderizzare unDataType• Sonopartial view ilcuinomefilecoincideconquellodeldatatype(es:DateTime.cshtml)
demoController(Logger)View (EditorTemplate)
View Component
IView Component:• Sostituisconolechild action diMVC5esonosimiliallepartial view,macompostida:• Una(opiù)view• Un“light”controller
• Siusanocomeglihelper method o,dallaversione1.1diMVCCore,conunasintassitaghelper like• Possonoesseredistribuitiinunalibreriaesternaalprogetto:https://channel9.msdn.com/Series/aspnetmonsters/ASPNET-Monsters-Episode-52-Loading-View-Components-from-a-Class-Library
demoViewComponent
Aree
demoAree
DependencyInjection
• SupportatainController,Filtri,View sostanzialmente*dappertutto*• RegistrareitipiinConfigureServices,indicandoloscope:
• AddInstance• AddSingleton• AddScoped• AddTransient
• Esporreledipendenze• Ctor (Controller,ViewComponent)• Parametriaction:FromServicesAttribute• View:@inject
• E’possibilesostituireilcontainerbuilt inconunoditerzeparti:https://github.com/aspnet/DependencyInjection/blob/dev/README.md
grazie!Feedback:https://it.surveymonkey.com/r/B82FF5RMaterialesu:http://slideshare.net/ugidotnet
Demo
• NSK:http://nsk.codeplex.com• Merp:http://www.github.com/mastreeno/merp