1. Create a New Project
dotnet new mvc -n MyMvcApp // Create a new MVC project
2. Run the Application
dotnet run // Run the application
dotnet build // Build the project
dotnet publish -c Release // Publish the project for production
3. Controllers
public class MyController : Controller {
public IActionResult Index() {
return View();
}
}
4. Actions
public class MyController : Controller {
public IActionResult Index() {
return View();
}
[HttpPost]
public IActionResult Create(MyModel model) {
return RedirectToAction("Index");
}
}
5. Views
@model MyModel
<h1>@Model.Title</h1>
<p>@Model.Description</p>
6. Razor Syntax
@{
var name = "John Doe";
}
<h1>Hello, @name!</h1>
7. Model Binding
public class MyController : Controller {
[HttpPost]
public IActionResult Create([Bind("Name,Description")] MyModel model) {
return RedirectToAction("Index");
}
}
8. Validation
public class MyModel {
[Required]
public string Name { get; set; }
[Required]
public string Description { get; set; }
}
9. Routing
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
10. Areas
public class MyAreaRegistration : AreaRegistration {
public override string AreaName {
get { return "MyArea"; }
}
public override void RegisterArea(AreaRegistrationContext context) {
context.MapRoute(
"MyArea_default",
"MyArea/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional });
}
}
11. Layouts
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
12. Partial Views
@Html.Partial("_MyPartialView", model)
13. Child Actions
[ChildActionOnly]
public ActionResult MyChildAction() {
return PartialView("_MyPartialView", model);
}
14. Sections
@RenderSection("MySection", required: false)
15. Bundling and Minification
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/site.css"));
16. Authentication
[Authorize]
public class MyController : Controller {
public IActionResult Index() {
return View();
}
}
17. Authorization
[Authorize(Roles = "Admin")]
public class MyController : Controller {
public IActionResult Index() {
return View();
}
}
18. Custom Authorization
public class MyAuthorizeAttribute : AuthorizeAttribute {
protected override bool AuthorizeCore(HttpContextBase httpContext) {
// Custom authorization logic
return true;
}
}
19. Error Handling
[HandleError]
public class MyController : Controller {
public IActionResult Index() {
return View();
}
}
20. Custom Error Pages
<customErrors mode="On" defaultRedirect="~/Error">
<error statusCode="404" redirect="~/Error/NotFound" />
</customErrors>
21. Logging
public class MyController : Controller {
private readonly ILogger _logger;
public MyController(ILogger logger) {
_logger = logger;
}
public IActionResult Index() {
_logger.LogInformation("Index action executed");
return View();
}
}
22. Dependency Injection
public class MyController : Controller {
private readonly IMyService _myService;
public MyController(IMyService myService) {
_myService = myService;
}
}
23. ViewData and ViewBag
ViewData["Message"] = "Hello from ViewData!";
ViewBag.Message = "Hello from ViewBag!";
24. TempData
TempData["Message"] = "This is a temporary message.";
25. ModelState Validation
if (!ModelState.IsValid) {
return View(model);
}
26. Custom Model Binder
public class MyModelBinder : IModelBinder {
public Task BindModelAsync(ModelBindingContext bindingContext) {
// Custom binding logic
return Task.CompletedTask;
}
}
27. Action Filters
public class MyActionFilter : IActionFilter {
public void OnActionExecuting(ActionExecutingContext context) {
// Logic before action executes
}
public void OnActionExecuted(ActionExecutedContext context) {
// Logic after action executes
}
}
28. Result Filters
public class MyResultFilter : IResultFilter {
public void OnResultExecuting(ResultExecutingContext context) {
// Logic before result executes
}
public void OnResultExecuted(ResultExecutedContext context) {
// Logic after result executes
}
}
29. Exception Filters
public class MyExceptionFilter : IExceptionFilter {
public void OnException(ExceptionContext context) {
// Handle exception
}
}
30. Resource Filters
public class MyResourceFilter : IResourceFilter {
public void OnResourceExecuting(ResourceExecutingContext context) {
// Logic before resource executes
}
public void OnResourceExecuted(ResourceExecutedContext context) {
// Logic after resource executes
}
}
31. Global Filters
services.AddControllers(options => {
options.Filters.Add(new MyActionFilter());
});
32. Custom Error Pages
app.UseStatusCodePagesWithReExecute("/error/{0}");
33. Caching
services.AddResponseCaching();
app.UseResponseCaching();
34. Memory Cache
services.AddMemoryCache();
35. Distributed Cache
services.AddDistributedMemoryCache();
36. Session State
services.AddSession();
app.UseSession();
37. Cookie Policy
services.Configure<CookiePolicyOptions>(options => {
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
38. Anti-Forgery Tokens
services.AddAntiforgery(options => {
options.HeaderName = "X-XSRF-TOKEN";
});
39. HTTPS Redirection
app.UseHttpsRedirection();
40. HSTS (HTTP Strict Transport Security)
app.UseHsts();
41. Content Security Policy
app.UseCsp(options => {
options.DefaultSources(s => s.Self());
});
42. Rate Limiting
services.AddRateLimiter(options => {
options.AddPolicy("RateLimit", policy => {
policy.Limit = 100;
policy.Period = TimeSpan.FromMinutes(1);
});
});
43. Health Checks with Custom Checks
builder.Services.AddHealthChecks()
.AddCheck("MyCustomCheck", () => HealthCheckResult.Healthy());
44. API Documentation with Swagger
app.UseSwagger();
app.UseSwaggerUI(c => {
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});
45. Using View Components
public class MyViewComponent : ViewComponent {
public IViewComponentResult Invoke() {
return View();
}
}
46. Razor View Engine
@model MyModel
<h1>@Model.Title</h1>
<p>@Model.Description</p>
47. Partial Views
@Html.Partial("_MyPartialView", model)
48. Layouts
@{
Layout = "_Layout";
}
49. ViewBag and ViewData
ViewBag.Message = "Hello from ViewBag!";
ViewData["Message"] = "Hello from ViewData!";
50. TempData
TempData["Message"] = "This is a temporary message.";
51. ModelState Validation
if (!ModelState.IsValid) {
return View(model);
}
52. Custom Model Binder
public class MyModelBinder : IModelBinder {
public Task BindModelAsync(ModelBindingContext bindingContext) {
// Custom binding logic
return Task.CompletedTask;
}
}
53. Action Filters
public class MyActionFilter : IActionFilter {
public void OnActionExecuting(ActionExecutingContext context) {
// Logic before action executes
}
public void OnActionExecuted(ActionExecutedContext context) {
// Logic after action executes
}
}
54. Result Filters
public class MyResultFilter : IResultFilter {
public void OnResultExecuting(ResultExecutingContext context) {
// Logic before result executes
}
public void OnResultExecuted(ResultExecutedContext context) {
// Logic after result executes
}
}
55. Exception Filters
public class MyExceptionFilter : IExceptionFilter {
public void OnException(ExceptionContext context) {
// Handle exception
}
}
56. Resource Filters
public class MyResourceFilter : IResourceFilter {
public void OnResourceExecuting(ResourceExecutingContext context) {
// Logic before resource executes
}
public void OnResourceExecuted(ResourceExecutedContext context) {
// Logic after resource executes
}
}
57. Global Filters
services.AddControllers(options => {
options.Filters.Add(new MyActionFilter());
});
58. Custom Error Pages
app.UseStatusCodePagesWithReExecute("/error/{0}");
59. Caching
services.AddResponseCaching();
app.UseResponseCaching();
60. Memory Cache
services.AddMemoryCache();
61. Distributed Cache
services.AddDistributedMemoryCache();
62. Session State
services.AddSession();
app.UseSession();
63. Cookie Policy
services.Configure<CookiePolicyOptions>(options => {
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
64. Anti-Forgery Tokens
services.AddAntiforgery(options => {
options.HeaderName = "X-XSRF-TOKEN";
});
65. HTTPS Redirection
app.UseHttpsRedirection();
66. HSTS (HTTP Strict Transport Security)
app.UseHsts();
67. Content Security Policy
app.UseCsp(options => {
options.DefaultSources(s => s.Self());
});
68. Rate Limiting
services.AddRateLimiter(options => {
options.AddPolicy("RateLimit", policy => {
policy.Limit = 100;
policy.Period = TimeSpan.FromMinutes(1);
});
});
69. Health Checks with Custom Checks
builder.Services.AddHealthChecks()
.AddCheck("MyCustomCheck", () => HealthCheckResult.Healthy());
70. API Documentation with Swagger
app.UseSwagger();
app.UseSwaggerUI(c => {
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});
71. Using View Components
public class MyViewComponent : ViewComponent { public IViewComponentResult Invoke() { return View(); }}
72. Razor View Engine
@model MyModel
<h1>@Model.Title</h1>
<p>@Model.Description</p>
73. Partial Views
@Html.Partial("_MyPartialView", model)
74. Layouts
@{
Layout = "_Layout";
}
75. ViewBag and ViewData
ViewBag.Message = "Hello from ViewBag!";
ViewData["Message"] = "Hello from ViewData!";
76. TempData
TempData["Message"] = "This is a temporary message.";
77. ModelState Validation
if (!ModelState.IsValid) {
return View(model);
}
78. Custom Model Binder
public class MyModelBinder : IModelBinder {
public Task BindModelAsync(ModelBindingContext bindingContext) {
// Custom binding logic
return Task.CompletedTask;
}
}
79. Action Filters
public class MyActionFilter : IActionFilter {
public void OnActionExecuting(ActionExecutingContext context) {
// Logic before action executes
}
public void OnActionExecuted(ActionExecutedContext context) {
// Logic after action executes
}
}
80. Result Filters
public class MyResultFilter : IResultFilter {
public void OnResultExecuting(ResultExecutingContext context) {
// Logic before result executes
}
public void OnResultExecuted(ResultExecutedContext context) {
// Logic after result executes
}
}
81. Exception Filters
public class MyExceptionFilter : IExceptionFilter {
public void OnException(ExceptionContext context) {
// Handle exception
}
}
82. Resource Filters
public class MyResourceFilter : IResourceFilter {
public void OnResourceExecuting(ResourceExecutingContext context) {
// Logic before resource executes
}
public void OnResourceExecuted(ResourceExecutedContext context) {
// Logic after resource executes
}
}
83. Global Filters
services.AddControllers(options => {
options.Filters.Add(new MyActionFilter());
});
84. Custom Error Pages
app.UseStatusCodePagesWithReExecute("/error/{0}");
85. Caching
services.AddResponseCaching();
app.UseResponseCaching();
86. Memory Cache
services.AddMemoryCache();
87. Distributed Cache
services.AddDistributedMemoryCache();
88. Session State
services.AddSession();
app.UseSession();
89. Cookie Policy
services.Configure<CookiePolicyOptions>(options => {
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
90. Anti-Forgery Tokens
services.AddAntiforgery(options => {
options.HeaderName = "X-XSRF-TOKEN";
});
91. HTTPS Redirection
app.UseHttpsRedirection();
92. HSTS (HTTP Strict Transport Security)
app.UseHsts();
93. Content Security Policy
app.UseCsp(options => {
options.DefaultSources(s => s.Self());
});
94. Rate Limiting
services.AddRateLimiter(options => {
options.AddPolicy("RateLimit", policy => {
policy.Limit = 100;
policy.Period = TimeSpan.FromMinutes(1);
});
});
95. Health Checks with Custom Checks
builder.Services.AddHealthChecks()
.AddCheck("MyCustomCheck", () => HealthCheckResult.Healthy());
96. API Documentation with Swagger
app.UseSwagger ();
app.UseSwaggerUI(c => {
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});
97. Using View Components
public class MyViewComponent : ViewComponent {
public IViewComponentResult Invoke() {
return View();
}
}
98. Razor View Engine
@model MyModel
<h1>@Model.Title</h1>
<p>@Model.Description</p>
99. Partial Views
@Html.Partial("_MyPartialView", model)
100. Layouts
@{
Layout = "_Layout";
}