Upload
others
View
38
Download
0
Embed Size (px)
Citation preview
4/12/2019
1
Kevin Griffin
Upgrading Your ASP.NET 4.0+ Skills to ASP.NET Core
2SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Welcome
▪ Microsoft MVP
▪ Host of the 2 Frugal Dudes Podcast
▪ Founder of RevolutionConf
twitter.com/1kevgriff
kevgriffin.com
swiftkick.in
Kevin Griffin
Owner, Swift Kick
4/12/2019
2
3SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Let’s Keep in Touch!
▪ I’m always working on new stuff around ASP.NET – and I’d love to keep you up to date.
▪ Free webinars, blog posts, courses, etc
▪ Sign up + free gift!
https://go.swiftkick.in/codestock2019
(all lowercase)
4SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
A Couple Assumptions
▪ You are heavily invested in ASP.NET Classic.
▪ .NET 3.5 or higher
▪ You’ve realized the future is .NET Core
▪ With the upcoming release of .NET Core 3.0, Microsoft is recommending all greenfield development is done on Core
▪ .NET Framework will be supported long term – but not compatible with new features
4/12/2019
3
Goodbye IIS, Hello Kestrel
6SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Goodbye IIS, Hello Kestrel!
ASP.NET 4.5
• ASP.NET applications were bootstrapped by an IIS handler.
• IIS was responsible for processing incoming request, and handing them off to ASP.NET
• Stuck on Windows!
ASP.NET Core
• Kestrel is the cross-platform web server built for ASP.NET Core applications.
• Processes requests directly
• Runs on Linux, Windows, Mac – or any platform that supports the .NET Standard.
4/12/2019
4
7SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Bootstrapping an ASP.NET Core Application
8SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
CreateDefaultBuilder(…)
▪ The method does a lot of work
▪ Sets working directories
▪ Loads configuration
▪ Environment variables
▪ Appsettings.json
▪ Command line
▪ Configure logging
▪ Configure Kestrel (web server)
▪ Configure IIS integration
4/12/2019
5
Demo: dotnet new web
Goodbye IIS, Hello Kestrel
Dependency Injection
4/12/2019
6
11SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Dependency Injection
ASP.NET 4.5
• Relied on external libraries to provide Dependency Injection and Inversion of Control (IOC) containers.
• Other dependencies had to be configured to use your DI solutions.
ASP.NET Core
• Baked in at the framework level, no external libraries required!
• Supported out-of-the-box by all ASP.NET Core features. Ex: SignalR, Identity, etc.
• CI works outside of ASP.NET Core application.
12SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Dependency Injection
4/12/2019
7
13SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Dependency Injection
14SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Dependency Injection
4/12/2019
8
15SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Dependency Injection
16SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Dependency Injection
4/12/2019
9
17SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Dependency Injection
▪ AddSingleton()
▪ Creates one instance for the lifetime of the application.
▪ AddTransient()
▪ Create one instance per instantiation.
▪ Example: You might want to use IUserRepository in multiple classes in ONE request. Each class gets its own unique instance of FakeUserRepository.
▪ AddScoped()
▪ Creates one instance per Request.
▪ Example: You might want to use IUserRepository in multiple classes in ONE request. Each class gets the same instance for the request.
Goodbye IIS, Hello Kestrel
Dependency Injection
Routing and Pipelines
4/12/2019
10
19SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Routing and Pipelines
20SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Routing and Pipelines
4/12/2019
11
21SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
MVC Routing Options
▪ Attribute-based Routing
▪ Default preference
▪ Use the [Route] attribute to decorate Actions with the request path the Action should handle.
▪ Use shortcuts such as [HttpGet], [HttpPost], etc to save on attributes!
22SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
MVC Routing Options
▪ Route prefixes can still be defined on the Controller
4/12/2019
12
23SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
MVC Routing Options
▪ If you’re used to “convention-based” routing, that is still possible by manually configuring the UseMvc() method.
▪ PERSONAL OPINION: Please don’t do this.
▪ If you’d like to use WebApi-style controllers and actions (verb-based), that’s doable too!
Goodbye IIS, Hello Kestrel
Dependency Injection
Routing and Pipelines
MVC vs WebAPI
4/12/2019
13
25SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
MVC vs WebApi
▪ In ASP.NET Core, there is no separation between Controller and ApiController.
▪ A controller is a controller.
▪ Documentation still defined MVC and WebAPI separately – but they both derive from Controller.
26SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Action Return Types
▪ IActionResult
▪ Abstracted response.
▪ Several built in types:
▪ View()
▪ Ok()
▪ BadRequest()
▪ Forbid();
▪ Unauthorized();
▪ StatusCode();
▪ And more!
4/12/2019
14
27SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Action Return Types
▪ Specific Type
▪ Like WebAPI, the controller will automatically convert the response into the appropriate format (JSON) and return it.
28SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Action Return Types
▪ ActionResult<T>
▪ Best of both worlds!
▪ Return a specific type OR an ActionResultmessage
4/12/2019
15
Goodbye IIS, Hello Kestrel
Dependency Injection
Routing and Pipelines
MVC vs WebAPI
Other Goodies
30SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Static files and wwwroot
▪ In IIS, wwwroot is the default location for your web application.
▪ In ASP.NET Core, wwwroot is the “public” folder for you application.
4/12/2019
16
31SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Integration with SPA CLIs
▪ A growing number of developers are using CLIs for Vue, React, and Angular for front-end and ASP.NET for backend.
▪ This makes development difficult with ASP.NET – since it wants to be everything to everyone.
▪ You can add a proxy into the pipeline to help with debugging locally!
32SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Razor Pages
▪ In ASP.NET 4.0+, working with Razor meant working with “MVC”
▪ Any pages built in Razor needed a corresponding Controller and Action.
▪ Razor Pages are single pages that provide the “good” parts of Razor without the ceremony of “MVC”.
4/12/2019
17
33SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Other Topics I Probably Don’t Have Time For
▪ Performance, performance, performance
▪ Custom Middleware
▪ Background/Hosted Services
▪ Health Checks
▪ Logger enhancements
34SLIDE |@1kevgriff - SOFTWARE TRAINING AND CONSULTING – [email protected]© 2019 Swift Kick
Thanks for attending!
▪ Microsoft MVP
▪ Host of the 2 Frugal Dudes Podcast
▪ Founder of RevolutionConf
twitter.com/1kevgriff
kevgriffin.com
swiftkick.in
Kevin Griffin
Owner, Swift Kick