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`;
}