1<!DOCTYPE html> 2<!--[if IE 6]> 3<html id="ie6" lang="en-US"> 4<![endif]--> 5<!--[if IE 7]> 6<html id="ie7" lang="en-US"> 7<![endif]--> 8<!--[if IE 8]> 9<html id="ie8" lang="en-US"> 10<![endif]--> 11<!--[if !(IE 6) | !(IE 7) | !(IE 8) ]><!--> 12<html lang="en-US"> 13<!--<![endif]--> 14<head> 15 <meta charset="UTF-8" /> 16 17 18 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 19 <link rel="pingback" href="https://courses.code-maze.com/xmlrpc.php" /> 20 21 <!--[if lt IE 9]> 22
22<script src="https://courses.code-maze.com/wp-content/themes/Extra/scripts/ext/html5.js" type="text/javascript"></script>
22 23 <![endif]--> 24 25
25<script type="text/javascript"> 26 document.documentElement.className = 'js'; 27 </script>
27 28 29 <!-- Google tag (gtag.js) -->
vendor: 65 bytes, lines 29-30
29 30 <script async src="https://www.googletagmanager.com/gtag/js?id=
30G-3NXGERBSKL
vendor: 13 bytes, lines 30-31
30"></script> 31
31<script> 32
vendor: 137 bytes, lines 32-36
32window.dataLayer = window.dataLayer || []; 33 function gtag(){dataLayer.push(arguments);} 34 gtag('js', new Date()); 35 36 gtag('config', '
36G-3NXGERBSKL
vendor: 5 bytes, lines 36-37
36'); 37
37</script>
37 38 39 40
40<script> 41 !function(t,e){var o,n,p,r;e.__SV||(window.posthog && window.posthog.__loaded)||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="Mi Ri init Vi Gi Rr Wi Ji Bi capture calculateEventProperties tn register register_once register_for_session unregister unregister_for_session an getFeatureFlag getFeatureFlagPayload getFeatureFlagResult isFeatureEnabled reloadFeatureFlags updateFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSurveysLoaded onSessionId getSurveys getActiveMatchingSurveys renderSurvey displaySurvey cancelPendingSurvey canRenderSurvey canRenderSurveyAsync un identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset setIdentity clearIdentity get_distinct_id getGroups get_session_id get_session_replay_url alias set_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException addExceptionStep captureLog startExceptionAutocapture stopExceptionAutocapture loadToolbar get_property getSessionProperty nn Xi createPersonProfile setInternalOrTestUser sn Hi cn opt_in_capturing opt_out_capturing has_opted_in_capturing has_opted_out_capturing get_explicit_consent_status is_capturing clear_opt_in_out_capturing Ki debug Lr rn getPageViewId captureTraceFeedback captureTraceMetric Di".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]); 42 posthog.init('phc_pYM44quiQ6uswXphwPTWSQKHg3wynRzZk9doseJmU4HA', { 43 api_host: 'https://t.code-maze.com', // your managed reverse proxy domain 44 ui_host: 'https://eu.posthog.com', // necessary because you're using a proxy, this way links will point back to PostHog properly 45 defaults: '2026-01-30', 46 person_profiles: 'identified_only', // or 'always' to create profiles for anonymous users as well 47 }) 48 </script>
48 49 50
51<script> 52 posthog.reset(); 53</script>
53 54 55 56 57
57<script>(function(){try{ 58var k="cmz-theme",r=document.documentElement,s=null; 59try{s=localStorage.getItem(k);}catch(e){} 60if(s){r.setAttribute('data-cmz-used','1');} 61var t=s,q=location.search; 62if(q.indexOf('cmz-theme=dark')>-1){t='dark';} 63else if(q.indexOf('cmz-theme=light')>-1){t='light';} 64if(t==='dark'){r.setAttribute('data-theme','dark');} 65}catch(e){}})();</script>
65 66<meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' />
67<script id="cmz-attr">(function(){try{ 68if(/(^|; )cmz_attr=/.test(document.cookie))return; 69var q=new URLSearchParams(location.search),c=q.get('utm_campaign'),s=q.get('utm_source'); 70if(!c&&!s)return; 71var clip=function(v){return (v||'').slice(0,80);}; 72var v={c:clip(c),s:clip(s),m:clip(q.get('utm_medium')),t:clip(q.get('utm_content')),l:clip(location.pathname),d:new Date().toISOString().slice(0,10)}; 73var exp=new Date(Date.now()+90*864e5).toUTCString(); 74document.cookie='cmz_attr='+encodeURIComponent(JSON.stringify(v))+'; expires='+exp+'; path=/; SameSite=Lax'+(location.protocol==='https:'?'; Secure':''); 75}catch(e){}})();</script>
75 76 77 <!-- This site is optimized with the Yoast SEO plugin v28.1 - https://yoast.com/product/yoast-seo-wordpress/ --> 78 <title>Ultimate ASP.NET Core Web API - Online Text Course</title> 79 <meta name="description" content="The Ultimate ASP.NET Core Web API online text course covers critical aspects of Web API development, from scratch to advanced topics." /> 80 <link rel="canonical" href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/" /> 81 <meta property="og:locale" content="en_US" /> 82 <meta property="og:type" content="article" /> 83 <meta property="og:title" content="Ultimate ASP.NET Core Web API - Online Text Course" /> 84 <meta property="og:description" content="The Ultimate ASP.NET Core Web API online text course covers critical aspects of Web API development, from scratch to advanced topics." /> 85 <meta property="og:url" content="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/" /> 86 <meta property="og:site_name" content="Code Maze" /> 87 <meta property="article:modified_time" content="2026-09-12T13:24:10+00:00" /> 88 <meta property="og:image" content="https://courses.code-maze.com/wp-content/uploads/2026/01/Ultimate-ASP.NET-Core-Web-API-Featured.webp" /> 89 <meta property="og:image:width" content="848" /> 90 <meta property="og:image:height" content="481" /> 91 <meta property="og:image:type" content="image/webp" /> 92 <meta name="twitter:card" content="summary_large_image" /> 93 <meta name="twitter:site" content="@CodeMazeBlog" /> 94 <meta name="twitter:label1" content="Est. reading time" /> 95 <meta name="twitter:data1" content="2 minutes" /> 96
96<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/","url":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/","name":"Ultimate ASP.NET Core Web API - Online Text Course","isPartOf":{"@id":"https:\/\/courses.code-maze.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/#primaryimage"},"image":{"@id":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/#primaryimage"},"thumbnailUrl":"https:\/\/courses.code-maze.com\/wp-content\/uploads\/2026\/01\/Ultimate-ASP.NET-Core-Web-API-Featured.webp","datePublished":"2024-11-24T11:23:30+00:00","dateModified":"2026-09-12T13:24:10+00:00","description":"The Ultimate ASP.NET Core Web API online text course covers critical aspects of Web API development, from scratch to advanced topics.","breadcrumb":{"@id":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/#primaryimage","url":"https:\/\/courses.code-maze.com\/wp-content\/uploads\/2026\/01\/Ultimate-ASP.NET-Core-Web-API-Featured.webp","contentUrl":"https:\/\/courses.code-maze.com\/wp-content\/uploads\/2026\/01\/Ultimate-ASP.NET-Core-Web-API-Featured.webp","width":848,"height":481},{"@type":"BreadcrumbList","@id":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/courses.code-maze.com\/"},{"@type":"ListItem","position":2,"name":"Courses","item":"https:\/\/courses.code-maze.com\/courses\/"},{"@type":"ListItem","position":3,"name":"Ultimate ASP.NET Core Web API"}]},{"@type":"WebSite","@id":"https:\/\/courses.code-maze.com\/#website","url":"https:\/\/courses.code-maze.com\/","name":"Code Maze","description":"Learn. Code. Succeed.","publisher":{"@id":"https:\/\/courses.code-maze.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/courses.code-maze.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/courses.code-maze.com\/#organization","name":"Code Maze","url":"https:\/\/courses.code-maze.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/courses.code-maze.com\/#\/schema\/logo\/image\/","url":"https:\/\/code-maze.com\/wp-content\/uploads\/2020\/01\/Code-Maze-Only-Logo-Transparent-HRez.png","contentUrl":"https:\/\/code-maze.com\/wp-content\/uploads\/2020\/01\/Code-Maze-Only-Logo-Transparent-HRez.png","width":3511,"height":3510,"caption":"Code Maze"},"image":{"@id":"https:\/\/courses.code-maze.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/CodeMazeBlog"]},{"@type":"Course","@id":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/#course","name":"Ultimate ASP.NET Core Web API","description":"The Ultimate ASP.NET Core Web API online text course covers critical aspects of Web API development, from scratch to advanced topics.","url":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/","provider":{"@type":"Organization","@id":"https:\/\/courses.code-maze.com\/#organization","name":"Code Maze","url":"https:\/\/courses.code-maze.com\/"},"mainEntityOfPage":{"@id":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/#webpage"},"educationalLevel":"Intermediate","offers":{"@type":"Offer","price":"97.00","priceCurrency":"USD","availability":"https:\/\/schema.org\/InStock","category":"Paid","url":"https:\/\/courses.code-maze.com\/courses\/ultimate-aspnet-core-webapi\/"},"hasCourseInstance":{"@type":"CourseInstance","courseMode":"Online","courseWorkload":"PT8H15M"},"aggregateRating":{"@type":"AggregateRating","ratingValue":"4.93","ratingCount":362,"bestRating":"5","worstRating":"1"}}]}</script>
96 97 <!-- / Yoast SEO plugin. --> 98 99 100<link rel='dns-prefetch' href='//courses.code-maze.com' /> 101 102<link rel="alternate" type="application/rss+xml" title="Code Maze » Feed" href="https://courses.code-maze.com/feed/" /> 103<link rel="alternate" type="application/rss+xml" title="Code Maze » Comments Feed" href="https://courses.code-maze.com/comments/feed/" /> 104<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://courses.code-maze.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fcourses.code-maze.com%2Fcourses%2Fultimate-aspnet-core-webapi%2F" /> 105<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://courses.code-maze.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fcourses.code-maze.com%2Fcourses%2Fultimate-aspnet-core-webapi%2F&format=xml" /> 106<meta content="Extra v.4.9.7" name="generator"/> <style id="content-control-block-styles"> 107 @media (max-width: 640px) { 108 .cc-hide-on-mobile { 109 display: none !important; 110 } 111} 112@media (min-width: 641px) and (max-width: 920px) { 113 .cc-hide-on-tablet { 114 display: none !important; 115 } 116} 117@media (min-width: 921px) and (max-width: 1440px) { 118 .cc-hide-on-desktop { 119 display: none !important; 120 } 121} </style> 122 <style id="wp-img-auto-sizes-contain-inline-css"> 123img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 124/*# sourceURL=wp-img-auto-sizes-contain-inline-css */ 125</style> 126<style id="classic-theme-styles-inline-css"> 127/*! This file is auto-generated */ 128.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} 129/*# sourceURL=/wp-includes/css/classic-themes.min.css */ 130</style> 131 132<link rel='stylesheet' id='wc-blocks-style-css' href='https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks.css?ver=wc-9.3.6' media='all' /> 133 134<link rel='stylesheet' id='content-control-block-styles-css' href='https://courses.code-maze.com/wp-content/plugins/content-control/dist/style-block-editor.css?ver=2.6.5' media='all' /> 135<style id="global-styles-inline-css"> 136:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);
136--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--font-family--inter: "Inter", sans-serif;--wp--preset--font-family--cardo: Cardo;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
136.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-inter-font-family{font-family: var(--wp--preset--font-family--inter) !important;}.has-cardo-font-family{font-family: var(--wp--preset--font-family--cardo) !important;} 137/*# sourceURL=global-styles-inline-css */ 138</style> 139 140<link rel='stylesheet' id='tutor-icon-css' href='https://courses.code-maze.com/wp-content/plugins/tutor/assets/css/tutor-icon.min.css?ver=4.0.4' media='all' /> 141<link rel='stylesheet' id='tutor-css' href='https://courses.code-maze.com/wp-content/plugins/tutor/assets/css/tutor.min.css?ver=4.0.4' media='all' /> 142<link rel='stylesheet' id='tutor-plyr-css' href='https://courses.code-maze.com/wp-content/plugins/tutor/assets/lib/plyr/plyr.css?ver=4.0.4' media='all' /> 143<link rel='stylesheet' id='tutor-frontend-css' href='https://courses.code-maze.com/wp-content/plugins/tutor/assets/css/tutor-front.min.css?ver=4.0.4' media='all' /> 144<style id="tutor-frontend-inline-css"> 145:root{--tutor-color-primary:#239371;--tutor-color-primary-rgb:35, 147, 113;--tutor-color-primary-hover:#38bd9b;--tutor-color-primary-hover-rgb:56, 189, 155;--tutor-body-color:#212327;--tutor-body-color-rgb:33, 35, 39;--tutor-border-color:#E3E5EB;--tutor-border-color-rgb:227, 229, 235;--tutor-color-gray:#CDCFD5;--tutor-color-gray-rgb:205, 207, 213;} 146/*# sourceURL=tutor-frontend-inline-css */ 147</style> 148<link rel='stylesheet' id='tutor-prism-css-css' href='https://courses.code-maze.com/wp-content/plugins/tutor-pro/assets/lib/codesample/prism.css?ver=4.0.4' media='all' /> 149<link rel='stylesheet' id='tutor-pro-course-details-css' href='https://courses.code-maze.com/wp-content/plugins/tutor-pro/assets/css/course-details.css?ver=4.0.4' media='all' /> 150<link rel='stylesheet' id='tutor-pro-front-css' href='https://courses.code-maze.com/wp-content/plugins/tutor-pro/assets/css/front.css?ver=4.0.4' media='all' /> 151<link rel='stylesheet' id='tutor-course-bundle-frontend-css' href='https://courses.code-maze.com/wp-content/plugins/tutor-pro/addons/course-bundle/assets/css/frontend.css?ver=4.0.4' media='all' /> 152<link rel='stylesheet' id='enrollment-frontend-css-css' href='https://courses.code-maze.com/wp-content/plugins/tutor-pro/addons/enrollments/assets/css/enroll.css?ver=4.0.4' media='all' /> 153<link rel='stylesheet' id='woocommerce-layout-css' href='https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/css/woocommerce-layout.css?ver=9.3.6' media='all' /> 154<link rel='stylesheet' id='woocommerce-smallscreen-css' href='https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/css/woocommerce-smallscreen.css?ver=9.3.6' media='only screen and (max-width: 768px)' /> 155<link rel='stylesheet' id='woocommerce-general-css' href='https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/css/woocommerce.css?ver=9.3.6' media='all' /> 156<style id="woocommerce-general-inline-css"> 157.lemon-squeezy-direct-checkout { 158 background: #7047ec !important; 159 color: #ffffff !important; 160 border: none !important; 161 padding: 12px 24px !important; 162 font-size: 16px !important; 163 border-radius: 4px !important; 164 cursor: pointer !important; 165 text-decoration: none !important; 166 display: inline-flex !important;
167 align-items: center !important; 168 justify-content: center !important; 169 margin: 10px 0 !important; 170 transition: background-color 0.3s ease !important; 171 } 172 .lemon-squeezy-direct-checkout:hover { 173 background: #7e59ed !important; 174 color: #ffffff !important; 175 } 176 .lemon-squeezy-direct-checkout:disabled { 177 opacity: 0.6 !important; 178 cursor: not-allowed !important; 179 } 180 .lemon-squeezy-button-wrapper { 181 margin: 15px 0 !important; 182 } 183 /* Style Pay What You Want price display */ 184 .lemon-squeezy-pwyw-price { 185 color: #666 !important; 186 font-style: italic !important; 187 font-size: 1.1em !important; 188 font-weight: 500 !important; 189 } 190 /* Icon color handling based on text color */ 191 192 .lemon-squeezy-button-icon { 193 filter: brightness(0) invert(1); /* Make icon white */ 194 } 195 196 /* My Account order actions customization */ 197 .woocommerce-MyAccount-orders .woocommerce-button.processing { 198 background: #6c757d !important; 199 color: white !important; 200 cursor: default !important; 201 pointer-events: none !important; 202 } 203 .woocommerce-MyAccount-orders .woocommerce-button.manage_subscription { 204 background: #7047ec !important; 205 color: #ffffff !important; 206 } 207 .woocommerce-MyAccount-orders .woocommerce-button.manage_subscription:hover { 208 background: #7e59ed !important; 209 } 210/*# sourceURL=woocommerce-general-inline-css */ 211</style> 212<style id="woocommerce-inline-inline-css"> 213.woocommerce form .form-row .required { visibility: visible; } 214/*# sourceURL=woocommerce-inline-inline-css */ 215</style> 216<link rel='stylesheet' id='hide-admin-bar-based-on-user-roles-css' href='https://courses.code-maze.com/wp-content/plugins/hide-admin-bar-based-on-user-roles/public/css/hide-admin-bar-based-on-user-roles-public.css?ver=7.2.4' media='all' /> 217<link rel='stylesheet' id='extra-fonts-css' href='//courses.code-maze.com/wp-content/uploads/omgf/extra-fonts/extra-fonts.css?ver=1769342455' media='all' /> 218<link rel='stylesheet' id='extra-style-css' href='https://courses.code-maze.com/wp-content/themes/Extra/style.css?ver=4.9.7' media='all' /> 219<link rel='stylesheet' id='fancybox-css' href='https://courses.code-maze.com/wp-content/plugins/easy-fancybox/fancybox/1.5.4/jquery.fancybox.css?ver=1790926221' media='screen' /> 220<link rel='stylesheet' id='cmz-dark-mode-css' href='https://courses.code-maze.com/wp-content/mu-plugins/cmz-dark-mode/dark-mode.css?ver=1790173506' media='screen' /> 221<link rel='stylesheet' id='cmz-dark-mode-images-css' href='https://courses.code-maze.com/wp-content/mu-plugins/cmz-dark-mode/dark-mode-images.css?ver=1786298694' media='screen' /> 222<link rel='stylesheet' id='cmz-overrides-css' href='https://courses.code-maze.com/wp-content/mu-plugins/cmz-overrides/overrides.css?ver=1790629255' media='all' /> 223<link rel='stylesheet' id='enlighterjs-css' href='https://courses.code-maze.com/wp-content/plugins/enlighter/cache/enlighterjs.min.css?ver=QIGroSBnr%2BtDXuU' media='all' /> 224<style id="cmz-rating-count-inline-css"> 225/* 1. Loop / archive cards: the "(35)" after the average. */ .tutor-course-ratings .tutor-ratings-count{display:none !important;} /* 2. Course detail header: the "(35 Ratings)" beside the average. */ .tutor-course-details-ratings .tutor-ratings-count{display:none !important;} /* 3. Reviews tab: "Total 35 Ratings". */ .tutor-total-rating-count{display:none !important;} /* 4. Reviews tab: per-star "N Ratings" labels. Drop the column so the progress bar reclaims the space rather than leaving a gap. */ .tutor-review-summary-rating .tutor-col-4{display:none !important;} 226/*# sourceURL=cmz-rating-count-inline-css */ 227</style>
228<script id="jquery-core-js" src="https://courses.code-maze.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
vendor: 1 bytes, line 228
228
229<script id="jquery-migrate-js" src="https://courses.code-maze.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1"></script>
vendor: 1 bytes, line 229
229
230<script data-wp-strategy="defer" defer id="jquery-blockui-js" src="https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.9.3.6"></script>
vendor: 1 bytes, line 230
230
231<script data-wp-strategy="defer" defer id="js-cookie-js" src="https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.9.3.6"></script>
vendor: 1 bytes, line 231
231
232<script id="woocommerce-js-extra"> 233var woocommerce_params = {"ajax_url":"/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%"}; 234//# sourceURL=woocommerce-js-extra 235</script>
vendor: 1 bytes, line 235
235
236<script data-wp-strategy="defer" defer id="woocommerce-js" src="https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=9.3.6"></script>
vendor: 1 bytes, line 236
236
237<script id="hide-admin-bar-based-on-user-roles-js" src="https://courses.code-maze.com/wp-content/plugins/hide-admin-bar-based-on-user-roles/public/js/hide-admin-bar-based-on-user-roles-public.js?ver=7.2.4"></script>
237 238<link rel="https://api.w.org/" href="https://courses.code-maze.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://courses.code-maze.com/wp-json/wp/v2/courses/75594" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://courses.code-maze.com/xmlrpc.php?rsd" /> 239<meta name="generator" content="WordPress 7.1" /> 240<meta name="generator" content="TutorLMS 4.0.4" /> 241<meta name="generator" content="WooCommerce 9.3.6" /> 242<link rel='shortlink' href='https://courses.code-maze.com/?p=75594' /> 243<style> 244 .cf-turnstile-wrap{overflow:hidden} 245 .cf-turnstile iframe{max-width:100%} 246 #login .cf-turnstile{transform:scale(.9);transform-origin:0 0} 247 .woocommerce-form .cf-turnstile-wrap,.tutor-login-form-wrapper .cf-turnstile-wrap{display:flex;justify-content:center} 248 .cf-turnstile-wrap{transition:opacity .4s ease,max-height .4s ease .2s;max-height:120px} 249 .cf-turnstile-wrap.cmz-ts-done{opacity:0;max-height:0;padding:0!important} 250 </style> <style> 251 .tutor-course-retake-button.tutor-btn-outline-primary, 252 button[name="complete_course_btn"].tutor-btn-outline-primary { 253 background-color: rgb(35,147,113) !important; 254 border-color: rgb(35,147,113) !important; 255 color: #fff !important; 256 } 257 .tutor-course-retake-button.tutor-btn-outline-primary:hover, 258 button[name="complete_course_btn"].tutor-btn-outline-primary:hover { 259 background-color: rgb(28,120,92) !important; 260 border-color: rgb(28,120,92) !important; 261 color: #fff !important; 262 } 263 :root[data-theme="dark"] .tutor-course-retake-button.tutor-btn-outline-primary, 264 :root[data-theme="dark"] button[name="complete_course_btn"].tutor-btn-outline-primary { 265 background-color: rgb(35,147,113) !important; 266 border-color: rgb(35,147,113) !important; 267 color: #fff !important; 268 } 269 </style> 270 <!--Facebook--> 271 <meta property="og:type" content="website"/> 272 <meta property="og:image" content="https://courses.code-maze.com/wp-content/uploads/2026/01/Ultimate-ASP.NET-Core-Web-API-Featured.webp" /> 273 <meta property="og:description" content="<p data-pm-slice="1 1 []"><strong>Ultimate ASP.NET Core Web API - Our bestselling program</strong></p> 274 275<h3><strong><u>What's included?</u></strong></h3> 276<ul> 277 <li>Ultimate ASP.NET Core Web API - The Online Text Course</li> 278</ul> 279<strong>Additional bonus materials:</strong> 280<ol> 281 <li><strong>Dockerizing</strong> ASP.NET Core Application (<strong>Online Text Course</strong>) - <a href="https://code-maze.com/wp-content/uploads/2021/11/Bonus-4-Docker-TOC.pdf" target="_blank" rel="noopener">Full Table of Contents Here.</a></li> 282 <li>Practical <strong>JSON Requests Collection</strong></li> 283 <li>Mastering ASP.NET Core <strong>Security </strong>(<strong>Online Text Course</strong>) - <a href="https://code-maze.com/wp-content/uploads/2020/06/Bonus-6-Table-of-Content.pdf" target="_blank" rel="noopener">Full Table of Contents Here.</a></li> 284 <li>ASP.NET Core Web API With <strong>Dapper </strong>(<strong>PDF</strong>) - <a href="https://code-maze.com/wp-content/uploads/2022/08/Bonus-7-Dapper-TOC.pdf" target="_blank" rel="noopener">Full Table of Contents Here.</a></li> 285</ol> 286All materials are available in .NET 10 with <strong>Community Support</strong> over Discord. 287<h3><strong><u>What you'll learn</u></strong></h3> 288This course dives into the foundational aspects and advanced techniques essential for building robust and scalable Web APIs. 289 290After understanding the basics of project configuration, you'll learn how to effectively utilize dependency injection, configure logging services, and implement the Onion Architecture for a maintainable project structure. 291 292The course covers critical aspects of web API development, including routing, naming, and binding, handling various types of HTTP requests, and ensuring method safety and idempotency. 293 294As you progress, you will explore advanced topics like content negotiation, validation, asynchronous programming, and global error handling. You'll gain proficiency in managing data through paging, filtering, searching, and sorting techniques. Moreover, the course addresses the importance of security by teaching authentication, authorization, and the use of refresh tokens. 295 296Additionally, you will also learn about action filters, health checks, API versioning, and how to document APIs effectively. 297 298Additional bonus chapters provide insights into performance improvements, CQRS with MediatR, and working with multiple databases, rounding out a thorough and practical learning experience. 299 300By the end of the course, you will have a solid grasp of ASP.NETCore Web API development, equipped with the skills to build, deploy, and maintain high-performance web applications. This comprehensive course ensures you are ready to tackle real-world challenges and create efficient, scalable APIs. 301<h4>You can find an entire TOC with preview lessons in the <strong>Course Content</strong> section below.</h4>" /> 302 <!--Twitter--> 303 <meta name="twitter:image" content="https://courses.code-maze.com/wp-content/uploads/2026/01/Ultimate-ASP.NET-Core-Web-API-Featured.webp"> 304 <meta name="twitter:description" content="<
304p data-pm-slice="1 1 []"><strong>Ultimate ASP.NET Core Web API - Our bestselling program</strong></p> 305 306<h3><strong><u>What's included?</u></strong></h3> 307<ul> 308 <li>Ultimate ASP.NET Core Web API - The Online Text Course</li> 309</ul> 310<strong>Additional bonus materials:</strong> 311<ol> 312 <li><strong>Dockerizing</strong> ASP.NET Core Application (<strong>Online Text Course</strong>) - <a href="https://code-maze.com/wp-content/uploads/2021/11/Bonus-4-Docker-TOC.pdf" target="_blank" rel="noopener">Full Table of Contents Here.</a></li> 313 <li>Practical <strong>JSON Requests Collection</strong></li> 314 <li>Mastering ASP.NET Core <strong>Security </strong>(<strong>Online Text Course</strong>) - <a href="https://code-maze.com/wp-content/uploads/2020/06/Bonus-6-Table-of-Content.pdf" target="_blank" rel="noopener">Full Table of Contents Here.</a></li> 315 <li>ASP.NET Core Web API With <strong>Dapper </strong>(<strong>PDF</strong>) - <a href="https://code-maze.com/wp-content/uploads/2022/08/Bonus-7-Dapper-TOC.pdf" target="_blank" rel="noopener">Full Table of Contents Here.</a></li> 316</ol> 317All materials are available in .NET 10 with <strong>Community Support</strong> over Discord. 318<h3><strong><u>What you'll learn</u></strong></h3> 319This course dives into the foundational aspects and advanced techniques essential for building robust and scalable Web APIs. 320 321After understanding the basics of project configuration, you'll learn how to effectively utilize dependency injection, configure logging services, and implement the Onion Architecture for a maintainable project structure. 322 323The course covers critical aspects of web API development, including routing, naming, and binding, handling various types of HTTP requests, and ensuring method safety and idempotency. 324 325As you progress, you will explore advanced topics like content negotiation, validation, asynchronous programming, and global error handling. You'll gain proficiency in managing data through paging, filtering, searching, and sorting techniques. Moreover, the course addresses the importance of security by teaching authentication, authorization, and the use of refresh tokens. 326 327Additionally, you will also learn about action filters, health checks, API versioning, and how to document APIs effectively. 328 329Additional bonus chapters provide insights into performance improvements, CQRS with MediatR, and working with multiple databases, rounding out a thorough and practical learning experience. 330 331By the end of the course, you will have a solid grasp of ASP.NETCore Web API development, equipped with the skills to build, deploy, and maintain high-performance web applications. This comprehensive course ensures you are ready to tackle real-world challenges and create efficient, scalable APIs. 332<h4>You can find an entire TOC with preview lessons in the <strong>Course Content</strong> section below.</h4>"> 333 <!--Google+--> 334 <meta itemprop="image" content="https://courses.code-maze.com/wp-content/uploads/2026/01/Ultimate-ASP.NET-Core-Web-API-Featured.webp"> 335 <meta itemprop="description" content="<p data-pm-slice="1 1 []"><strong>Ultimate ASP.NET Core Web API - Our bestselling program</strong></p> 336 337<h3><strong><u>What's included?</u></strong></h3> 338<ul> 339 <li>Ultimate ASP.NET Core Web API - The Online Text Course</li> 340</ul> 341<strong>Additional bonus materials:</strong> 342<ol> 343 <li><strong>Dockerizing</strong> ASP.NET Core Application (<strong>Online Text Course</strong>) - <a href="https://code-maze.com/wp-content/uploads/2021/11/Bonus-4-Docker-TOC.pdf" target="_blank" rel="noopener">Full Table of Contents Here.</a></li> 344 <li>Practical <strong>JSON Requests Collection</strong></li> 345 <li>Mastering ASP.NET Core <strong>Security </strong>(<strong>Online Text Course</strong>) - <a href="https://code-maze.com/wp-content/uploads/2020/06/Bonus-6-Table-of-Content.pdf" target="_blank" rel="noopener">Full Table of Contents Here.</a></li> 346 <li>ASP.NET Core Web API With <strong>Dapper </strong>(<strong>PDF</strong>) - <a href="https://code-maze.com/wp-content/uploads/2022/08/Bonus-7-Dapper-TOC.pdf" target="_blank" rel="noopener">Full Table of Contents Here.</a></li> 347</ol> 348All materials are available in .NET 10 with <strong>
348Community Support</strong> over Discord. 349<h3><strong><u>What you'll learn</u></strong></h3> 350This course dives into the foundational aspects and advanced techniques essential for building robust and scalable Web APIs. 351 352After understanding the basics of project configuration, you'll learn how to effectively utilize dependency injection, configure logging services, and implement the Onion Architecture for a maintainable project structure. 353 354The course covers critical aspects of web API development, including routing, naming, and binding, handling various types of HTTP requests, and ensuring method safety and idempotency. 355 356As you progress, you will explore advanced topics like content negotiation, validation, asynchronous programming, and global error handling. You'll gain proficiency in managing data through paging, filtering, searching, and sorting techniques. Moreover, the course addresses the importance of security by teaching authentication, authorization, and the use of refresh tokens. 357 358Additionally, you will also learn about action filters, health checks, API versioning, and how to document APIs effectively. 359 360Additional bonus chapters provide insights into performance improvements, CQRS with MediatR, and working with multiple databases, rounding out a thorough and practical learning experience. 361 362By the end of the course, you will have a solid grasp of ASP.NETCore Web API development, equipped with the skills to build, deploy, and maintain high-performance web applications. This comprehensive course ensures you are ready to tackle real-world challenges and create efficient, scalable APIs. 363<h4>You can find an entire TOC with preview lessons in the <strong>Course Content</strong> section below.</h4>"> 364 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=1" /><link rel="preload" href="https://courses.code-maze.com/wp-content/themes/Extra/core/admin/fonts/modules.ttf" as="font" crossorigin="anonymous"> <noscript><style>.woocommerce-product-gallery{ opacity: 1 !important; }</style></noscript> 365 <link rel="preload" href="https://courses.code-maze.com/wp-content/themes/Extra/fonts/ET-Extra.woff" as="font" crossorigin="anonymous"> 366 <style id="cmz-paddle-cart-style"> 367 /* Tutor prints an inline <style> block with `button.tutor-btn { background-color: 368 transparent; border-color: transparent }` at specificity (0,1,1) â element + class â 369 which beats the external tutor.min.css `.tutor-btn-outline-primary { border-color: ⦠}` 370 rule at (0,1,0), regardless of load order. Both our buttons keep their Tutor variant 371 classes (tutor-btn-primary / tutor-btn-outline-primary) so dark-mode.css's own, 372 already-accessible overrides â which target those exact classes under 373 :root[data-theme="dark"], a strictly higher specificity â still win in dark mode. This 374 block only supplies the light/base fill that the specificity war was eating. */ 375 .cmz-paddle-buttons .cmz-paddle-direct-checkout { 376 /* MEASURED IN A REAL BROWSER, 2026-08-06: white on Tutor's #239371 is 3.83:1 â below 377 WCAG AA â and this is the highest-traffic buy button on the site. The subscription 378 panel's round-5 contrast pass fixed exactly this colour (#239371 -> #1e7d60, 5.05) 379 but its matrix covered the PANEL only, so the same failing green stayed live here. 380 decisions.md already ratifies the remedy: "the brand green keeps its hue and is 381 darkened for the light-theme FILL only". Hence a literal rather than 382 var( --tutor-color-primary ) â the variable resolves to the value that fails. 383 Dark mode is untouched: dark-mode.css targets .tutor-btn-primary under 384 :root[data-theme="dark"] at higher specificity and keeps its own #1d7c60 (5.12). */ 385 background-color: #1e7d60 !important; 386 border-color: #1e7d60 !important; 387 color: #fff !important; 388 white-space: nowrap; /* "Buy Now â" never wraps between the word and the arrow */ 389 /* Founder round 6 â the round-5 fix inverted the intent and is corrected here. 390 The ask was never "make Buy Now lighter": Buy Now's weight was the RIGHT one and 391 Add to Cart was the odd one out. Round 5 unified them by pinning Buy Now DOWN to 392 400, which matched the two buttons to each other but against the wrong reference. 393 Correct end state, founder's words ("the font on the buy button was good, it was 394 the add to cart button that should be fixed"): BOTH at Tutor's own 600 â the weight 395 `.tutor-btn-primary { font-weight: 600 }` gives every other primary button on the 396 site, so the pair matches the site rather than only itself. Height stays unified 397 DOWNWARD at Add to Cart's 40px (that half of round 5 was right and is untouched: 398 tutor-btn-lg stays dropped, so both keep font-size 16px / padding 8px 16px). */ 399 font-weight: 600 !important; 400 } 401 /* 402 * Add to Cart, round 2 (founder: "gray-on-gray⦠that golden yellow for example"). Gold, 403 * not another green, so it reads as a distinct SECOND action next to the green Buy Now â 404 * the same green-is-brand/amber-is-highlight split the promo surfaces already use 405 * (decisions.md, 2026-07-20). The exact pair (#ffb912 fill / #1e1600 text) is not a new 406 * colour: it is the mentor-cursor gold already live on the "New" badge in 407 * cmz-dark-mode.css, chosen there BECAUSE it measures 10.4:1 and was left un-themed for
408 * dark mode on purpose (self-contained, reads the same on either page background) â so 409 * reusing it here needs no separate dark-mode rule either. 410 * 411 * SPECIFICITY NOTE: this button still carries the `tutor-btn-outline-primary` class 412 * (kept deliberately â see the button markup) so it stays excluded from dark-mode.css's 413 * blanket `.tutor-btn:not([class*="outline"])â¦` catch-all. But that leaves it caught by 414 * the OTHER, dedicated dark-mode rule for `.tutor-btn-outline-primary` itself, at 415 * specificity (0,3,0) â higher than a plain `.cmz-paddle-buttons .cmz-paddle-add-to-cart` 416 * (0,2,0). Repeating the class (a documented technique, e.g. the cache-safe-theming 417 * playbook's `.active.active.active` note) lifts this rule to (0,4,0), a clean win in 418 * both themes rather than a coin-flip on stylesheet order. 419 */ 420 .cmz-paddle-buttons .cmz-paddle-add-to-cart.cmz-paddle-add-to-cart.cmz-paddle-add-to-cart { 421 background-color: #ffb912 !important; 422 border-color: #ffb912 !important; 423 color: #1e1600 !important; 424 /* Round 6, the other half of the weight correction. Add to Cart carries 425 `tutor-btn-outline-primary`, which Tutor's bare `.tutor-btn-primary{font-weight:600}` 426 rule never matches â measured live at 400 while every other button on the page sat 427 at 600. THIS was the button the founder wanted fixed. Raised to 600 so the pair is 428 identical in family, size and weight, and differs only in colour. */ 429 font-weight: 600 !important; 430 } 431 .cmz-paddle-buttons .cmz-paddle-direct-checkout:hover { 432 filter: brightness( 0.92 ); 433 } 434 .cmz-paddle-buttons .cmz-paddle-add-to-cart.cmz-paddle-add-to-cart.cmz-paddle-add-to-cart:hover { 435 filter: brightness( 0.94 ); 436 } 437 /* 438 * In-cart state (founder round 4: "gray or some other shade of yellow (dimmed)"). Kept 439 * as the SAME gold, just dimmed via opacity rather than a second colour â opacity is 440 * theme-agnostic by construction (it dims whatever the fill already correctly is in 441 * either mode), so this needed no separate dark-mode rule either, same reasoning as the 442 * base gold itself. data-in-cart is set client-side only (see syncAddToCartButtons in 443 * the enqueued script) â never baked into the server-rendered HTML. 444 */ 445 .cmz-paddle-buttons .cmz-paddle-add-to-cart[data-in-cart="1"] { 446 opacity: 0.55; 447 cursor: default; 448 pointer-events: none; 449 } 450 .cmz-paddle-buttons .cmz-paddle-add-to-cart[data-in-cart="1"]:hover { 451 filter: none; 452 } 453 454 /* ----------------------------------------------------------------------------- 455 * Archive-card add to cart. Tim Corey's layout (founder's reference), our palette â 456 * the same #ffb912 gold as the course-page Add to Cart, so "gold means add to cart" 457 * holds everywhere on the site rather than the archive inventing a third colour. 458 * That gold is deliberately theme-agnostic (it already carries its own dark text at 459 * 10.4:1 on either background), which is why this needs no dark-mode branch â the 460 * same reasoning that kept the course-page button to one rule. 461 * -------------------------------------------------------------------------- */ 462 /* The card body is the chip's containing block. UNCONDITIONAL on purpose: if this ever 463 fails to apply, the nearest positioned ancestor is `.tutor-card` (which IS relative) 464 and the chip silently lands back ON the artwork â the exact defect this replaced. */ 465 .tutor-card.tutor-course-card .tutor-card-body { 466 position: relative; 467 } 468 /* Keep the card's own text out from under the chip. :has() is only an optimisation here 469 (pad just the cards that actually carry a chip); if it is unsupported the chip still 470 sits correctly, the text simply is not indented. */ 471 .tutor-card-body:has( > .cmz-paddle-loop-add ) > .tutor-course-ratings, 472 .tutor-card-body:has( > .cmz-paddle-loop-add ) > .tutor-course-name { 473 padding-right: 54px; 474 } 475 476 /* 477 * The chip: top-right of the card BODY, level with the ratings row (founder). 478 * 479 * ARMOURED WITH !important AND A DOUBLED CLASS, deliberately. Extra styles EVERY bare 480 * <button> on the site â `button:not(.et_pb_menu__icon)` in style-cpt.css sets 481 * background, padding, border and radius â and this file already carries the scars of 482 * that fight for the course-page buttons (see the 1.2.0 note above, where Tutor's own
483 * inline reset beat an external class rule regardless of load order). A chip that does 484 * not declare its own surface does not own it. This is the same trap class as the nav 485 * work: anything dropped into theme-controlled markup must pin its own paint. 486 * 487 * opacity is pinned to 1 and REMOVED FROM THE TRANSITION so the chip cannot fade, 488 * animate a fade, or inherit one â the founder reported it "just becomes transparent" 489 * on hover. No site rule was found that does that (every stylesheet was scanned for a 490 * :hover rule touching this element or any ancestor; there is none, and there is no 491 * `button:hover` rule anywhere), so rather than guess at a cause this closes off the 492 * whole mechanism, including our own former aria-busy dim below. 493 */ 494 .cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add { 495 position: absolute; 496 top: 12px; 497 right: 16px; 498 z-index: 2; 499 display: inline-flex; 500 align-items: center; 501 justify-content: center; 502 width: 40px; 503 height: 40px; 504 padding: 0 !important; 505 border: 1px solid #ffb912 !important; 506 border-radius: 8px !important; 507 background: #ffb912 !important; 508 color: #1e1600 !important; 509 opacity: 1 !important; 510 cursor: pointer; 511 box-shadow: 0 1px 4px rgba( 0, 0, 0, 0.22 ); 512 transition: filter 120ms ease, transform 120ms ease, box-shadow 120ms ease; 513 } 514 /* Hover: the chip LIFTS and the plus thickens â it must never fade. */ 515 .cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add:hover, 516 .cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add:focus-visible { 517 background: #ffc63a !important; 518 opacity: 1 !important; 519 filter: none; 520 transform: translateY( -1px ); 521 box-shadow: 0 3px 10px rgba( 0, 0, 0, 0.3 ); 522 } 523 .cmz-paddle-loop-add .cmz-paddle-loop-plus { 524 transition: stroke-width 120ms ease; 525 } 526 .cmz-paddle-loop-add:hover .cmz-paddle-loop-plus, 527 .cmz-paddle-loop-add:focus-visible .cmz-paddle-loop-plus { 528 stroke-width: 3; 529 } 530 .cmz-paddle-loop-add .cmz-paddle-loop-ico { 531 display: inline-flex; 532 align-items: center; 533 justify-content: center; 534 line-height: 0; 535 } 536 /* The two glyphs swap purely on the attribute the cart state already sets â no second 537 piece of JS deciding what the icon should be. */ 538 .cmz-paddle-loop-add[data-in-cart="0"] .cmz-paddle-loop-ico-in, 539 .cmz-paddle-loop-add[data-in-cart="1"] .cmz-paddle-loop-ico-add { 540 display: none; 541 } 542 /* IN CART. NOT a dim â dimming is what made the addable chip look broken, and a faded 543 control reads as "disabled", not "done". The chip flips to a solid surface with a 544 green check: unmistakably added, fully opaque, obviously the same control. 545 THEME-AWARE since the founder's 2026-08-07 C3 finding ("checkmark is dark on the light 546 theme"): light theme gets a light surface with the AA light-surface green #1e7d60 547 (the Phase 4 rolled-everywhere value; ~5.2:1 on #f2f5f4), dark mode keeps the solid 548 dark chip with #5dc49e â the dark-surface brand green from decisions.md ("keep the 549 hue, lift the lightness"), the value that passes contrast on a dark fill, which 550 #239371 does not. Doubled class + !important for the same reason as the base rule. */ 551 .cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add[data-in-cart="1"], 552 .cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add[data-in-cart="1"]:hover { 553 background: #f2f5f4 !important; 554 border-color: rgba( 23, 25, 27, 0.35 ) !important; 555 color: #1e7d60 !important; 556 opacity: 1 !important; 557 cursor: default; 558 pointer-events: none; 559 filter: none; 560 transform: none; 561 box-shadow: 0 1px 4px rgba( 0, 0, 0, 0.22 ); 562 } 563 :root[data-theme="dark"] .cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add[data-in-cart="1"], 564 :root[data-theme="dark"] .cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add[data-in-cart="1"]:hover { 565 background: #17191b !important; 566 border-color: rgba( 255, 255, 255, 0.34 ) !important; 567 color: #5dc49e !important; 568 } 569 /* BUSY: a real spinner (founder, release night 2026-08-07: "some kind of css loader ⦠570 that's just good UX" â the AJAX round trip left the chip looking inert). Still NO 571 opacity change anywhere: the old `opacity:.6` made the chip read as broken and was 572 its own bug report. The glyph hides, a currentColor ring spins in its place, and 573 both come back with the server's answer via syncAddToCartButtons(). */ 574 .cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add[aria-busy="true"] { 575 opacity: 1 !important; 576 cursor: progress; 577 pointer-events: none; 578 } 579 .cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add[aria-busy="true"] svg { 580 visibility: hidden; 581 } 582 .cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add[aria-busy="true"]::after {
583 content: ""; 584 position: absolute; 585 top: 50%; 586 left: 50%; 587 width: 14px; 588 height: 14px; 589 margin: -7px 0 0 -7px; 590 border-radius: 50%; 591 border: 2px solid currentColor; 592 border-top-color: transparent; 593 animation: cmz-paddle-chip-spin 0.6s linear infinite; 594 } 595 @keyframes cmz-paddle-chip-spin { 596 to { transform: rotate( 360deg ); } 597 } 598 @media only screen and ( max-width: 1024px ) { 599 /* 44px thumb target on touch, same floor as the mini-cart's controls. Doubled class 600 to match the base rule's specificity â a media query adds none of its own, so an 601 equal-specificity base rule later in the sheet would otherwise win (that exact 602 mistake cost a round on the mini-cart's touch targets). */ 603 .cmz-paddle-add-to-cart.cmz-paddle-loop-add.cmz-paddle-loop-add { 604 width: 44px; 605 height: 44px; 606 } 607 } 608 609 610 /* ----------------------------------------------------------------------------- 611 * VIEWER PRICES (founder: "customers don't know how much either of the courses cost 612 * ⦠so that the customers know they've reached their budget"). 613 * 614 * Visual language is the promo plugin's, which is where this site's strikethrough 615 * already lives: muted + line-through for the list price, full weight for what they 616 * actually pay. Every figure is rendered by the gateway; nothing here is computed. 617 * 618 * PER-THEME GREYS, because measured on the real card backgrounds (#fff light, 619 * #1f1f22 dark) NO SINGLE GREY CLEARS AA ON BOTH: #6b7280 is 4.83 light but 3.40 620 * dark, #8b949e is 5.35 dark but 3.08 light. So each theme gets the one that passes. 621 * -------------------------------------------------------------------------- */ 622 .cmz-paddle-loop-price { 623 position: absolute; 624 top: 58px; 625 right: 16px; 626 z-index: 2; 627 /* Column flex, so the struck span shrink-wraps to its digits. As a plain block it 628 filled the card width and the rule below would have run out past the number. */ 629 display: flex; 630 flex-direction: column; 631 align-items: flex-end; 632 text-align: right; 633 line-height: 1.25; 634 font-size: .95rem; 635 } 636 .cmz-paddle-loop-price[hidden] { display: none; } 637 /* 638 * THE STRIKE IS A DRAWN RULE, NOT text-decoration (founder saw the line sitting below 639 * the middle of the digits). `line-through` is positioned from font metrics, and this 640 * face puts its strike low; no font-size nudge fixes that, it just moves the problem to 641 * a different size. A centred pseudo-element crosses the digits' middle at ANY size, in 642 * either surface, whatever face the theme loads. currentColor keeps it the exact grey 643 * of the text it strikes, so the per-theme colours below need no duplicate rule. 644 */ 645 .cmz-paddle-price-was { 646 display: block; 647 position: relative; 648 font-size: .82rem; 649 text-decoration: none; 650 color: #6b7280; /* 4.83 on #fff */ 651 } 652 .cmz-paddle-price-was::after, 653 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-was::after { 654 content: ''; 655 position: absolute; 656 left: 0; 657 right: 0; 658 top: 47%; /* digits have no descender: their ink centre sits 659 just above the box centre. Measured, not guessed. */ 660 height: 1px; 661 background: currentColor; 662 pointer-events: none; 663 } 664 .cmz-paddle-price-now { font-weight: 700; color: #14171a; } /* 17.99 on #fff */ 665 :root[data-theme="dark"] .cmz-paddle-price-was { color: #8b949e; } /* 5.35 on #1f1f22 */ 666 :root[data-theme="dark"] .cmz-paddle-price-now { color: #e4e0da; } /* 12.51 on #1f1f22 */ 667 668 /* Mini-cart: per-line price, then one discount label and a subtotal by the actions. */ 669 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-price { 670 flex: 0 0 auto; 671 margin-left: 8px; 672 display: flex; 673 flex-direction: column; 674 align-items: flex-end; 675 text-align: right; 676 line-height: 1.25; 677 white-space: nowrap; 678 font-size: .86rem !important; 679 } 680 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-was { 681 display: block; 682 position: relative; 683 font-size: .76rem !important; 684 text-decoration: none !important; 685 color: #6b7280 !important; 686 font-weight: 400 !important; 687 } 688 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-now { 689 color: #14171a !important; 690 font-weight: 700 !important; 691 } 692 /* 693 * THE FOOTER DIVIDER (founder round 7, from a marked-up screenshot). 694 * 695 * The Subtotal row opens the totals block, so the divider belongs to IT rather than to 696 * the list: the list's last row deliberately carries `border-bottom: 0` (its own edge is 697 * the divider), and putting the line back on that row would resurrect the dangling rule 698 * for the priceless case, where no totals block renders at all and the list must still 699 * end clean against the actions row. 700 * 701 * Full-bleed, exactly like every other divider in this panel â the dropdown's own 702 * padding is 0 precisely "so dividers can run edge to edge", and this element is a block 703 * child of it, so its border spans the full 320px with no extra rule. 704 * 705 * The 1px reset at (1,1,1) sets `border: 0` on every div in here; these rules are 706 * (1,2,0), which outranks it â the same margin by which the row rules win. 707 * 708 * HORIZONTAL INSET, 14px â a change the founder's ask did not name, and here is why it 709 * is in the same commit. Measured on the rendered panel before the fix: the row content 710 * edge sits at x=15 from the panel's outer edge (1px border + 14px padding) and the 711 * header's does too, while the totals block sat at x=3 (1px + 2px). With no divider that 712 * read as a loose caption; with one it reads as a misprint, because a full-bleed line 713 * makes the text under it measurable against the text above it. 14px puts the totals on 714 * the header's and the rows' own inset, so the footer lines up with the panel it closes. 715 * Vertical rhythm is unchanged apart from the line itself: 10px above Subtotal as 716 * before, and the last row's own 10px bottom padding sits below the line, so the rule 717 * lands centred in a 20px band rather than crowding either side. 718 */ 719 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-sub { 720 display: flex; 721 justify-content: space-between; 722 align-items: baseline; 723 gap: 10px; 724 padding: 10px 14px 0; 725 border-top: 1px solid var( --cmz-mc-border-strong ); 726 font-weight: 700 !important; 727 color: #14171a !important; 728 } 729 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-disc { 730 display: block; 731 padding: 2px 14px 0; 732 font-size: .78rem !important; 733 font-weight: 600 !important; 734 color: #1e7d60 !important; /* 5.05 on white */ 735 } 736 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-note { 737 display: block; 738 padding: 2px 14px 6px; 739 font-size: .74rem !important; 740 font-weight: 400 !important; 741 color: #6b7280 !important; 742 } 743 :root[data-theme="dark"] #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-was, 744 :root[data-theme="dark"] #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-note { 745 color: #8b949e !important; 746 } 747 :root[data-theme="dark"] #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-now, 748 :root[data-theme="dark"] #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-sub {
749 color: #e4e0da !important; 750 } 751 :root[data-theme="dark"] #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-disc { 752 color: #5dc49e !important; /* 7.72 on the dark panel */ 753 } 754 /* course-entry-box.php (a Code Maze override inside plugins/tutor/templates/â¦) renders 755 the Lemon Squeezy button unconditionally, with no filter around it to hook a suppression 756 into â the cmz_paddle_suppress_ls_button name in the design contract was never actually 757 wired. :has() keeps the fix entirely inside this file instead of editing the vendored 758 template again, and it only ever matches when our own buttons are present, i.e. only for 759 a gated user; a non-gated visitor's entry box is untouched. */ 760 .tutor-card-body:has( .cmz-paddle-buttons ) .lemon-squeezy-direct-checkout { 761 display: none !important; 762 } 763 764 /* Cart icon in the nav â same menu-item shape and absolute-badge convention as 765 cmz-dark-mode's own toggle. Round 3 (founder, screenshot review): a stray white line 766 at the pill's edge, "too round", background not differentiated, doesn't match its 767 neighbours. Rebuilt on TWO measured facts, not assumption: 768 (1) #main-header is background:rgba(0,0,0,.91) UNCONDITIONALLY â the nav bar is 769 always near-black, on every theme. It does not follow :root[data-theme="dark"] 770 (that attribute governs the CONTENT area only) â confirmed live: data-theme was 771 null while the nav still rendered black. The first version branched the chip's 772 colours on data-theme anyway, which is why the fill was invisible (rgba(0,0,0,.05) 773 â near-black on near-black) whenever content mode happened to be light. Fixed by 774 dropping the branch: one set of dark-surface-safe values, always, matching what 775 the nav itself always is. 776 (2) The neighbours (My Learning / Explore Courses / the moon toggle) are plain WHITE 777 (rgb(255,255,255), measured), not brand green. A green-bordered chip stood out AS 778 AN OUTLIER instead of belonging to the family. Colour now follows the nav's own 779 white, and the ONLY accent colour left is the badge â same role the gold "NEW" 780 pill already plays next door: a neutral control, one colourful accent on top. 781 The badge sits ABOVE the chip (bottom:100%), never overlapping its border â same 782 placement cmz-dm-new already uses safely, which also removes the likely source of the 783 stray line (two independently-antialiased curves â the badge's circle and the old 784 pill's border-radius:999px â meeting at a shallow angle). 4px radius, not a pill. */ 785 /* 786 * Vertical alignment (founder, folded into the redesign): #et-menu is display:flex, 787 * align-items:normal (~stretch), so every <li> â including this one â is already 788 * stretched to the SAME height as its siblings (measured: 53px, identical top/bottom 789 * for all of them). The misalignment was never between <li> elements; it was that a 790 * sibling <a> fills that full 53px itself and centres its own content some other way, 791 * while my chip â an inline-flex <div> sized to its own content, maybe 30px tall â 792 * defaulted to sitting at the TOP of the block-level <li> with nothing centring it. 793 * Making the <li> a flex container for ITS OWN children (not to be confused with 794 * #et-menu's flex, one level up) centres the chip in the same space every other item 795 * occupies, regardless of what mechanism Extra's own <a> uses internally. 796 */ 797 .cmz-paddle-cart-item { 798 position: relative; 799 } 800 /* Same #et-navigation specificity fight as everything else this round â plain 801 `.cmz-paddle-cart-item { display:flex⦠}` measured LIVE as never applying at all 802 (computed display stayed "block", height stayed the chip's own 32px, not the li's 803 stretched 53px) against Extra's own #et-navigation li rules. Scoped + !important. */ 804 #et-navigation .cmz-paddle-cart-item { 805 display: flex !important; 806 align-items: center !important; 807 /* NOT height:100% â measured live that it backfires: #et-menu never sets an 808 explicit height of its own (only content-driven flex stretch), so a percentage 809 height on the li has no resolvable reference and computes to auto, COLLAPSING 810 the li to its content's 32px instead of the 53px every sibling gets from 811 #et-menu's own align-items:normal (~stretch). Leaving height unset lets that 812 outer stretch keep working exactly as it already did for every other item â 813 this rule's only job is centring the child WITHIN whatever height results. */ 814 } 815 816 /* --------------------------------------------------------------------------------- 817 * ROUND 6 â the alignment defect that survived three previous "fixes", and why. 818 * 819 * Every earlier round verified alignment by comparing BOX centres: the cart <li> and a 820 * sibling <li> both measured centre-y 107 (later 160), so it was declared aligned and 821 * shipped â while the founder kept seeing the chip sit low. Both readings were correct; 822 * the comparison was against the wrong reference. 823 * 824 * Measured on the running page (CSSOM + Range over the real text nodes): 825 * sibling menu-item text INK centre .... 141 826 * dark-mode toggle glyph centre ........ 142 827 * cart chip / glyph centre ............. 160 â 19px low, exactly as drawn 828 *
829 * Mechanism: Extra reserves empty space UNDER every nav link, as bottom padding on the 830 * anchor itself â `#et-navigation > ul > li > a { padding: 0 0 54px }`, overridden per 831 * header style and per state. Authoritative list, read out of the live CSSOM: 832 * #et-navigation > ul > li > a ......................................... 54px 833 * .header.left-right ⦠> a @media(min-width:768px) [inline] ... 36px â this page 834 * .et-fixed-header .header.left-right ⦠> a ............................ 32px 835 * .et-fixed-header .header.left-right ⦠> a @media(min-width:768px) ... 44px 836 * .et-fixed-header .header.centered ⦠> a .............................. 20px 837 * So a 53px row is really a ~17px band of ink sitting on top of a 36px empty reserve. 838 * Every sibling's CONTENT therefore lives in the TOP of the row. The chip is a <div>, 839 * not an <a>, so `#et-navigation > ul > li > a` never matches it and it never gets the 840 * reserve â and centring it in the FULL row height parks it half a reserve too low. 841 * 842 * The correction is exact and needs no fudge factor: row = band + reserve, so the true 843 * centre is band/2 while naive centring gives (band+reserve)/2 â the error is always 844 * exactly reserve/2. Applied as a TRANSFORM, deliberately: the chip's margin box must not 845 * grow, or the li's flex cross-size would grow with it and stretch the whole nav row 846 * (verified after: #et-menu height 53px before and after, unchanged). 847 * 848 * The value is a custom property rather than a literal because the reserve is not a 849 * constant â it changes with breakpoint, header style AND scroll state, and two of the 850 * five values above come from Extra's customizer output, so they move if the founder 851 * ever changes the header height. The CSS default below covers the variants the theme 852 * ships; the enqueued script then overwrites --cmz-nav-reserve with the value MEASURED 853 * off a real sibling anchor, which is correct by construction in every variant including
854 * ones that do not exist yet. CSS is the no-JS floor, JS is the truth. 855 * 856 * Scoped to #et-menu (the desktop <ul>) and NOT to #et-navigation, because 857 * #et-extra-mobile-menu is nested INSIDE #et-navigation â the clone trap this file has 858 * already been bitten by twice. The stacked mobile menu has no reserve to correct 859 * (its rows are `padding: 15px 0`), so it must not receive the transform at all. 860 * ------------------------------------------------------------------------------- */ 861 #et-navigation > #et-menu > .cmz-paddle-cart-item { 862 --cmz-nav-reserve: 36px; 863 } 864 .et-fixed-header .header.left-right #et-navigation > #et-menu > .cmz-paddle-cart-item { 865 --cmz-nav-reserve: 44px; 866 } 867 .et-fixed-header .header.centered #et-navigation > #et-menu > .cmz-paddle-cart-item { 868 --cmz-nav-reserve: 20px; 869 } 870 #et-navigation > #et-menu > .cmz-paddle-cart-item > .cmz-paddle-cart-chip { 871 transform: translateY( calc( var( --cmz-nav-reserve, 36px ) / -2 ) ); 872 } 873 /* The dropdown hangs off the chip's ORIGINAL (untransformed) box, so it would open with 874 the same half-reserve gap the chip no longer has. Pull it up by the same amount so it 875 still sits directly under the chip in every variant. */ 876 #et-navigation > #et-menu > .cmz-paddle-cart-item > .cmz-paddle-cart-dropdown { 877 transform: translateY( calc( var( --cmz-nav-reserve, 36px ) / -2 ) ); 878 } 879 .cmz-paddle-cart-chip { 880 display: inline-flex; 881 align-items: center; 882 position: relative; 883 } 884 /* 885 * Extra styles its navigation through #et-navigation â an ID â so a plain-class rule 886 * loses to it regardless of !important (cache-safe-theming.md documents this exact trap 887 * for this exact theme; caught live twice already this round, on the border AND the 888 * padding â #et-navigation > ul > li > a carries both at (1,0,3)). Every property that 889 * has to win against the nav's own item styling is scoped under #et-navigation here. 890 */ 891 #et-navigation .cmz-paddle-cart-chip { 892 padding: 5px 8px !important; 893 border: 1px solid rgba( 255, 255, 255, 0.3 ) !important; 894 border-radius: 4px !important; 895 background-color: rgba( 255, 255, 255, 0.12 ) !important; 896 gap: 6px; 897 } 898 /* The link and caret are transparent passengers inside the chip now â the chip alone 899 carries the border/background, so there is only ever ONE box being drawn, not two 900 overlapping ones. Colour pinned to white explicitly: without this, the site-wide dark 901 -mode link-colour rule (a:not([style*="background"])â¦) would tint this anchor toward 902 --cmz-link whenever CONTENT mode is dark â inconsistent with a nav that looks 903 identical regardless, and the exact kind of "why did the icon change colour" bug the 904 two-facts note above exists to prevent from recurring elsewhere. */ 905 #et-navigation .cmz-paddle-cart-link { 906 display: inline-flex !important; 907 align-items: center; 908 gap: 6px; 909 cursor: pointer; 910 border: 0 !important; 911 padding: 0 !important; 912 background: transparent !important; 913 color: #fff !important; 914 } 915 /* Wording kept for assistive tech and the mobile stacked menu; hidden on the desktop 916 bar, where the glyph alone reads and horizontal space is tight â same treatment as 917 cmz-dark-mode's .cmz-dm-text. */ 918 .cmz-paddle-cart-text { 919 position: absolute; 920 width: 1px; 921 height: 1px; 922 margin: -1px; 923 padding: 0; 924 overflow: hidden; 925 clip: rect( 0, 0, 0, 0 ); 926 white-space: nowrap; 927 border: 0; 928 } 929 /* 930 * Count badge â appearance only. Placement is per-variant and lives in the two rules 931 * below, because the desktop chip wants a corner badge and the stacked mobile row wants 932 * an inline one. 933 * 934 * Round 3 parked this ABOVE the chip (bottom:100%) to dodge a seam the founder saw where 935 * two independently-antialiased curves met. Round 6 puts it back on the corner, which is 936 * what the founder asked for and what the reference does â the seam is prevented properly 937 * this time, by the ring below, rather than by keeping the two shapes apart. 938 */ 939 .cmz-paddle-cart-badge { 940 box-sizing: border-box; 941 min-width: 16px; 942 height: 16px; 943 padding: 0 4px; 944 border-radius: 999px; 945 /* Same 3.83:1 white-on-#239371 failure as the buy button, and worse here because the 946 count is 10px. Hue unchanged, fill darkened to the ratified #1e7d60 (5.05). The 947 badge's separation from the near-black nav comes from its 2px ring, not from its 948 own luminance, so darkening the disc costs nothing there. */ 949 background: var( --cmz-accent-fill, #1e7d60 ); 950 color: #fff; 951 font-size: 10px; 952 font-weight: 700; 953 line-height: 16px; 954 text-align: center; 955 pointer-events: none; 956 z-index: 3; 957 } 958 /* The `hidden` attribute is how the script hides a zero count. Any author `display` 959 declaration would silently defeat it, so state the intent explicitly rather than 960 relying on nobody ever adding one. */ 961 .cmz-paddle-cart-badge[hidden] { 962 display: none !important; 963 } 964 /* 965 * DESKTOP: glued to the chip's top-right corner (founder, with Dometrain cited as the 966 * reference â measured on dometrain.com rather than eyeballed from the screenshot): 967 * 968 * their chip ......... 44x44, position:relative, 8px radius 969 * their badge ........ 20x20 circle, min-width 20 + padding 0 6px so 2 digits grow it 970 * their anchor ....... position:absolute; top:-6px; right:-6px 971 * measured overhang .. 5px past the top edge and 5px past the right edge 972 * their ratio ........ badge is 0.45x the chip's size 973 * their separation ... no ring; a coloured glow (0 2px 10px -2px, badge colour @55%) 974 * 975 * Ported, not copied. Our chip is 32px tall, so the 16px badge we already had is ratio 976 * 0.50 â right in their range and already legible at 10px/700, so the size is unchanged. 977 * Offsets are -7px against a 16px badge, which puts the badge's centre 1px inside the 978 * corner point: it straddles the border almost exactly half in / half out, which is what 979 * the founder described, and is a touch more overlap than Dometrain's 25%. 980 * 981 * Colour stays OUR green (the brief: keep the scheme, position is the point). Their glow 982 * works because their badge sits on a flat dark-blue chip; ours lands ON a 1px light 983 * border, so it needs the ring the founder mentioned â 2px in the nav's own colour, which 984 * reads as a cut-out and kills the seam risk at the same time. 985 * 986 * ONE ring colour for both themes, deliberately: #main-header measures 987 * background rgba(0,0,0,.91) UNCONDITIONALLY â the nav bar is always near-black and does 988 * NOT follow :root[data-theme] (that governs the content area only). Branching this on 989 * the content theme is the exact bug round 3 shipped; it is not repeated here. 990 * 991 * Anchored to .cmz-paddle-cart-chip, which is position:relative AND carries the 992 * alignment transform â a transformed element is a containing block for its absolutely 993 * positioned descendants, so the badge rides the chip through every header variant, 994 * breakpoint and scroll state for free, with no second offset to keep in sync. 995 * 996 * Applied to BOTH menu clones, not just #et-menu: the founder's follow-up is that the 997 * mobile chip must look the same as the desktop one, so there is now a single chip design 998 * and a single badge placement rather than two that drift. 999 */ 1000 #et-navigation .cmz-paddle-cart-item .cmz-paddle-cart-badge { 1001 position: absolute; 1002 top: -7px; 1003 right: -7px; 1004 box-shadow: 0 0 0 2px rgba( 10, 10, 10, 0.94 ); 1005 } 1006 /* Extra's own breakpoint (#et-mobile-navigation switches at 1024px) â see 1007 cmz-dark-mode.css's own note on why a guessed value leaves a dead zone. */ 1008 @media only screen and ( max-width: 1024px ) { 1009 /* Founder: vertical alignment in the mobile stacked menu too â measured live in 1010 #et-extra-mobile-menu (the clone that actually renders on mobile; Extra hides the 1011 #et-navigation copy there â see cache-safe-theming.md's own note on this exact 1012 trap). Sibling rows are ~46px tall via #et-navigation li a's padding:15px 0 + 1013 15px line-height; my row measured 34px with nothing supplying the same rhythm. 1014 6px top/bottom closes that gap without touching the chip's own size. */ 1015 #et-navigation .cmz-paddle-cart-item { 1016 padding: 6px 0 !important; 1017 } 1018 /* 1019 * COMPACT CHIP IN THE STACKED MENU (founder: "it should look the same" as desktop). 1020 * 1021 * The previous version stretched the chip to width:100% and un-hid the "Cart" label, 1022 * on the reasoning that a menu row should look like a menu row. The founder's 1023 * screenshot shows what that actually produced: a full-width bordered box with a 1024 * glyph, the word CART, the badge and the caret strung across the whole menu â a
1025 * completely different component from the desktop chip, in the same nav. 1026 * 1027 * So the chip is now sized to its content in both clones and the label goes back to 1028 * screen-reader-only, leaving exactly the desktop object: glyph + caret + corner 1029 * badge. Assistive tech is unaffected â the label is still in the accessibility tree, 1030 * and the link keeps its aria-label besides. 1031 * 1032 * PLACEMENT, chosen deliberately rather than inherited: left-aligned, so the chip 1033 * starts on the same vertical edge every sibling row's text starts on. In a stacked 1034 * menu the left edge is the alignment spine; a compact control centred or 1035 * right-floated in a full-width row would read as unrelated to the list it belongs to. 1036 */ 1037 #et-navigation .cmz-paddle-cart-item { 1038 justify-content: flex-start; 1039 } 1040 #et-navigation .cmz-paddle-cart-item .cmz-paddle-cart-chip { 1041 display: inline-flex !important; 1042 width: auto; 1043 flex: 0 0 auto; 1044 justify-content: flex-start; 1045 box-sizing: border-box; 1046 } 1047 /* The li is a flex container (it has to be, to centre the chip), so the panel would 1048 sit BESIDE the chip and be squeezed â measured at 145px before this. Wrapping the 1049 li and giving the panel a full-width flex basis puts it on its own line, which is 1050 what "full width in the stacked menu" actually requires. */ 1051 #et-navigation .cmz-paddle-cart-item { 1052 flex-wrap: wrap !important; 1053 } 1054 /* The reserve correction is a desktop-nav concept only; the stacked menu has no 1055 reserve. #et-menu is display:none at this width so this is belt-and-braces, but 1056 the selector has to carry the same two IDs or it loses to the rule it undoes. */ 1057 #et-navigation > #et-menu > .cmz-paddle-cart-item > .cmz-paddle-cart-chip, 1058 #et-navigation > #et-menu > .cmz-paddle-cart-item > .cmz-paddle-cart-dropdown { 1059 transform: none; 1060 } 1061 } 1062 1063 /* 1064 * HOVER BRIDGE. The panel hangs 10px below the chip, and that gap belongs to neither 1065 * element â a pointer crossing it leaves both, which is what makes naive hover menus 1066 * flicker shut just as you reach for them. Two things stop that here: a close DELAY in 1067 * the script, and this invisible strip which extends the panel's hover area upward 1068 * across the gap so the pointer never actually leaves. Belt and braces, because the 1069 * delay alone still drops the menu if the pointer pauses in the gap. 1070 * 1071 * Not applied on touch: there is no hover there, and the panel is static in the stacked 1072 * menu so an upward strip would overlay the row above it. 1073 */ 1074 @media ( hover: hover ) and ( pointer: fine ) { 1075 #et-navigation > #et-menu > .cmz-paddle-cart-item > .cmz-paddle-cart-dropdown::before { 1076 content: ""; 1077 position: absolute; 1078 left: 0; 1079 right: 0; 1080 top: -14px; 1081 height: 14px; 1082 } 1083 } 1084 1085 /* ================================================================================= 1086 * MINI-CART DROPDOWN â rebuilt round 6 (founder: "it's like a 3 year old made it"). 1087 * 1088 * ROOT CAUSE of the blank rows, measured on the running page, NOT the hypothesis that 1089 * was offered. It is not dark-mode text colour branching. The dropdown is a descendant 1090 * of #et-navigation, so Extra's SUBMENU rule captured every element inside it: 1091 * 1092 * #et-navigation li a { 1093 * padding: 15px 0; border-bottom: 1px solid rgba(255,255,255,.1); 1094 * font-weight: 600; color: rgba(255,255,255,.6); text-transform: uppercase; 1095 * } 1096 * 1097 * That rule is written for Extra's own dropdown menus, which are dark. It is ID-scoped, 1098 * (1,0,2), so the previous `.cmz-paddle-cart-dropdown-row a { color: inherit }` at 1099 * (0,1,1) never applied â verified live: the row link computed 1100 * color: rgb(255,255,255) on a rgb(255,255,255) dropdown. White on white. The rows were 1101 * never empty; they were invisible. The same one rule also produced every other defect 1102 * the founder listed: the SHOUTING CAPS titles (text-transform), the 78px uneven rows 1103 * and cramped edges (padding: 15px 0), and phantom dividers (border-bottom). 1104 * 1105 * This is the third instance of the same trap class in this file (border, then padding, 1106 * now the whole dropdown), so it is handled as a class this time: everything inside the 1107 * dropdown is explicitly reset below at a specificity that beats an ID-scoped rule 1108 * (#et-navigation + a class + a type = (1,1,1) > (1,0,2)), instead of styling one 1109 * property at a time and waiting to find out which one the theme owns
1109next. 1110 * 1111 * The à being dark-on-dark in dark mode was the mirror image of the same failure: the 1112 * button took `color` from a global button rule (measured rgba(0,0,0,.6)) rather than 1113 * from the component, so it was invisible on the dark surface. Both themes now get 1114 * explicit tokens; neither is derived from "whatever it inherits". 1115 * 1116 * THEMING: the dropdown follows the CONTENT theme (:root[data-theme]), not the nav. 1117 * The nav is always near-black, but this panel overlays the page and is read as part of 1118 * the page, so a white sheet over a dark article was the wrong call. Every colour comes 1119 * from the four tokens below, so a change is one edit and both themes move together. 1120 * ============================================================================== */ 1121 .cmz-paddle-cart-dropdown { 1122 --cmz-mc-surface: #fff; 1123 --cmz-mc-text: #14171a; 1124 --cmz-mc-muted: #5c6570; 1125 --cmz-mc-border: rgba( 0, 0, 0, 0.10 ); 1126 /* A SECOND weight of hairline, for the one line that separates SECTIONS rather than 1127 peers (founder round 7: the totals ran straight into the last cart line with 1128 nothing between them â measured before the fix, the gap from the last row's box to 1129 the Subtotal row's box was exactly 0px). Reusing --cmz-mc-border there would have 1130 drawn a line the eye reads as one more row boundary, which is the opposite of 1131 "this block is the footer". Exactly DOUBLE the row alpha in both themes, so the 1132 step is the same size on white and on the dark panel and neither theme gets a 1133 heavier rule than the other. Deliberately NOT applied to the actions row's own 1134 border-top: that line stays weak, so the totals and the buttons read as two parts 1135 of ONE footer rather than as two more sections. */ 1136 --cmz-mc-border-strong: rgba( 0, 0, 0, 0.20 ); 1137 --cmz-mc-hover: rgba( 0, 0, 0, 0.055 ); 1138 /* MEASURED 2026-08-06. This token had ONE value for two jobs across two themes, and 1139 failed AA in three of the four combinations: as a fill under white text it is 1140 3.83:1, and as link text on the dark dropdown surface (#232327) it is ~3.1:1. 1141 Split into fill + ink, per theme, reusing the exact pair the subscription panel 1142 already uses (light #1e7d60 on white 5.05; dark #5dc49e with #0b1f12 ink 8.08) so 1143 the two Paddle surfaces finally speak one palette instead of two. */ 1144 --cmz-mc-accent: #1e7d60; 1145 --cmz-mc-accent-ink: #ffffff; 1146 --cmz-mc-shadow: 0 12px 32px rgba( 0, 0, 0, 0.18 ); 1147 /* Destructive hover for the empty-cart trash. Darkened for white; measures 5.7:1 on 1148 this surface, so it is legible as text-weight stroke and not just as "a red". */ 1149 --cmz-mc-danger: #c0392b; 1150 --cmz-mc-danger-bg: rgba( 192, 57, 43, 0.10 ); 1151 1152 position: absolute; 1153 top: 100%; 1154 right: 0; 1155 z-index: 100; 1156 margin-top: 10px; 1157 width: 320px; 1158 max-width: calc( 100vw - 32px ); 1159 padding: 0; /* rows own their padding, so dividers can run edge to edge */ 1160 border-radius: 12px; 1161 border: 1px solid var( --cmz-mc-border ); 1162 background: var( --cmz-mc-surface ) !important; 1163 color: var( --cmz-mc-text ) !important; 1164 box-shadow: var( --cmz-mc-shadow ); 1165 overflow: hidden; /* clips anything that tries to escape the rounded corners */ 1166 text-align: left; 1167 } 1168 :root[data-theme="dark"] .cmz-paddle-cart-dropdown { 1169 --cmz-mc-surface: #232327; 1170 --cmz-mc-text: #eceae7; 1171 --cmz-mc-muted: #a3a09b; 1172 --cmz-mc-border: rgba( 255, 255, 255, 0.13 ); 1173 --cmz-mc-border-strong: rgba( 255, 255, 255, 0.26 ); /* double, as in light */ 1174 --cmz-mc-hover: rgba( 255, 255, 255, 0.075 ); 1175 --cmz-mc-shadow: 0 12px 32px rgba( 0, 0, 0, 0.5 ); 1176 /* See the light block: the accent lifts and takes dark ink on a dark surface, exactly 1177 as the subscription panel's dark primary does. */ 1178 --cmz-mc-accent: #5dc49e; 1179 --cmz-mc-accent-ink: #0b1f12; 1180 /* The light theme's #c0392b measures ~3.0:1 on this dark surface â too dim to read as 1181 a warning. Lightened instead of reused; ~6.4:1 here. */ 1182 --cmz-mc-danger: #ff7a6b; 1183 --cmz-mc-danger-bg: rgba( 255, 122, 107, 0.14 ); 1184 } 1185 1186 /* The reset. Scoped at (1,1,1)+ so it outranks #et-navigation's (1,0,2) submenu rule 1187 and any global button styling, and applied to the element types the theme actually 1188 claims â anchors, buttons, spans â rather than a blanket *, which would also flatten 1189 the SVG sizing this component relies on. 1190 * 1191 * WHY colour AND font-weight CARRY !important THROUGHOUT THIS COMPONENT. 1192 * Specificity alone is not enough here and the first version of this rebuild proved it: 1193 * with the reset in place, the panel was correct in dark mode and STILL white-on-white 1194 * in light. Auditing every !important declaration that can reach an element inside this 1195 * panel turned up three more owners beyond Extra's stylesheet, none of them Extra's: 1196 * #et-navigation li a { color: white !important } (site inline CSS) 1197 * .menu-item a { font-weight: 590 !important } (site inline CSS) 1198 * :root[data-theme=dark] a:not(â¦) { color: var(--cmz-link) !important } (dark-mode.css) 1199 * An !important declaration outranks any non-important rule no matter how specific, so 1200 * the only way this component owns its own text is to declare colour and weight 1201 * !important as well. Treated as a CLASS: every colour and weight in the mini-cart does 1202 * this, not just the one that was caught failing, because the next site-wide rule to 1203 * appear will land on whichever one was left unarmoured. */ 1204 #et-navigation .cmz-paddle-cart-dropdown a, 1205 #et-navigation .cmz-paddle-cart-dropdown button, 1206 #et-navigation .cmz-paddle-cart-dropdown span, 1207 #et-navigation .cmz-paddle-cart-dropdown div { 1208 margin: 0; 1209 border: 0; 1210 border-radius: 0; 1211 background: none; 1212 box-shadow: none; 1213 text-transform: none !important; 1214 letter-spacing: normal !important; 1215 text-decoration: none !important; 1216 font-family: inherit; 1217 color: inherit !important; 1218 text-align: left;
1219 /* Extra's submenu rule sets `padding: 15px 0` on every anchor in here; each element 1220 below re-declares its own padding, so zeroing it here is the clean starting point 1221 rather than fighting per-property. */ 1222 padding: 0; 1223 min-width: 0; /* flex children must be allowed to shrink â see the title clamp */ 1224 } 1225 1226 /* Panel header: says whose panel this is and how full it is, so the first row is not 1227 the first thing the eye lands on with no context. */ 1228 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-head { 1229 display: flex; 1230 align-items: baseline; 1231 justify-content: space-between; 1232 gap: 8px; 1233 padding: 12px 14px 10px; 1234 border-bottom: 1px solid var( --cmz-mc-border ); 1235 font-size: 12px; 1236 line-height: 1.2; 1237 font-weight: 600 !important; 1238 color: var( --cmz-mc-muted ) !important; 1239 } 1240 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-count { 1241 font-weight: 500 !important; 1242 font-size: 12px; 1243 color: var( --cmz-mc-muted ) !important; 1244 } 1245 1246 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-list { 1247 max-height: 320px; /* ~4 rows, then scroll: the panel never grows off-screen */ 1248 overflow-y: auto; 1249 overflow-x: hidden; 1250 } 1251 1252 /* Named cmz-paddle-cart-DROPDOWN-row, deliberately distinct from the fallback cart 1253 page's .cmz-paddle-cart-row (that page's own remove-button click handler does 1254 .closest('.cmz-paddle-cart-row') â sharing the name would make it ambiguous which 1255 structure a click belonged to on a page where both exist, i.e. any page, since the 1256 nav is site-wide). */ 1257 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-row { 1258 display: flex; 1259 align-items: center; 1260 gap: 10px; 1261 padding: 10px 12px 10px 14px; 1262 border-bottom: 1px solid var( --cmz-mc-border ); 1263 } 1264 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-row:last-child { 1265 border-bottom: 0; /* the list's own edge is the divider; no dangling rule */ 1266 } 1267 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-row:hover { 1268 background: var( --cmz-mc-hover ); 1269 } 1270 /* Course artwork on each row (founder, Dometrain reference). 16:9 to match the card 1271 thumbnail the buyer just clicked, small enough to identify the course without 1272 turning the panel into a gallery. Decorative: the title beside it is the accessible 1273 name, so the img carries an empty alt. */ 1274 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-thumb { 1275 flex: 0 0 auto; 1276 width: 48px; 1277 height: 27px; 1278 border-radius: 4px; 1279 object-fit: cover; 1280 background: var( --cmz-mc-hover ); 1281 } 1282 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-row a { 1283 flex: 1 1 auto; 1284 min-width: 0; 1285 font-size: 13.5px; 1286 line-height: 1.35; 1287 font-weight: 500 !important; 1288 color: var( --cmz-mc-text ) !important; 1289 /* 1290 * The founder's stray lone "t" at the panel edge, reproduced and fixed rather than 1291 * styled around. Extra's cascade leaves `word-break: break-word` in force, which 1292 * permits breaking INSIDE a word; in a flex row whose title had no min-width:0 and 1293 * no clamp, a narrow render shattered titles mid-word. Measured, at a 160px row: 1294 * "Blazor WebAssembly Full-Stack Development" 1295 * â "Blazor" / "WebAssembl" / "y Full-Stack" / "Developmen" / "t" 1296 * â a lone "t" on its own line at the row's edge, exactly the fragment reported. 1297 * `word-break: normal` forbids mid-word breaks; the 2-line clamp plus ellipsis then 1298 * bounds the row height instead of letting a long title dictate it. 1299 */ 1300 word-break: normal; 1301 overflow-wrap: break-word; 1302 display: -webkit-box; 1303 -webkit-line-clamp: 2; 1304 -webkit-box-orient: vertical; 1305 overflow: hidden; 1306 } 1307 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-row a:hover { 1308 color: var( --cmz-mc-accent ) !important; 1309 } 1310
1311 /* Remove control. A real 28px target with a drawn glyph, not a text "Ã" â a text glyph 1312 inherits font-family/size/transform from whatever wins the cascade (which is how it 1313 ended up mis-sized and off-centre), while an SVG stroke cannot be restyled by a font 1314 rule and centres exactly. */ 1315 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-row-remove { 1316 flex: 0 0 auto; 1317 display: inline-flex; 1318 align-items: center; 1319 justify-content: center; 1320 width: 28px; 1321 height: 28px; 1322 border-radius: 8px; 1323 background: transparent; 1324 color: var( --cmz-mc-muted ) !important; 1325 cursor: pointer; 1326 transition: background-color 120ms ease, color 120ms ease; 1327 } 1328 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-row-remove:hover, 1329 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-row-remove:focus-visible { 1330 background: var( --cmz-mc-hover ); 1331 color: var( --cmz-mc-text ) !important; 1332 } 1333 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-row-remove:disabled { 1334 opacity: 0.4; 1335 cursor: default; 1336 } 1337 1338 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-empty { 1339 padding: 22px 14px; 1340 font-size: 13px; 1341 line-height: 1.4; 1342 text-align: center; 1343 color: var( --cmz-mc-muted ) !important; 1344 } 1345 1346 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-actions { 1347 display: flex; 1348 align-items: center; 1349 justify-content: space-between; 1350 gap: 10px; 1351 padding: 11px 12px 12px; 1352 border-top: 1px solid var( --cmz-mc-border ); 1353 } 1354 /* 1355 * Empty cart â a trash-can ICON, not a label (founder: "people will get that better"). 1356 * It stays the quiet secondary beside the filled green primary, so hierarchy is now 1357 * carried entirely by weight of colour and mass: a bare muted glyph on the left, a solid 1358 * brand-green button on the right. Nothing here is on a type scale any more, which also 1359 * ends the wrapping problem the labelled version had for good. 1360 * 1361 * Destructive affordance: neutral at rest (it must not shout on a panel the buyer is 1362 * only browsing), shifting to danger red on hover/focus â the conventional signal, and 1363 * the only place red appears in this component, so it reads as a warning rather than 1364 * decoration. Both themes get their own red: the light one is darkened for contrast on 1365 * white, the dark one lightened, because a single red cannot be legible on both. 1366 * 1367 * The button keeps a real accessible name (aria-label) plus a title tooltip for mouse 1368 * users, since the glyph alone carries no text for a screen reader to announce. 1369 */ 1370 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-empty-link { 1371 flex: 0 0 auto; 1372 display: inline-flex; 1373 align-items: center; 1374 justify-content: center; 1375 width: 32px; 1376 height: 32px; 1377 padding: 0; 1378 border-radius: 8px; 1379 line-height: 1; 1380 color: var( --cmz-mc-muted ) !important; 1381 cursor: pointer; 1382 transition: background-color 120ms ease, color 120ms ease; 1383 } 1384 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-empty-link:hover, 1385 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-empty-link:focus-visible { 1386 background: var( --cmz-mc-danger-bg ); 1387 color: var( --cmz-mc-danger ) !important; 1388 } 1389 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-empty-link:disabled { 1390 opacity: 0.5; 1391 cursor: default; 1392 } 1393 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-empty-link:disabled:hover { 1394 background: transparent; 1395 color: var( --cmz-mc-muted ) !important; 1396 } 1397 /* Repeated class lifts this over Tutor's own .tutor-btn-primary declarations without 1398 reaching for !important on every line (same technique already used by the Add to Cart 1399 rule above, and documented in the cache-safe-theming playbook). */ 1400 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-checkout.cmz-paddle-cart-dropdown-checkout { 1401 /* Grows to fill everything the trash does not (Dometrain's full-width checkout, 1402 adapted: we keep the destructive action on the row, so "as wide as it can be" 1403 is the honest port of "full width"). */ 1404 flex: 1 1 auto; 1405 display: inline-flex; 1406 align-items: center; 1407 justify-content: center; 1408 gap: 6px; 1409 padding: 9px 14px; 1410 border-radius: 7px; 1411 background: var( --cmz-mc-accent ) !important; 1412 color: var( --cmz-mc-accent-ink, #fff ) !important; 1413 font-size: 13px; 1414 font-weight: 600 !important; 1415 line-height: 1; 1416 white-space: nowrap; 1417 cursor: pointer; 1418 transition: filter 120ms ease; 1419 } 1420 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-checkout.cmz-paddle-cart-dropdown-checkout:hover { 1421 filter: brightness( 1.08 ); 1422 } 1423 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-checkout .cmz-paddle-mc-arrow { 1424 font-size: 14px; 1425 line-height: 1; 1426 } 1427 1428 /* 1429 * Touch sizing for the stacked menu. This block MUST come after the component's base 1430 * rules, not up with the other mobile rules earlier in this stylesheet: its selectors 1431 * carry the same specificity as the base ones they override, so ordering is the whole 1432 * tie-break. Placing it earlier is exactly why the first attempt measured a 28px remove 1433 * button on a 375px viewport instead of the 36px it declared â a media query does not 1434 * add specificity, and this file is served as one stylesheet. 1435 * 1436 * Targets: Apple and Material both floor a touch target at ~44px. The rows reach that 1437 * through padding, and the remove control is squared up to 36px rather than staying a 1438 * 28px mouse-sized hit area next to a link the thumb is trying to avoid. 1439 */ 1440 @media only screen and ( max-width: 1024px ) { 1441 /* In the stacked menu the panel is not an overlay â it is a section of the menu, so 1442 it drops the float and the shadow and runs the full width of the row. Tokens are 1443 unchanged, so light and dark behave exactly as they do on desktop. */ 1444 #et-navigation .cmz-paddle-cart-dropdown { 1445 position: static; 1446 flex: 0 0 100%; 1447 width: 100%; 1448 max-width: none; 1449 box-shadow: none; 1450 margin-top: 6px; 1451 } 1452 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-row { 1453 padding: 12px 10px 12px 14px; 1454 gap: 12px; 1455 } 1456 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-row a { 1457 font-size: 14px; 1458 } 1459 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-row-remove { 1460 width: 36px; 1461 height: 36px; 1462 } 1463 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-dropdown-checkout.cmz-paddle-cart-dropdown-checkout { 1464 padding: 11px 14px; 1465 font-size: 13.5px; 1466 } 1467 /* The trash glyph stays 16px â it is an icon, not a target. The BUTTON grows to the 1468 44px both Apple and Material floor a touch target at, so the hit area is thumb-safe 1469 without the icon itself becoming a billboard for a secondary action. */ 1470 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-cart-empty-link { 1471 width: 44px; 1472 height: 44px; 1473 } 1474 #et-navigation .cmz-paddle-cart-dropdown .cmz-paddle-mc-list { 1475 max-height: none; /* the page already scrolls; no nested scroller on touch */ 1476 } 1477 } 1478 </style> 1479 <style id="cmz-account-signin-css"> 1480 #et-navigation li a.cmz-account-signin { 1481 display: inline-flex !important; 1482 align-items: center; 1483 padding: 6px 14px !important; 1484 border: 1px solid rgba( 255, 255, 255, 0.35 ) !important; 1485 border-radius: 6px !important; 1486 background: rgba( 255, 255, 255, 0.10 ) !important; 1487 color: #fff !important; 1488 font-size: 13px; 1489 line-height: 1.2; 1490 font-weight: 600 !important; 1491 letter-spacing: 0.01em !important; 1492 text-transform: none !important; /* calm â Extra would shout SIGN IN */ 1493 text-decoration: none !important; 1494 box-shadow: none !important; 1495 cursor: pointer; 1496 transition: background-color 120ms ease, border-color 120ms ease; 1497 } 1498 #et-navigation li a.cmz-account-signin:hover, 1499 #et-navigation li a.cmz-account-signin:focus, 1500 #et-navigation li a.cmz-account-signin:focus-visible, 1501 #et-navigation li a.cmz-account-signin:active, 1502 #et-navigation li a.cmz-account-signin:visited { 1503 text-decoration: none !important; 1504 box-shadow: none !important; 1505 color: #fff !important; 1506 border-color: rgba( 255, 255, 255, 0.35 ) !important; 1507 } 1508 #et-navigation li a.cmz-account-signin:hover, 1509 #et-navigation li a.cmz-account-signin:focus-visible { 1510 background: rgba( 255, 255, 255, 0.18 ) !important; 1511 border-color: rgba( 255, 255, 255, 0.55 ) !important; 1512 } 1513 #et-navigation li a.cmz-account-signin:focus-visible { 1514 outline: 2px solid #ffb912 !important; 1515 outline-offset: 2px; 1516 } 1517 /* Extra's animated 2px hover bar at (1,1,4). */ 1518 #et-navigation > ul > li.cmz-account-item > a::before, 1519 #et-navigation > ul > li.cmz-account-item > a::after {
1520 content: none !important; 1521 display: none !important; 1522 } 1523 /* Desktop optical lift (~30px chip in the 16px-band-over-reserve anchor geometry); 1524 #et-menu-scoped so the stacked clone never inherits it. */ 1525 @media only screen and ( min-width: 1025px ) { 1526 #et-navigation > #et-menu > .cmz-account-item > a.cmz-account-signin { 1527 transform: translateY( -7px ); 1528 } 1529 } 1530 /* Stacked mobile menu: compact chip on the list's left spine, row rhythm on the li. */ 1531 @media only screen and ( max-width: 1024px ) { 1532 #et-navigation .cmz-account-item-signed-out { 1533 padding: 8px 0 !important; 1534 } 1535 } 1536 @media ( prefers-reduced-motion: reduce ) { 1537 #et-navigation li a.cmz-account-signin { 1538 transition: none; 1539 } 1540 } 1541 </style> 1542 <style class="wp-fonts-local"> 1543@font-face{font-family:Inter;font-style:normal;font-weight:300 900;font-display:fallback;src:url('https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/fonts/Inter-VariableFont_slnt,wght.woff2') format('woff2');font-stretch:normal;} 1544@font-face{font-family:Cardo;font-style:normal;font-weight:400;font-display:fallback;src:url('https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/fonts/cardo_normal_400.woff2') format('woff2');} 1545</style> 1546<link rel="icon" href="https://courses.code-maze.com/wp-content/uploads/2020/01/Code-Maze-Favicon.png" sizes="32x32" /> 1547<link rel="icon" href="https://courses.code-maze.com/wp-content/uploads/2020/01/Code-Maze-Favicon.png" sizes="192x192" /> 1548<link rel="apple-touch-icon" href="https://courses.code-maze.com/wp-content/uploads/2020/01/Code-Maze-Favicon.png" /> 1549<meta name="msapplication-TileImage" content="https://courses.code-maze.com/wp-content/uploads/2020/01/Code-Maze-Favicon.png" /> 1550 <style id="cmz-hide-cart"> 1551 .et-cart-info, 1552 #et-secondary-nav .et-cart-info, 1553 li.et-cart-info, 1554 .et_pb_menu_cart_line, 1555 .et-menu-cart { display: none !important; } 1556 </style> 1557 <style id="et-extra-customizer-global-cached-inline-styles">.widget_et_recent_tweets .widget_list a,.widget_et_recent_tweets .et-extra-icon,.widget_et_recent_tweets .widget-footer .et-extra-social-icon,.widget_et_recent_tweets .widget-footer .et-extra-social-icon::before,.project-details .project-details-title,.et_filterable_portfolio .filterable_portfolio_filter a.current,.et_extra_layout .et_pb_extra_column_main .et_pb_column .module-head h1,.et_pb_extra_column .module-head h1,#portfolio_filter a.current,.woocommerce div.product div.summary .product_meta a,.woocommerce-page div.product div.summary .product_meta a,.et_pb_widget.woocommerce .product_list_widget li .amount,.et_pb_widget li a:hover,.et_pb_widget.woocommerce .product_list_widget li a:hover,.et_pb_widget.widget_et_recent_videos .widget_list .title:hover,.et_pb_widget.widget_et_recent_videos .widget_list .title.active,.woocommerce .woocommerce-info:before,.woocommerce .summary .price .amount,.woocommerce-page .summary .price .amount,.et_pb_widget.woocommerce.widget_shopping_cart .widget_shopping_cart_content .total .amount,.woocommerce .star-rating span:before,.woocommerce ul.products li.product a .price ins .amount,.woocommerce-page ul.products li.product a .price ins .amount,.woocommerce ul.products li.product a .price .amount,.woocommerce-page ul.products li.product a .price .amount,.woocommerce ul.products li.product a .amount,.woocommerce-page ul.products li.product a .amount,widget.woocommerce.widget_shopping_cart .widget_shopping_cart_content .product_list_widget li a.remove,.woocommerce ul.products li.product a .price ins,.woocommerce-page ul.products li.product a .price ins,.et_pb_widget.woocommerce.widget_price_filter .price_slider_wrapper .price_slider_amount .price_label .to,.et_pb_widget.woocommerce.widget_price_filter .price_slider_wrapper .price_slider_amount .price_label .from{color:#3e5062}.single .score-bar,.widget_et_recent_reviews .review-breakdowns .score-bar,.et_pb_extra_module .posts-list article .post-thumbnail,.et_extra_other_module .posts-list article .post-thumbnail,.et_pb_widget .widget_list_portrait,.et_pb_widget .widget_list_thumbnail,.quote-format,.link-format,.audio-format .audio-wrapper,.paginated .pagination li.active,.score-bar,.review-summary-score-box,.post-footer .rating-stars #rating-stars img.star-on,.post-footer .rating-stars #rated-stars img.star-on,.author-box-module .author-box-avatar,.timeline-menu li.active a:before,.woocommerce div.product form.cart .button,.woocommerce div.product form.cart .button.disabled,.woocommerce div.product form.cart .button.disabled:hover,.woocommerce-page div.product form.cart .button,.woocommerce-page div.product form.cart .button.disabled,.woocommerce-page div.product form.cart .button.disabled:hover,.woocommerce div.product form.cart .read-more-button,.woocommerce-page div.product form.cart .read-more-button,.woocommerce div.product form.cart .post-nav .nav-links .button,.woocommerce-page div.product form.cart .post-nav .nav-links .button,.woocommerce .woocommerce-message,.woocommerce-page .woocommerce-message,.woocommerce button.button.alt,.woocommerce .et_pb_widget .buttons .button,.woocommerce .et_pb_widget .buttons .button:hover,.woocommerce .et_pb_widget .buttons .button:after,.woocommerce input[type="submit"],.woocommerce #respond #submit,.woocommerce .button.alt,.et_pb_widget.woocommerce.widget_shopping_cart .widget_shopping_cart_content .product_list_widget li a.remove:hover,.et_pb_widget.woocommerce.widget_price_filter .price_slider_wrapper .price_slider .ui-slider-range{background-color:#3e5062}
1557#et-menu>li>ul,#et-menu li>ul,#et-menu>li>ul>li>ul,.et-top-search-primary-menu-item .et-top-search,.et_pb_module,.module,.page article,.authors-page .page,#timeline-sticky-header,.et_extra_other_module,.woocommerce .woocommerce-info,.woocommerce div.product .woocommerce-tabs ul.tabs li.active a{border-color:#3e5062}body{font-size:15px}a,a:visited,.post-content a,.et_pb_pagebuilder_layout .et_pb_blurb_container p a,.et_pb_pagebuilder_layout .et_pb_code a,.et_pb_pagebuilder_layout .et_pb_promo_description a,.et_pb_pagebuilder_layout .et_pb_newsletter_description a,.et_pb_pagebuilder_layout .et_pb_team_member_description>a,.et_pb_pagebuilder_layout .et_pb_pricing li a,.et_pb_pagebuilder_layout .et_pb_slide_content a,.et_pb_pagebuilder_layout .et_pb_tab a,.et_pb_pagebuilder_layout .et_pb_text a,.et_pb_pagebuilder_layout .et_pb_toggle_content a,.et_pb_pagebuilder_layout .et_pb_fullwidth_code a{color:rgba(0,3,219,0.97)}body{color:#000000}h1,h2,h3,h4,h5,h6,h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:rgba(0,0,0,0.89)}.archive h1,.search h1{color:rgba(0,0,0,0.89)}#et-info .et-cart,#et-info .et-cart:before,#et-info .et-top-search .et-search-field,#et-info .et-top-search .et-search-submit:before{font-size:11.000000px}#et-info .et-extra-social-icons .et-extra-icon{font-size:14.000000px;line-height:27.500000px;width:27.500000px;height:27.500000px}#et-info .et-cart{padding:8.000000px 9.166667px}#et-info .et-top-search .et-search-field{padding:6.000000px 9.166667px}#et-info .et-top-search .et-search-field{width:110.000000px}#et-info .et-top-search .et-search-submit:before{margin-top:-5.500000px}@media only screen and (min-width:768px){#main-header .logo{height:51.92px;margin:18.04px 0}.header.left-right #et-navigation>ul>li>a{padding-bottom:36px}}@media only screen and (min-width:768px){.et-fixed-header #main-header .logo{height:30.16px;margin:36.92px 0}.et-fixed-header .header.left-right #et-navigation>ul>li>a{padding-bottom:44px}}.nav li ul{padding:10px 0}.tutor-container ul li{font-size:17px}#et-navigation li li{line-height:20px!important}.with_sidebar .et_extra_layout .et_pb_extra_column_main .et_pb_column_main,.with_sidebar .et_pb_extra_column_main{width:100%!important;max-width:100%!important;min-width:100%!important}article .post-header h1{font-size:35px}.post-content h2{font-size:30px}.post-content h2.entry-title{font-size:18px}.type-page h1.entry-title{font-size:35px}#wpd-bubble-wrapper{bottom:95px}.page-container{background-color:white!important}.tutor-wrap{margin-top:20px;background-color:white}#et-navigation li li{line-height:4px}body:not(.logged-in) #menu-item-85575{display:none}body:not(.logged-in) #menu-item-73074{display:none}.single-lesson header{display:none}.single-lesson footer{display:none}.single-tutor_quiz header{display:none}.single-tutor_quiz footer{display:none}.single-tutor_assignments header{display:none}.single-tutor_assignments footer{display:none}.tutor-quiz-single-entry-wrap{background:white}.tutor-accordion-item-header.is-active{background:var(--tutor-color-primary);color:white!important}.tutor-accordion-item-header.is-active::after{color:white!important}.tutor-accordion-item-header.is-active .tooltip-wrap.tooltip-icon{color:white}.tutor-accordion-item-header.is-active .tutor-course-topic-summary{color:white}.tutor-course-content-list-item-title a:visited{color:#8f9796}.tutor-btn-primary{text-transform:uppercase;font-weight:600;color:white}.tutor-btn-primary:visited{color:white}.tutor-btn-secondary{color:white;background-color:rgb(35 147 113)}.tutor-btn-secondary:visited{color:white}.tutor-card-footer .tutor-btn-outline-primary:visited{color:black}.tutor-card-footer .tutor-btn-outline-primary:hover{color:white}@media(min-width:768px){.tutor-course-details-widget-col-2 ul>li{width:calc(80% - 1.2rem)!important}}@media(min-width:1200px){.tutor-course-spotlight-wrapper .tutor-col-xl-8{flex:0 0 auto;width:80%}}.tutor-container h2{font-size:30px}.tutor-container p{font-size:17px}.enlighter-t-monokai .enlighter span{font-size:1.4em}.enlighter-default{padding-bottom:4px;padding-top:4px}.tutor-course-sidebar-card-pricing .woocommerce-Price-amount{font-size:35px}.plyr__poster{background-size:cover}button.plyr__control{background:rgb(255 255 255 / 40%)}#tutor-quiz-single-multiple-choice .tutor-form-check-input{display:block}.woocommerce-form-coupon-toggle{display:none}.tutor-card-footer{display:none}.tutor-card a{color:var(--tutor-color-primary)}.tutor-card a:visited{color:var(--tutor-color-primary)}.tutor-card .tutor-btn-primary{color:white}.tutor-card .tutor-btn-primary:visited{color:white}.tutor-card h3{font-weight:bold}.course-archive-page{margin-bottom:80px}.tutor-mt-auto{margin-top:0px}.tutor-meta:has(.tutor-icon-clock-line){display:none}.tutor-container a{color:#239371}.tutor-course-topic-single-footer{position:fixed;bottom:0px;width:-moz-available;width:-webkit-fill-available;width:fill-available}.tutor-accordion-item-body input[type='checkbox']{display:inherit}.tutor-course-single-content-wrapper input.tutor-form-check-input.tutor-form-check-circle{height:25px;margin-top:-1px;border:1px solid var(--tutor-border-color)}.tutor-course-single-sidebar-wrapper .tutor-course-topic-item .tutor-form-check-circle[checked]{border-color:#239371;background-color:#239371}
1557.tutor-instructor .profile-name :nth-child(4){display:none}.tutor-instructor .profile-name :nth-child(5){display:none}.tutor-course-topic-single-footer.tutor-px-32.tutor-py-12{padding-top:5px;padding-bottom:5px}button.tutor-btn{display:inline-flex;align-items:center;font-weight:400;line-height:1.4;color:var(--tutor-color-primary);text-align:center;text-decoration:none;vertical-align:middle;user-select:none;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);padding:8px 16px;font-size:16px;border-radius:6px;box-sizing:border-box;cursor:pointer;transition:color 200ms ease-in-out,background-color 200ms ease-in-out,border-color 200ms ease-in-out}button.start-quiz-btn{display:inline-flex;align-items:center;font-weight:400;line-height:1.4;color:var(--tutor-color-primary);text-align:center;text-decoration:none;vertical-align:middle;user-select:none;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);padding:8px 16px;font-size:16px;border-radius:6px;box-sizing:border-box;cursor:pointer;transition:color 200ms ease-in-out,background-color 200ms ease-in-out,border-color 200ms ease-in-out}button.tutor-btn-primary{text-transform:uppercase;font-weight:600;color:white;border-color:var(--tutor-color-primary);background-color:var(--tutor-color-primary);color:#fff}button.tutor-btn-ghost{padding:0px!important;position:relative;color:#757c8e;border-radius:0;outline:0}button.tutor-btn-ghost.tutor-has-underline{position:relative}button.tutor-btn-ghost.tutor-has-underline:after{content:" ";position:absolute;bottom:0px;left:0;width:100%;height:1px;background-color:#757c8e;transition:background-color 200ms ease-in-out}button.tutor-btn-ghost:hover,.tutor-btn-ghost:focus,.tutor-btn-ghost:active{color:var(--tutor-color-primary);outline:0;box-shadow:none}button.tutor-btn-ghost:hover.tutor-has-underline:after,.tutor-btn-ghost:focus.tutor-has-underline:after,.tutor-btn-ghost:active.tutor-has-underline:after{background-color:var(--tutor-color-primary)}.tutor-wrap .tutor-color-black{color:#212327}.single-course-bundle .tutor-fs-7 .woocommerce-Price-amount{text-decoration:line-through}.home-page-content article{border-radius:0px!important;box-shadow:none!important}.et_pb_code_inner .wrapper{min-height:50px}.et_pb_code_inner .wrapper-title span.bold{font-weight:bold}.et_pb_code_inner .wrapper-title h2{font-size:17px!important}.et_pb_row{max-width:1480px}.et_pb_image img{box-shadow:#e0e0e0 2px 2px 0px 1px}.home-page-content .post-content p{display:none}.home-page-content .entry-title{width:64%;font-size:17px;padding-left:5px}.home-page-content .post-content a{position:absolute;top:5px;right:0px;padding:5px 20px;background:#405061;color:white}@media(max-width:800px){.home-page-content .post-content a{top:-10px!important}}.home-page-content article{border-top-width:0px;background:transparent;border-bottom:1px solid;min-height:50px}.home-page-content a{font-weight:300;color:#3E5062}.wrapper{display:flex;border-bottom:1px solid}.wrapper-title{flex:2;padding-right:10px}.wrapper-title h2{font-size:20px}@media (max-width:1200px) and (min-width:982px){.wrapper-title{flex:1}}.wrapper-title a{font-weight:300;color:#3E5062!important}.read-more-wrapper{flex:1}.read-more-wrapper a{position:absolute;top:5px;right:0px;padding:5px 19px;background:#405061;color:white!important;text-transform:uppercase;font-size:13px;width:116px;text-align:center;box-shadow:#e0e0e0 2px 2px 0px 1px;min-height:35px}.read-more-wrapper a.series{background:#D4A753}.tablet-row .et_pb_column{width:45%!important;float:left;margin-right:50px}.advads-widget{}.advads-widget h4{display:none}.et_extra_layout .et_pb_column_sidebar,.et_pb_extra_column_sidebar{width:310px!important;max-width:310px!important;min-width:310px!important;display:table}@media (min-width:1025px){.et_pb_extra_column_sidebar{display:table!important;position:relative}}.fixed-sidebar{position:fixed}.relative-sidebar{position:relative}.et_pb_widget{}p+ul{margin-top:-25px}p:last-of-type+ul{margin-top:0px}#mc4wp_form_widget-2{border-top:6px solid #3e5062;border-radius:3px}#mc4wp_form_widget-2 h4{display:none}#mc4wp-form-1{width:300px}h1,h2,h3,h4,h5,h6{text-transform:initial}code{background:rgba(0,0,0,.05);padding:3px 4px;font-family:Menlo,Monaco,"Courier New",Courier,monospace;color:rgb(41 137 112)}.crayon-theme-visualstudiodark{margin-bottom:15px}.read-more-button{color:rgba(0,0,0,.8)!important}ol li,ul li{margin-bottom:0.6em;margin-left:40px}ul ul{margin-bottom:-10px;margin-left:-30px}article h2{font-size:25px}sup{vertical-align:super;font-size:smaller}sub{vertical-align:sub;font-size:smaller}.top_ad_placement{text-align:center;margin-bottom:15px}p:last-of-type{margin-bottom:24px}.fixed-max-width{max-width:360px}.cat-item{color:burlywood}.et_pb_main_blurb_image img{max-width:180px!important}@media (max-width:980px){#profile-blurb{width:100%!important;margin-bottom:100px}}@media(max-width:768px){.mobile_friendly_ad{display:none}}.wrap-collabsible{margin-bottom:15px}.lbl-toggle{display:block;font-weight:bold;font-family:monospace;font-size:1.2rem;text-transform:uppercase;padding:12px;padding-left:16px;color:#3e5062;background:#e8e8e8;cursor:pointer;border-radius:5px;transition:all 0.25s ease-out;border-top:5px solid #3e5062}.lbl-toggle:hover{color:#417ab3}.lbl-toggle::before{content:' ';display:inline-block;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid currentColor;vertical-align:middle;margin-right:.7rem;transform:translateY(-2px);transition:transform .2s ease-out}.toggle:checked+.lbl-toggle::before{transform:rotate(90deg) translateX(-3px)}.collapsible-content{max-height:0px;overflow:hidden;transition:max-height .25s ease-in-out}.toggle:checked+.lbl-toggle+.collapsible-content{max-height:450px}.toggle:checked+.lbl-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.collapsible-content .content-inner{background:#fbfbfb;border-bottom-left-radius:7px;border-bottom-right-radius:7px;padding:.5rem 1rem}.innerContent{margin-bottom:10px;margin-top:10px}.innerContent li a{color:#417ab3;font-weight:600}.innerContent li a:visited{color:#417ab3;font-weight:600}.innerContent li{font-weight:600;color:darkgoldenrod}#et-mobile-navigation nav{z-index:2}.et_pb_extra_column_sidebar .et_pb_widget{background:none;overflow:visible;width:300px;box-shadow:none}.et_pb_extra_column_sidebar{top:0;position:sticky;height:auto}.page-template .et_pb_image img{box-shadow:none!important}.page-id-50422 .et_pb_row_11,.page-id-50422 .et_pb_row_13,.page-id-50422 .et_pb_row_15,.page-id-50422 .et_pb_row_17,.page-id-50422 .et_pb_row_19{position:relative;width:80%;max-width:1080px;margin:auto}.post-content a.more-link{color:#fff!important;border-width:0!important;border-radius:3px;font-family:'Montserrat',Helvetica,Arial,Lucida,sans-serif!important;background-color:#FB275D;padding:10px}li#menu-item-51162 a{color:#ffc67d}.latest_posts_page a.more-link{width:120px!important;float:right;text-align:center;margin-bottom:2px}.et_pb_posts .et_pb_post{position:relative;border-bottom:2px solid #fb275d;border-radius:0px}.cdmz-emai-optin .et_pb_signup_custom_field_0{display:none!important}#tve_leads_end_content{border:0px!important}#main-header{background:#000000e8!important}#top-header{background:#333333!important}.menu-item a{font-weight:590!important}#et-navigation .menu-item-1757 a{color:rgb(255,198,125)!important}#et-navigation .menu-item-1757 a::before{background:rgb(255,198,125)!important}#et-navigation li a{color:white!important}.page-id-50422 header{display:none}.page-id-52634 header{display:none}.page-id-52634{background-color:white}.page-id-60192 header{display:none}.page-id-60192 footer{display:none}.page-id-50193 header{display:none}.page-id-50193 footer{display:none}.page-id-60022 header{display:none}.page-id-60022 footer{display:none}article.post a{color:#DC2323;text-decoration:none;font-weight:bold;transition:0.5s}article.page a{color:#DC2323;text-decoration:none;font-weight:bold;transition:0.5s}article.post a:hover{color:#333333;text-decoration:underline;transition:0.5s}.enlighter-default{font-family:consolas,monospace}code{padding:2px 4px;border:1px solid lightgray;border-radius:3px;font-weight:400;font-family:consolas,monospace;background:rgb(0 0 0 / 4%)}p+ol{margin-top:-25px}.enlighter-t-monokai.enlighter-v-codegroup .enlighter-codegroup-switch{padding:0px!important}.banner-wrapper{padding-bottom:1px;border-bottom:2px solid #fb275d;font-size:15px;width:70%;margin:15px auto}.banner-wrapper-blazor{border-color:#ffbc00}.banner-wrapper-blazor strong a{color:blueviolet}.image-row{margin-bottom:10px!important}.banner-image{margin-top:10px}.banner-text{margin-bottom:10px!important;text-align:center}.post-thumbnail.header{display:none}.post-header{padding-bottom:0px}.et_pb_widget.widget_text .textwidget{padding:0}.et_pb_widget .widgettitle{display:none}.mc4wp-form-theme{margin:0}#frmCSCF .input-xlarge{width:-webkit-fill-available}#frmCSCF #cscf_SubmitButton{margin-top:10px}@media only screen and (min-width:1200px){.tutor-course-single-content-wrapper{display:flex}.tutor-course-single-sidebar-wrapper{overflow-y:auto;min-height:0;max-height:100vh;
1557top:0;position:sticky}}.post-85544 .page article{border:none!important}.page article{border-top:0px solid!important;border-color:#00A8FF!important;margin:0 0 0!important;box-shadow:none}.page-id-85544 .entry-content{max-width:none!important;width:100%!important;padding:0!important}.page-id-85544 .post-wrap{max-width:none!important;width:100%!important;padding:0!important}.page-id-85544 h1{display:none}.tutor-course-details-content h2{display:none}.tutor-course-details-title{font-size:2rem}.cursor{display:inline-block;width:8px;height:1em;background:#ffb912;margin-left:4px;vertical-align:-2px;animation:blink 1.1s step-end infinite}@keyframes blink{50%{opacity:0}}.et-top-cart-total{display:none}.tutor-quiz-questions-pagination ul li a{padding:7px 3px}.tutor-lesson-wrapper{--v2-anti-border:#b85450;--v2-anti-bg:#fdf3f2;--v2-anti-head:#8c2f2b;--v2-note-border:#94a3b8;--v2-note-bg:#f5f7fa;--v2-prompt-border:#d79b00;--v2-prompt-bg:#fffaf0;--v2-sol-border:#1b7f4b;--v2-sol-bg:#f2faf5;--v2-text:inherit}:root[data-theme="dark"] .tutor-lesson-wrapper{--v2-anti-bg:rgba(184,84,80,0.14);--v2-anti-head:#f0a9a5;--v2-note-bg:rgba(148,163,184,0.12);--v2-prompt-bg:rgba(215,155,0,0.12);--v2-sol-bg:rgba(27,127,75,0.14)}.tutor-lesson-wrapper .antipattern,.tutor-lesson-wrapper .readnote,.tutor-lesson-wrapper .prompt,.tutor-lesson-wrapper .solution{margin:1.6em 0;padding:1em 1.2em;border-left:4px solid transparent;border-radius:4px;line-height:1.65}.tutor-lesson-wrapper .antipattern{border-left-color:var(--v2-anti-border);background:var(--v2-anti-bg)}.tutor-lesson-wrapper blockquote.antipattern{font-style:normal;quotes:none}.tutor-lesson-wrapper .antipattern>p:first-child,.tutor-lesson-wrapper .readnote>p:first-child,.tutor-lesson-wrapper .prompt>p:first-child,.tutor-lesson-wrapper .solution>p:first-child{margin-top:0}.tutor-lesson-wrapper .antipattern>p:last-child,.tutor-lesson-wrapper .readnote>p:last-child,.tutor-lesson-wrapper .prompt>p:last-child,.tutor-lesson-wrapper .solution>p:last-child{margin-bottom:0}.tutor-lesson-wrapper blockquote.antipattern::before,.tutor-lesson-wrapper blockquote.antipattern::after{content:none}.tutor-lesson-wrapper .antipattern strong{color:var(--v2-anti-head)}.tutor-lesson-wrapper .readnote{border-left-color:var(--v2-note-border);background:var(--v2-note-bg)}.tutor-lesson-wrapper .prompt{border-left-color:var(--v2-prompt-border);background:var(--v2-prompt-bg);font-weight:500}.tutor-lesson-wrapper .prompt::before{content:"Before you read on";display:block;margin-bottom:0.4em;font-size:0.78em;font-weight:700;letter-spacing:0.06em;text-transform:uppercase;opacity:0.75}.tutor-lesson-wrapper .solution{border-left-color:var(--v2-sol-border);background:var(--v2-sol-bg)}.tutor-lesson-wrapper details.solution{padding:0;overflow:hidden}.tutor-lesson-wrapper details.solution>summary{cursor:pointer;padding:0.85em 1.2em;font-weight:700;list-style:none;user-select:none}.tutor-lesson-wrapper details.solution>summary::-webkit-details-marker{display:none}.tutor-lesson-wrapper details.solution>summary::before{content:"25B8";display:inline-block;width:1em;transition:transform 0.15s ease}.tutor-lesson-wrapper details.solution[open]>summary::before{transform:rotate(90deg)}.tutor-lesson-wrapper details.solution>*:not(summary){padding:0 1.2em}.tutor-lesson-wrapper details.solution>*:last-child{padding-bottom:1em}.tutor-lesson-wrapper figure{margin:1.8em 0;text-align:center}.tutor-lesson-wrapper figure svg{display:block;width:100%;max-width:720px;height:auto;margin:0 auto}.tutor-lesson-wrapper figcaption{margin-top:0.7em;font-size:0.9em;opacity:0.92;text-align:center}.tutor-lesson-wrapper figure svg{color:inherit}.tutor-lesson-wrapper{--v2-tbl-border:#d7dde5;--v2-tbl-head-bg:#f5f7fa;--v2-tbl-hover:#f0f3f7}:root[data-theme="dark"] .tutor-lesson-wrapper{--v2-tbl-border:#3a4149;--v2-tbl-head-bg:#262b31;--v2-tbl-hover:#22272d}.tutor-lesson-wrapper .tablepress{margin:1.6em 0;border-collapse:collapse;background:transparent;--text-color:currentColor;--head-text-color:currentColor;--odd-text-color:currentColor;--even-text-color:currentColor;--hover-text-color:currentColor;--head-bg-color:var(--v2-tbl-head-bg);--odd-bg-color:transparent;--even-bg-color:transparent;--hover-bg-color:var(--v2-tbl-hover);--border-color:var(--v2-tbl-border)}.tutor-lesson-wrapper .tablepress th,.tutor-lesson-wrapper .tablepress td{border:1px solid var(--v2-tbl-border);padding:0.55em 0.8em;line-height:1.55}.tutor-lesson-wrapper .tablepress thead th{font-weight:600}.tutor-lesson-wrapper blockquote.antipattern,.tutor-lesson-wrapper blockquote.readnote,.tutor-lesson-wrapper blockquote.solution{font-weight:400}.tutor-lesson-wrapper details.solution-fold{margin:1.6em 0}.tutor-lesson-wrapper details.solution-fold>summary{cursor:pointer;font-weight:400;padding:0.7em 1.1em;border-left:4px solid var(--v2-sol-border);background:var(--v2-sol-bg);border-radius:4px}.tutor-lesson-wrapper details.solution-fold>summary:hover{filter:brightness(0.97)}.tutor-lesson-wrapper details.solution-fold[open]>summary{border-radius:4px 4px 0 0}.tutor-lesson-wrapper details.solution-fold>blockquote.solution{margin-top:0;border-radius:0 0 4px 4px}:root[data-theme="dark"] .tutor-lesson-wrapper.tutor-color-secondary,:root[data-theme="dark"] .tutor-lesson-wrapper.tutor-color-muted,:root[data-theme="dark"] .tutor-lesson-wrapper.tutor-color-subdued{color:var(--cmz-text)!important}:root[data-theme="dark"] .tutor-lesson-wrapper .et-learn-more{background:var(--cmz-surface)!important;border-color:var(--cmz-border)!important;box-shadow:none!important}:root[data-theme="dark"] .tutor-lesson-wrapper .et-learn-more h3.heading-more{background:var(--cmz-surface-2)!important;background-image:none!important;color:var(--cmz-text)!important;text-shadow:none!important;border-left-color:var(--cmz-border)!important;border-top-color:var(--cmz-border)!important}:root[data-theme="dark"] .tutor-lesson-wrapper .et-learn-more h3.heading-more span.et_learnmore_arrow{border-left-color:var(--cmz-border)!important;box-shadow:-1px 0 0 0 var(--cmz-border)!important}:root[data-theme="dark"] .tutor-lesson-wrapper .et-learn-more .learn-more-content{color:var(--cmz-text)!important}:root[data-theme="dark"] .tutor-lesson-wrapper .et-learn-more span.et_learnmore_arrow span{filter:invert(1) brightness(1.5)}.tutor-form-check-input.tutor-form-check-input{padding:0}</style></head> 1558<body class="wp-singular courses-template-default single single-courses postid-75594 wp-custom-logo wp-theme-Extra theme-Extra tutor-lms tutor-frontend woocommerce-no-js et_extra et_non_fixed_nav et_pb_gutters3 et_primary_nav_dropdown_animation_flipInX et_secondary_nav_dropdown_animation_Default with_sidebar with_sidebar_right et_includes_sidebar et-db et_minified_js et_minified_css"> 1559 1560 <div id="page-container" class="page-container"> 1561 <!-- Header --> 1562 <header class="header left-right"> 1563 <!-- #top-header --> 1564 <div id="top-header" style=""> 1565 <div class="container"> 1566 <!-- Secondary Nav --> 1567 <div id="et-secondary-nav" class="et-trending"> 1568 1569 <!-- ET Trending --> 1570 <div id="et-trending"> 1571 <!-- ET Trending Post Loop --> 1572 <div id='et-trending-container'> 1573 <div id="et-trending-post-sample"> 1574 1575 </div> 1576 </div> 1577 </div> 1578 1579 </div> 1580 1581 <!-- #et-info --> 1582 <div id="et-info"> 1583 1584 1585 <!-- .et-top-search --> 1586 <div class="et-top-search" style=""> 1587 <form role="search" class="et-search-form" method="get" action="https://courses.code-maze.com/"> 1588 <input type="search" class="et-search-field" placeholder="Search" value="" name="s" title="Search for:" /> 1589 <button class="et-search-submit"></button> 1590 </form> </div> 1591 1592 <!-- cart --> 1593 <span class="et-top-cart-total" style=""> 1594 <a href="https://courses.code-maze.com/cart/" class="et-cart" title="0 Items in Cart"> 1595 <span>0 Items</span> 1596 </a> </span> 1597 </div>
1598 </div><!-- /.container --> 1599 </div><!-- /#top-header --> 1600 1601 1602 <!-- Main Header --> 1603 <div id="main-header-wrapper"> 1604 <div id="main-header" data-fixed-height="104"> 1605 <div class="container"> 1606 <!-- ET Ad --> 1607 1608 1609 <!-- Logo --> 1610 <a class="logo" href="https://courses.code-maze.com/" data-fixed-height="29"> 1611 <img src="https://courses.code-maze.com/wp-content/uploads/2024/10/Code-Maze-Logo-White-Text-Transparent-Small.png" alt="Code Maze" id="logo" /> 1612 </a> 1613 1614 1615 <!-- ET Navigation --> 1616 <div id="et-navigation" class=""> 1617 <ul id="et-menu" class="nav"><li id="menu-item-73074" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-73074"><a href="https://courses.code-maze.com/dashboard/" onClick="return true">My Learning</a></li> 1618<li id="menu-item-73075" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-73075"><a href="https://courses.code-maze.com/courses/" onClick="return true">Courses</a></li> 1619<li id="menu-item-85575" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-85575"><a href="https://courses.code-maze.com/code-maze-mentor/" onClick="return true">// AI Mentor <span class="cursor"></span></a></li> 1620<li id="menu-item-73314" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-73314"><a href="https://code-maze.com" onClick="return true">Blog</a></li> 1621<li class="menu-item cmz-paddle-cart-item"><div class="cmz-paddle-cart-chip"><a href="#" class="cmz-paddle-cart-link" role="button" aria-haspopup="true" aria-expanded="false" aria-label="Cart â go straight to checkout" title="Cart â go straight to checkout"><svg class="cmz-paddle-cart-glyph" viewBox="0 0 24 24" width="18" height="18" aria-hidden="true" focusable="false"><path fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" d="M3 4h2l2.4 12.2a2 2 0 0 0 2 1.6h7.6a2 2 0 0 0 2-1.6L21 8H6"/><circle cx="9.5" cy="20" r="1.4" fill="currentColor"/><circle cx="17.5" cy="20" r="1.4" fill="currentColor"/></svg><span class="cmz-paddle-cart-text tutor-fs-7">Cart</span><span class="cmz-paddle-cart-badge" aria-hidden="true" hidden>0</span></a></div><div class="cmz-paddle-cart-dropdown" hidden></div></li><li class="menu-item cmz-dm-item"><a href="#" class="cmz-dm-toggle" role="button" aria-pressed="false" aria-label="Toggle dark mode" title="Toggle dark mode"><svg class="cmz-dm-glyph cmz-dm-moon" viewBox="0 0 24 24" width="17" height="17" aria-hidden="true" focusable="false"><path fill="currentColor" d="M20.7 13.6A8.6 8.6 0 0 1 10.4 3.3a1 1 0 0 0-1.3-1.2 10.6 10.6 0 1 0 13 13 1 1 0 0 0-1.4-1.5z"/></svg><svg class="cmz-dm-glyph cmz-dm-sun" viewBox="0 0 24 24" width="17" height="17" aria-hidden="true" focusable="false"><circle cx="12" cy="12" r="4.1" fill="currentColor"/><g stroke="currentColor" stroke-width="1.9" stroke-linecap="round"><path d="M12 1.9v2.4M12 19.7v2.4M1.9 12h2.4M19.7 12h2.4"/><path d="M4.9 4.9l1.7 1.7M17.4 17.4l1.7 1.7M19.1 4.9l-1.7 1.7M6.6 17.4l-1.7 1.7"/></g></svg><span class="cmz-dm-text">Dark</span></a></li><li class="menu-item cmz-account-item cmz-account-item-signed-out"><a href="https://courses.code-maze.com/my-account/" class="cmz-account-signin">Sign in</a></li></ul> <div id="et-mobile-navigation"> 1622 <span class="show-menu"> 1623 <div class="show-menu-button"> 1624 <span></span> 1625 <span></span> 1626 <span></span> 1627 </div> 1628 <p>Select Page</p> 1629 </span> 1630 <nav> 1631 </nav> 1632 </div> <!-- /#et-mobile-navigation --> </div><!-- /#et-navigation --> 1633 </div><!-- /.container --> 1634 </div><!-- /#main-header --> 1635 </div><!-- /#main-header-wrapper --> 1636 1637 </header> 1638 1639 1640<div class="tutor-wrap tutor-full-width-course-top tutor-course-top-info tutor-page-wrap tutor-wrap-parent post-75594 courses type-courses status-publish has-post-thumbnail hentry course-category-text-course course-category-web-development"> 1641 <div class="tutor-course-details-page tutor-container"> 1642 1643<header class="tutor-course-details-header tutor-mb-44"> 1644 <div class="tutor-course-details-ratings"> 1645 <div class="tutor-ratings tutor-ratings-"> 1646 <div class="tutor-ratings-stars"> 1647 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span> </div> 1648 <div class="tutor-ratings-average"> 1649 4.93 </div> 1650 <div class="tutor-ratings-count"> 1651 (362 Ratings) 1652 </div> 1653 </div> 1654 </div> 1655 1656 <h1 class="tutor-course-details-title tutor-fs-4 tutor-fw-bold tutor-color-black tutor-mt-12 tutor-mb-0"> 1657 <span>Ultimate ASP.NET Core Web API</span> 1658 </h1> 1659 1660 <div class="tutor-course-details-top tutor-mt-16"> 1661 <div class="tutor-row"> 1662 <div class="tutor-col"> 1663 <div class="tutor-meta tutor-course-details-info"> 1664 <div> 1665 <a href="https://courses.code-maze.com/profile/marinko?view=instru
1665ctor" class="tutor-d-flex"> 1666 <div class="tutor-avatar"><div class="tutor-ratio tutor-ratio-1x1"><img src="https://courses.code-maze.com/wp-content/uploads/2026/01/marinko-profile-150x150.webp" alt="Marinko Spasojevic" /> </div></div> </a> 1667 </div> 1668 1669 <div> 1670 <span class="tutor-mr-16"> 1671 By <a href="https://courses.code-maze.com/profile/marinko?view=instructor">Marinko Spasojevic</a> 1672 </span> 1673 1674 Categories: <a href="https://courses.code-maze.com/course-category/text-course/?tutor-course-filter-category=1376">Text Course</a>, <a href="https://courses.code-maze.com/course-category/web-development/?tutor-course-filter-category=1373">Web Development</a> </div> 1675 </div> 1676 </div> 1677 1678 <div class="tutor-col-auto"> 1679 <div class="tutor-course-details-actions tutor-mt-12 tutor-mt-sm-0"> 1680 <a href="#" class="tutor-btn tutor-btn-ghost tutor-course-wishlist-btn tutor-mr-16" data-course-id="75594"> 1681 <i class="tutor-icon-bookmark-line tutor-mr-8"></i> Wishlist </a> 1682 1683 </div> 1684 </div> 1685 </div> 1686 </div> 1687</header> 1688 <div class="tutor-row tutor-gx-xl-5"> 1689 <main class="tutor-col-xl-8"> 1690 <div class="tutor-course-thumbnail"> 1691 <img src="https://courses.code-maze.com/wp-content/uploads/2026/01/Ultimate-ASP.NET-Core-Web-API-Featured.webp" /> 1692 </div> 1693 1694 <div class="tutor-course-details-tab tutor-mt-32"> 1695 <div class="tutor-is-sticky"> 1696 <nav class="tutor-nav" tutor-priority-nav> 1697 <li class="tutor-nav-item"> 1698 <a class="tutor-nav-link is-active" href="#" data-tutor-nav-target="tutor-course-details-tab-info"> 1699 Course Info </a> 1700 </li> 1701 <li class="tutor-nav-item"> 1702 <a class="tutor-nav-link" href="#" data-tutor-nav-target="tutor-course-details-tab-reviews"> 1703 Reviews </a> 1704 </li> 1705 <li class="tutor-nav-item tutor-nav-more tutor-d-none"> 1706 <a class="tutor-nav-link tutor-nav-more-item" href="#"><span class="tutor-mr-4">More</span> <span class="tutor-nav-more-icon tutor-icon-times"></span></a> 1707 <ul class="tutor-nav-more-list tutor-dropdown"></ul> 1708 </li> 1709</nav> 1710 </div> 1711 <div class="tutor-tab tutor-pt-24"> 1712 <div id="tutor-course-details-tab-info" class="tutor-tab-item is-active"> 1713 <div class="tutor-course-details-content"> 1714 <h2 class="tutor-fs-5 tutor-fw-bold tutor-color-black tutor-mb-12"> 1715 About Course </h2> 1716 1717 <div class="tutor-fs-6 tutor-color-secondary"> 1718 <p data-pm-slice="1 1 []"><strong>Ultimate ASP.NET Core Web API – Our bestselling program</strong></p> 1719<h3><strong><u>What’s included?</u></strong></h3> 1720<ul> 1721<li>Ultimate ASP.NET Core Web API – The Online Text Course</li> 1722</ul> 1723<p><strong>Additional bonus materials:</strong></p> 1724<ol> 1725<li><strong>Dockerizing</strong> ASP.NET Core Application (<strong>Online Text Course</strong>) – <a href="https://code-maze.com/wp-content/uploads/2021/11/Bonus-4-Docker-TOC.pdf" target="_blank" rel="noopener">Full Table of Contents Here.</a></li> 1726<li>Practical <strong>JSON Requests Collection</strong></li> 1727<li>Mastering ASP.NET Core <strong>Security </strong>(<strong>Online Text Course</strong>) – <a href="https://code-maze.com/wp-content/uploads/2020/06/Bonus-6-Table-of-Content.pdf" target="_blank" rel="noopener">Full Table of Contents Here.</a></li> 1728<li>ASP.NET Core Web API With <strong>Dapper </strong>(<strong>PDF</strong>) – <a href="https://code-maze.com/wp-content/uploads/2022/08/Bonus-7-Dapper-TOC.pdf" target="_blank" rel="noopener">Full Table of Contents Here.</a></li> 1729</ol> 1730<p>All materials are available in .NET 10 with <strong>Community Support</strong> over Discord.</p> 1731<h3><strong><u>What you’ll learn</u></strong></h3> 1732<p>This course dives into the foundational aspects and advanced techniques essential for building robust and scalable Web APIs.</p> 1733<p>After understanding the basics of project configuration, you’ll learn how to effectively utilize dependency injection, configure logging services, and implement the Onion Architecture for a maintainable project structure.</p> 1734<p>The course covers critical aspects of web API development, including routing, naming, and binding, handling various types of HTTP requests, and ensuring method safety and idempotency.<
1734/p> 1735<p>As you progress, you will explore advanced topics like content negotiation, validation, asynchronous programming, and global error handling. You’ll gain proficiency in managing data through paging, filtering, searching, and sorting techniques. Moreover, the course addresses the importance of security by teaching authentication, authorization, and the use of refresh tokens.</p> 1736<p>Additionally, you will also learn about action filters, health checks, API versioning, and how to document APIs effectively.</p> 1737<p>Additional bonus chapters provide insights into performance improvements, CQRS with MediatR, and working with multiple databases, rounding out a thorough and practical learning experience.</p> 1738<p>By the end of the course, you will have a solid grasp of ASP.NETCore Web API development, equipped with the skills to build, deploy, and maintain high-performance web applications. This comprehensive course ensures you are ready to tackle real-world challenges and create efficient, scalable APIs.</p> 1739<h4>You can find an entire TOC with preview lessons in the <strong>Course Content</strong> section below.</h4> 1740 </div> 1741 </div> 1742 1743 <div class="tutor-mt-40"> 1744 1745 <h3 class="tutor-fs-5 tutor-fw-bold tutor-color-black tutor-mb-24 tutor-course-content-title"> 1746 Course Content </h3> 1747 1748 <div class="tutor-accordion tutor-mt-24"> 1749 <div class="tutor-accordion-item"> 1750 <h4 class="tutor-accordion-item-header is-active"> 1751 Introduction </h4> 1752 1753 <div class="tutor-accordion-item-body" style=""> 1754 <div class="tutor-accordion-item-body-content"> 1755 <ul class="tutor-course-content-list"> 1756 <li class="tutor-course-content-list-item"> 1757 <div class="tutor-d-flex"> 1758 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 1759 <h5 class="tutor-course-content-list-item-title"> 1760 Mindset Going In </h5> 1761 </div> 1762 1763 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 1764 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 1765 </span> 1766 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 1767 </div> 1768 </li> 1769 <li class="tutor-course-content-list-item"> 1770 <div class="tutor-d-flex"> 1771 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 1772 <h5 class="tutor-course-content-list-item-title"> 1773 Community Access </h5> 1774 </div> 1775 1776 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 1777 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 1778 </span> 1779 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 1780 </div> 1781 </li> 1782 <li class="tutor-course-content-list-item"> 1783 <div class="tutor-d-flex"> 1784 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 1785 <h5 class="tutor-course-content-list-item-title"> 1786 SDK Versions, Visual Studio Community, and SQL Express </h5> 1787 </div> 1788 1789 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 1790 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 1791 </span> 1792 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 1793 </div> 1794 </li> 1795 <li class="tutor-course-content-list-item"> 1796 <div class="tutor-d-flex"> 1797 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 1798 <h5 class="tutor-course-content-list-item-title"> 1799 The Source Code and Bonuses </h5> 1800 </div> 1801 1802 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 1803 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 1804 </span> 1805 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 1806 </div> 1807 </li> 1808 </ul> 1809 </div> 1810 </div> 1811 </div> 1812 <div class="tutor-accordion-item"> 1813 <h4 class="tutor-accordion-item-header"> 1814 ASP.NET Core Web API Fundamentials </h4> 1815 1816 <div class="tutor-accordion-item-body" style="display: none;"> 1817 <div class="tutor-accordion-item-body-content"> 1818 <ul class="tutor-course-content-list"> 1819 <li class="tutor-course-content-list-item"> 1820 <div class="tutor-d-flex"> 1821 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 1822 <h5 class="tutor-course-content-list-item-title"> 1823 Introduction to Web APIs </h5> 1824 </div> 1825 1826 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 1827 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 1828 </span> 1829 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 1830 </div> 1831 </li> 1832 <li class="tutor-course-content-list-item"> 1833 <div class="tutor-d-flex"> 1834 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 1835 <h5 class="tutor-course-content-list-item-title"> 1836 Steps to Create a Web API </h5> 1837 </div> 1838 1839 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 1840 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 1841 </span> 1842 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 1843 </div> 1844 </li> 1845 </ul> 1846 </div> 1847 </div> 1848 </div> 1849 <div class="tutor-accordion-item"> 1850 <h4 class="tutor-accordion-item-header"> 1851 Project Configuration </h4> 1852 1853 <div class="tutor-accordion-item-body" style="display: none;"> 1854 <div class="tutor-accordion-item-body-content"> 1855 <ul class="tutor-course-content-list"> 1856 <li class="tutor-course-content-list-item"> 1857 <div class="tutor-d-flex"> 1858 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 1859 <h5 class="tutor-course-content-list-item-title"> 1860 Creating a New Project </h5> 1861 </div> 1862 1863 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 1864 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 1865 </span> 1866 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 1867 </div> 1868 </li> 1869 <li class="tutor-course-content-list-item"> 1870 <div class="tutor-d-flex"> 1871 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 1872 <h5 class="tutor-course-content-list-item-title"> 1873 launchSettings.json File Configuration </h5> 1874 </div> 1875 1876 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 1877 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 1878 </span> 1879 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 1880 </div> 1881 </li> 1882 <li class="tutor-course-content-list-item"> 1883 <div class="tutor-d-flex"> 1884 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 1885 <h5 class="tutor-course-content-list-item-title"> 1886 Program Class Explanation </h5> 1887 </div> 1888 1889 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 1890 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 1891 </span> 1892 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 1893 </div> 1894 </li> 1895 <li class="tutor-course-content-list-item"> 1896 <div class="tutor-d-flex"> 1897 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 1898 <h5 class="tutor-course-content-list-item-title"> 1899 Extension Methods and CORS Configuration </h5> 1900 </div> 1901 1902 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 1903 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 1904 </span> 1905 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 1906 </div> 1907 </li> 1908 <li class="tutor-course-content-list-item"> 1909 <div class="tutor-d-flex"> 1910 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 1911 <h5 class="tutor-course-content-list-item-title"> 1912 IIS Configuration </h5> 1913 </div> 1914 1915 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 1916 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 1917 </span> 1918 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 1919 </div> 1920 </li> 1921 <li class="tutor-course-content-list-item"> 1922 <div class="tutor-d-flex"> 1923 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 1924 <h5 class="tutor-course-content-list-item-title"> 1925 Additional Code in the Program Class </h5> 1926 </div> 1927 1928 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 1929 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 1930 </span> 1931 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 1932 </div> 1933 </li> 1934 <li class="tutor-course-content-list-item"> 1935 <div class="tutor-d-flex"> 1936 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 1937 <h5 class="tutor-course-content-list-item-title"> 1938 Environment-Based Settings </h5> 1939 </div> 1940 1941 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 1942 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 1943 </span> 1944 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 1945 </div> 1946 </li> 1947 <li class="tutor-course-content-list-item"> 1948 <div class="tutor-d-flex"> 1949 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 1950 <h5 class="tutor-course-content-list-item-title"> 1951 ASP.NET Core Middleware </h5> 1952 </div> 1953 1954 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 1955 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 1956 </span> 1957 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 1958 </div> 1959 </li> 1960 </ul> 1961 </div> 1962 </div> 1963 </div> 1964 <div class="tutor-accordion-item"> 1965 <h4 class="tutor-accordion-item-header"> 1966 Dependency Injection in ASP.NET Core </h4> 1967 1968 <div class="tutor-accordion-item-body" style="display: none;"> 1969 <div class="tutor-accordion-item-body-content"> 1970 <ul class="tutor-course-content-list"> 1971 <li class="tutor-course-content-list-item"> 1972 <div class="tutor-d-flex"> 1973 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 1974 <h5 class="tutor-course-content-list-item-title">
1975 What is Dependency Injection? </h5> 1976 </div> 1977 1978 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 1979 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 1980 </span> 1981 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 1982 </div> 1983 </li> 1984 <li class="tutor-course-content-list-item"> 1985 <div class="tutor-d-flex"> 1986 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 1987 <h5 class="tutor-course-content-list-item-title"> 1988 Inversion of Control With the Constructor Injection </h5> 1989 </div> 1990 1991 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 1992 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 1993 </span> 1994 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 1995 </div> 1996 </li> 1997 <li class="tutor-course-content-list-item"> 1998 <div class="tutor-d-flex"> 1999 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2000 <h5 class="tutor-course-content-list-item-title"> 2001 Making the Solution More Flexible with Dependency Injection </h5> 2002 </div> 2003 2004 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2005 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2006 </span> 2007 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2008 </div> 2009 </li> 2010 <li class="tutor-course-content-list-item"> 2011 <div class="tutor-d-flex"> 2012 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2013 <h5 class="tutor-course-content-list-item-title"> 2014 Service Registration With Dependency Injection Container </h5> 2015 </div> 2016 2017 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2018 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2019 </span> 2020 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2021 </div> 2022 </li> 2023 <li class="tutor-course-content-list-item"> 2024 <div class="tutor-d-flex"> 2025 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2026 <h5 class="tutor-course-content-list-item-title"> 2027 Dependency Injection Lifetimes in ASP.NET Core </h5> 2028 </div> 2029 2030 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2031 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2032 </span> 2033 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2034 </div> 2035 </li> 2036 <li class="tutor-course-content-list-item"> 2037 <div class="tutor-d-flex"> 2038 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2039 <h5 class="tutor-course-content-list-item-title"> 2040 <a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/keyed-services-to-resolve-dependencies-in-net/"><span class="lesson-preview-title">Keyed Services to Resolve Dependencies in .NET</span></a> </h5> 2041 </div> 2042 2043 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2044 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2045 </span> 2046 <span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2047 </div> 2048 </li> 2049 </ul> 2050 </div> 2051 </div> 2052 </div> 2053 <div class="tutor-accordion-item"> 2054 <h4 class="tutor-accordion-item-header"> 2055 Configuring a Logging Service </h4> 2056 2057 <div class="tutor-accordion-item-body" style="display: none;"> 2058 <div class="tutor-accordion-item-body-content"> 2059 <ul class="tutor-course-content-list"> 2060 <li class="tutor-course-content-list-item"> 2061 <div class="tutor-d-flex"> 2062 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2063 <h5 class="tutor-course-content-list-item-title"> 2064 Why Logging? </h5> 2065 </div> 2066 2067 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2068 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2069 </span> 2070 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2071 </div> 2072 </li> 2073 <li class="tutor-course-content-list-item"> 2074 <div class="tutor-d-flex"> 2075 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2076 <h5 class="tutor-course-content-list-item-title"> 2077 Creating the LoggingService Project </h5> 2078 </div> 2079 2080 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2081 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2082 </span> 2083 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2084 </div> 2085 </li> 2086 <li class="tutor-course-content-list-item"> 2087 <div class="tutor-d-flex"> 2088 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2089 <h5 class="tutor-course-content-list-item-title"> 2090 Creating the ILoggerManager Interface and Installing Serilog </h5> 2091 </div> 2092 2093 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2094 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2095 </span> 2096 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2097 </div> 2098 </li> 2099 <li class="tutor-course-content-list-item"> 2100 <div class="tutor-d-flex"> 2101 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2102 <h5 class="tutor-course-content-list-item-title"> 2103 Implementing the Interface and Configuring Serilog </h5> 2104 </div> 2105 2106 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2107 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2108 </span> 2109 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2110 </div> 2111 </li> 2112 <li class="tutor-course-content-list-item"> 2113 <div class="tutor-d-flex"> 2114 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2115 <h5 class="tutor-course-content-list-item-title"> 2116 Logging Service Testing </h5> 2117 </div> 2118 2119 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2120 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2121 </span> 2122 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2123 </div> 2124 </li> 2125 <li class="tutor-course-content-list-item"> 2126 <div class="tutor-d-flex"> 2127 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2128 <h5 class="tutor-course-content-list-item-title"> 2129 Adding a New Sink – Seq </h5> 2130 </div> 2131 2132 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2133 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2134 </span> 2135 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2136 </div> 2137 </li> 2138 </ul> 2139 </div> 2140 </div> 2141 </div> 2142 <div class="tutor-accordion-item"> 2143 <h4 class="tutor-accordion-item-header"> 2144 Onion Architecture Implementation </h4> 2145 2146 <div class="tutor-accordion-item-body" style="display: none;"> 2147 <div class="tutor-accordion-item-body-content"> 2148 <ul class="tutor-course-content-list"> 2149 <li class="tutor-course-content-list-item"> 2150 <div class="tutor-d-flex"> 2151 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2152 <h5 class="tutor-course-content-list-item-title"> 2153 Why Onion Architecture? </h5> 2154 </div> 2155 2156 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2157 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2158 </span> 2159 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2160 </div> 2161 </li> 2162 <li class="tutor-course-content-list-item"> 2163 <div class="tutor-d-flex"> 2164 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2165 <h5 class="tutor-course-content-list-item-title"> 2166 About Onion Architecture </h5> 2167 </div> 2168 2169 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2170 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2171 </span> 2172 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2173 </div> 2174 </li> 2175 <li class="tutor-course-content-list-item"> 2176 <div class="tutor-d-flex"> 2177 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2178 <h5 class="tutor-course-content-list-item-title"> 2179 Creating Entities </h5> 2180 </div> 2181 2182 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2183 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2184 </span> 2185 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2186 </div> 2187 </li> 2188 <li class="tutor-course-content-list-item"> 2189 <div class="tutor-d-flex"> 2190 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2191 <h5 class="tutor-course-content-list-item-title"> 2192 Context Class and Database Connection </h5> 2193 </div> 2194 2195 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2196 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2197 </span> 2198 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2199 </div> 2200 </li> 2201 <li class="tutor-course-content-list-item"> 2202 <div class="tutor-d-flex"> 2203 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2204 <h5 class="tutor-course-content-list-item-title"> 2205 <a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/migration-and-initial-data-seed/"><span class="lesson-preview-title">Migration and Initial Data Seed</span></a> </h5> 2206 </div> 2207 2208 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2209 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2210 </span> 2211 <span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2212 </div> 2213 </li> 2214 <li class="tutor-course-content-list-item"> 2215 <div class="tutor-d-flex"> 2216 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2217 <h5 class="tutor-course-content-list-item-title"> 2218 Fluent API Configuration </h5> 2219 </div> 2220 2221 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2222 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2223 </span> 2224 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2225 </div> 2226 </li> 2227 <li class="tutor-course-content-list-item"> 2228 <div class="tutor-d-flex"> 2229 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2230 <h5 class="tutor-course-content-list-item-title"> 2231 Repository Pattern Logic </h5> 2232 </div> 2233 2234 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2235 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2236 </span> 2237 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2238 </div> 2239 </li> 2240 <li class="tutor-course-content-list-item"> 2241 <div class="tutor-d-flex"> 2242 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2243 <h5 class="tutor-course-content-list-item-title"> 2244 Repository Interfaces and Classes </h5> 2245 </div> 2246 2247 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2248 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2249 </span> 2250 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2251 </div> 2252 </li> 2253 <li class="tutor-course-content-list-item"> 2254 <div class="tutor-d-flex"> 2255 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2256 <h5 class="tutor-course-content-list-item-title"> 2257 C
2257reating a Repository Manager (Unit of Work) </h5> 2258 </div> 2259 2260 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2261 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2262 </span> 2263 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2264 </div> 2265 </li> 2266 <li class="tutor-course-content-list-item"> 2267 <div class="tutor-d-flex"> 2268 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2269 <h5 class="tutor-course-content-list-item-title"> 2270 Adding a Service Layer </h5> 2271 </div> 2272 2273 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2274 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2275 </span> 2276 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2277 </div> 2278 </li> 2279 <li class="tutor-course-content-list-item"> 2280 <div class="tutor-d-flex"> 2281 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2282 <h5 class="tutor-course-content-list-item-title"> 2283 Registering RepositoryContext at a Runtime </h5> 2284 </div> 2285 2286 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2287 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2288 </span> 2289 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2290 </div> 2291 </li> 2292 <li class="tutor-course-content-list-item"> 2293 <div class="tutor-d-flex"> 2294 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2295 <h5 class="tutor-course-content-list-item-title"> 2296 Enforcing the Flow of Dependencies With a Test </h5> 2297 </div> 2298 2299 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2300 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2301 </span> 2302 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2303 </div> 2304 </li> 2305 </ul> 2306 </div> 2307 </div> 2308 </div> 2309 <div class="tutor-accordion-item"> 2310 <h4 class="tutor-accordion-item-header"> 2311 Routing, Naming and Binding in ASP.NET Core Web API </h4> 2312 2313 <div class="tutor-accordion-item-body" style="display: none;"> 2314 <div class="tutor-accordion-item-body-content"> 2315 <ul class="tutor-course-content-list"> 2316 <li class="tutor-course-content-list-item"> 2317 <div class="tutor-d-flex"> 2318 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2319 <h5 class="tutor-course-content-list-item-title"> 2320 Routing in ASP.NET Core Web API </h5> 2321 </div> 2322 2323 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2324 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2325 </span> 2326 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2327 </div> 2328 </li> 2329 <li class="tutor-course-content-list-item"> 2330 <div class="tutor-d-flex"> 2331 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2332 <h5 class="tutor-course-content-list-item-title"> 2333 Using HttpMethods With Routing </h5> 2334 </div> 2335 2336 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2337 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2338 </span> 2339 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2340 </div> 2341 </li> 2342 <li class="tutor-course-content-list-item"> 2343 <div class="tutor-d-flex"> 2344 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2345 <h5 class="tutor-course-content-list-item-title"> 2346 Route Constraints in ASP.NET Core Web API </h5> 2347 </div> 2348 2349 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2350 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2351 </span> 2352 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2353 </div> 2354 </li> 2355 <li class="tutor-course-content-list-item"> 2356 <div class="tutor-d-flex"> 2357 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2358 <h5 class="tutor-course-content-list-item-title"> 2359 Route Binding In ASP.NET Core Web API </h5> 2360 </div> 2361 2362 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2363 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2364 </span> 2365 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2366 </div> 2367 </li> 2368 <li class="tutor-course-content-list-item"> 2369 <div class="tutor-d-flex"> 2370 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2371 <h5 class="tutor-course-content-list-item-title"> 2372 Naming Our Resources </h5> 2373 </div> 2374 2375 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2376 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2377 </span> 2378 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2379 </div> 2380 </li> 2381 </ul> 2382 </div> 2383 </div> 2384 </div> 2385 <div class="tutor-accordion-item"> 2386 <h4 class="tutor-accordion-item-header"> 2387 Handling GET Requests </h4> 2388 2389 <div class="tutor-accordion-item-body" style="display: none;"> 2390 <div class="tutor-accordion-item-body-content"> 2391 <ul class="tutor-course-content-list"> 2392 <li class="tutor-course-content-list-item"> 2393 <div class="tutor-d-flex"> 2394 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2395 <h5 class="tutor-course-content-list-item-title"> 2396 Controllers in Web API </h5> 2397 </div> 2398 2399 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2400 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2401 </span> 2402 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2403 </div> 2404 </li> 2405 <li class="tutor-course-content-list-item"> 2406 <div class="tutor-d-flex"> 2407 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2408 <h5 class="tutor-course-content-list-item-title"> 2409 Getting All Companies From the Database </h5> 2410 </div> 2411 2412 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2413 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2414 </span> 2415 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2416 </div> 2417 </li> 2418 <li class="tutor-course-content-list-item"> 2419 <div class="tutor-d-flex"> 2420 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2421 <h5 class="tutor-course-content-list-item-title"> 2422 Testing the Result With Postman </h5> 2423 </div> 2424 2425 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2426 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2427 </span> 2428 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2429 </div> 2430 </li> 2431 <li class="tutor-course-content-list-item"> 2432 <div class="tutor-d-flex"> 2433 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2434 <h5 class="tutor-course-content-list-item-title"> 2435 DTO Classes vs. Entity Model Classes </h5> 2436 </div> 2437 2438 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2439 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2440 </span> 2441 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2442 </div> 2443 </li> 2444 <li class="tutor-course-content-list-item"> 2445 <div class="tutor-d-flex"> 2446 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2447 <h5 class="tutor-course-content-list-item-title"> 2448 Using AutoMapper in ASP.NET Core </h5> 2449 </div> 2450 2451 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2452 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2453 </span> 2454 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2455 </div> 2456 </li> 2457 </ul> 2458 </div> 2459 </div> 2460 </div> 2461 <div class="tutor-accordion-item"> 2462 <h4 class="tutor-accordion-item-header"> 2463 Web API Return Types </h4> 2464 2465 <div class="tutor-accordion-item-body" style="display: none;"> 2466 <div class="tutor-accordion-item-body-content"> 2467 <ul class="tutor-course-content-list"> 2468 <li class="tutor-course-content-list-item"> 2469 <div class="tutor-d-flex"> 2470 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2471 <h5 class="tutor-course-content-list-item-title"> 2472 Different Return Types To Use in Our Actions </h5> 2473 </div> 2474 2475 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2476 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2477 </span> 2478 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2479 </div> 2480 </li> 2481 </ul> 2482 </div> 2483 </div> 2484 </div> 2485 <div class="tutor-accordion-item"> 2486 <h4 class="tutor-accordion-item-header"> 2487 Global Error Handling </h4> 2488 2489 <div class="tutor-accordion-item-body" style="display: none;"> 2490 <div class="tutor-accordion-item-body-content"> 2491 <ul class="tutor-course-content-list"> 2492 <li class="tutor-course-content-list-item"> 2493 <div class="tutor-d-flex"> 2494 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2495 <h5 class="tutor-course-content-list-item-title"> 2496 Handling Errors Globally With the Built-In Middleware </h5> 2497 </div> 2498 2499 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2500 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2501 </span> 2502 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2503 </div> 2504 </li> 2505 <li class="tutor-course-content-list-item"> 2506 <div class="tutor-d-flex"> 2507 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2508 <h5 class="tutor-course-content-list-item-title"> 2509 <a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/using-the-iexceptionhandler-interface/"><span class="lesson-preview-title">Using the IExceptionHandler Interface</span></a> </h5> 2510 </div> 2511 2512 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2513 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2514 </span> 2515 <span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2516 </div> 2517 </li> 2518 <li class="tutor-course-content-list-item"> 2519 <div class="tutor-d-flex"> 2520 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2521 <h5 class="tutor-course-content-list-item-title"> 2522 Standardizing Exception Handling With ProblemDetails </h5> 2523 </div> 2524 2525 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2526 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2527 </span> 2528 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2529 </div> 2530 </li> 2531 </ul> 2532 </div> 2533 </div> 2534 </div> 2535 <div class="tutor-accordion-item"> 2536 <h4 class="tutor-accordion-item-header"> 2537 Getting Additional Resources With Relations </h4> 2538 2539 <div class="tutor-accordion-item-body" style="display: none;"> 2540 <div class="tutor-accordion-item-body-content"> 2541 <ul class="tutor-course-content-list"> 2542 <li class="tutor-course-content-list-item"> 2543 <div class="tutor-d-flex"> 2544 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2545 <h5 class="tutor-course-content-list-item-title"> 2546 Getting a Single Resource From the Database </h5> 2547 </div> 2548 2549 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2550 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2551 </span> 2552 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2553 </div> 2554 </li> 2555 <li class="tutor-course-content-list-it
2555em"> 2556 <div class="tutor-d-flex"> 2557 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2558 <h5 class="tutor-course-content-list-item-title"> 2559 Handling Invalid Requests in a Service Layer </h5> 2560 </div> 2561 2562 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2563 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2564 </span> 2565 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2566 </div> 2567 </li> 2568 <li class="tutor-course-content-list-item"> 2569 <div class="tutor-d-flex"> 2570 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2571 <h5 class="tutor-course-content-list-item-title"> 2572 Parent/Child Relationships in Web API </h5> 2573 </div> 2574 2575 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2576 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2577 </span> 2578 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2579 </div> 2580 </li> 2581 <li class="tutor-course-content-list-item"> 2582 <div class="tutor-d-flex"> 2583 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2584 <h5 class="tutor-course-content-list-item-title"> 2585 Getting a Single Employee for Company </h5> 2586 </div> 2587 2588 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2589 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2590 </span> 2591 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2592 </div> 2593 </li> 2594 <li class="tutor-course-content-list-item"> 2595 <div class="tutor-d-flex"> 2596 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2597 <h5 class="tutor-course-content-list-item-title"> 2598 Eager Loading To Fetch Multiple Entities in a Single Query </h5> 2599 </div> 2600 2601 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2602 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2603 </span> 2604 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2605 </div> 2606 </li> 2607 </ul> 2608 </div> 2609 </div> 2610 </div> 2611 <div class="tutor-accordion-item"> 2612 <h4 class="tutor-accordion-item-header"> 2613 Content Negotiation </h4> 2614 2615 <div class="tutor-accordion-item-body" style="display: none;"> 2616 <div class="tutor-accordion-item-body-content"> 2617 <ul class="tutor-course-content-list"> 2618 <li class="tutor-course-content-list-item"> 2619 <div class="tutor-d-flex"> 2620 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2621 <h5 class="tutor-course-content-list-item-title"> 2622 What Do We Get Out of the Box? </h5> 2623 </div> 2624 2625 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2626 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2627 </span> 2628 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2629 </div> 2630 </li> 2631 <li class="tutor-course-content-list-item"> 2632 <div class="tutor-d-flex"> 2633 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2634 <h5 class="tutor-course-content-list-item-title"> 2635 Restricting Media Types </h5> 2636 </div> 2637 2638 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2639 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2640 </span> 2641 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2642 </div> 2643 </li> 2644 <li class="tutor-course-content-list-item"> 2645 <div class="tutor-d-flex"> 2646 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2647 <h5 class="tutor-course-content-list-item-title"> 2648 Implementing a Custom Formatter </h5> 2649 </div> 2650 2651 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2652 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2653 </span> 2654 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2655 </div> 2656 </li> 2657 </ul> 2658 </div> 2659 </div> 2660 </div> 2661 <div class="tutor-accordion-item"> 2662 <h4 class="tutor-accordion-item-header"> 2663 Method Safety And Method Idempotency </h4> 2664 2665 <div class="tutor-accordion-item-body" style="display: none;"> 2666 <div class="tutor-accordion-item-body-content"> 2667 <ul class="tutor-course-content-list"> 2668 <li class="tutor-course-content-list-item"> 2669 <div class="tutor-d-flex"> 2670 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2671 <h5 class="tutor-course-content-list-item-title"> 2672 Important HTTP Standards </h5> 2673 </div> 2674 2675 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2676 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2677 </span> 2678 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2679 </div> 2680 </li> 2681 </ul> 2682 </div> 2683 </div> 2684 </div> 2685 <div class="tutor-accordion-item"> 2686 <h4 class="tutor-accordion-item-header"> 2687 Creating Resources </h4> 2688 2689 <div class="tutor-accordion-item-body" style="display: none;"> 2690 <div class="tutor-accordion-item-body-content"> 2691 <ul class="tutor-course-content-list"> 2692 <li class="tutor-course-content-list-item"> 2693 <div class="tutor-d-flex"> 2694 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2695 <h5 class="tutor-course-content-list-item-title"> 2696 Handling POST Requests </h5> 2697 </div> 2698 2699 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2700 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2701 </span> 2702 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2703 </div> 2704 </li> 2705 <li class="tutor-course-content-list-item"> 2706 <div class="tutor-d-flex"> 2707 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2708 <h5 class="tutor-course-content-list-item-title"> 2709 Validation From the ApiController Attribute </h5> 2710 </div> 2711 2712 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2713 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2714 </span> 2715 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2716 </div> 2717 </li> 2718 <li class="tutor-course-content-list-item"> 2719 <div class="tutor-d-flex"> 2720 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2721 <h5 class="tutor-course-content-list-item-title"> 2722 <a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/creating-a-child-resource/"><span class="lesson-preview-title">Creating a Child Resource</span></a> </h5> 2723 </div> 2724 2725 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2726 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2727 </span> 2728 <span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2729 </div> 2730 </li> 2731 <li class="tutor-course-content-list-item"> 2732 <div class="tutor-d-flex"> 2733 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2734 <h5 class="tutor-course-content-list-item-title"> 2735 Creating Children Resources Together With a Parent </h5> 2736 </div> 2737 2738 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2739 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2740 </span> 2741 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2742 </div> 2743 </li> 2744 <li class="tutor-course-content-list-item"> 2745 <div class="tutor-d-flex"> 2746 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2747 <h5 class="tutor-course-content-list-item-title"> 2748 Creating a Collection of Resources </h5> 2749 </div> 2750 2751 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2752 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2753 </span> 2754 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2755 </div> 2756 </li> 2757 <li class="tutor-course-content-list-item"> 2758 <div class="tutor-d-flex"> 2759 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2760 <h5 class="tutor-course-content-list-item-title"> 2761 Model Binding in API </h5> 2762 </div> 2763 2764 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2765 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2766 </span> 2767 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2768 </div> 2769 </li> 2770 </ul> 2771 </div> 2772 </div> 2773 </div> 2774 <div class="tutor-accordion-item"> 2775 <h4 class="tutor-accordion-item-header"> 2776 Deleting Resources </h4> 2777 2778 <div class="tutor-accordion-item-body" style="display: none;"> 2779 <div class="tutor-accordion-item-body-content"> 2780 <ul class="tutor-course-content-list"> 2781 <li class="tutor-course-content-list-item"> 2782 <div class="tutor-d-flex"> 2783 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2784 <h5 class="tutor-course-content-list-item-title"> 2785 Deleting Resources in Web API </h5> 2786 </div> 2787 2788 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2789 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2790 </span> 2791 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2792 </div> 2793 </li> 2794 <li class="tutor-course-content-list-item"> 2795 <div class="tutor-d-flex"> 2796 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2797 <h5 class="tutor-course-content-list-item-title"> 2798 Deleting a Parent Resource With its Children </h5> 2799 </div> 2800 2801 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2802 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2803 </span> 2804 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2805 </div> 2806 </li> 2807 <li class="tutor-course-content-list-item"> 2808 <div class="tutor-d-flex"> 2809 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2810 <h5 class="tutor-course-content-list-item-title"> 2811 Deleting a Children Resource With a Parent – Transactions </h5> 2812 </div> 2813 2814 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2815 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2816 </span> 2817 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2818 </div> 2819 </li> 2820 </ul> 2821 </div> 2822 </div> 2823 </div> 2824 <div class="tutor-accordion-item"> 2825 <h4 class="tutor-accordion-item-header"> 2826 Updating Resources in Web API </h4> 2827 2828 <div class="tutor-accordion-item-body" style="display: none;"> 2829 <div class="tutor-accordion-item-body-content"> 2830 <ul class="tutor-course-content-list"> 2831 <li class="tutor-course-content-list-item"> 2832 <div class="tutor-d-flex"> 2833 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2834 <h5 class="tutor-course-content-list-item-title"> 2835 Working With Put Requests </h5> 2836 </div> 2837 2838 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2839 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2840 </span> 2841 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2842 </div> 2843 </li> 2844 <li class="tutor-course-content-list-item"> 2845 <div class="tutor-d-flex"> 2846 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2847 <h5 class="tutor-course-content-list-item-title"> 2848 Inserting Resources While Updating One </h5> 2849 </div> 2850 2851 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2852 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2853 </span> 2854 <span class="tutor-course-content-list-item-status tutor-icon-lock-
2854line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2855 </div> 2856 </li> 2857 </ul> 2858 </div> 2859 </div> 2860 </div> 2861 <div class="tutor-accordion-item"> 2862 <h4 class="tutor-accordion-item-header"> 2863 Partially Updating Resources </h4> 2864 2865 <div class="tutor-accordion-item-body" style="display: none;"> 2866 <div class="tutor-accordion-item-body-content"> 2867 <ul class="tutor-course-content-list"> 2868 <li class="tutor-course-content-list-item"> 2869 <div class="tutor-d-flex"> 2870 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2871 <h5 class="tutor-course-content-list-item-title"> 2872 Working With Patch Requests </h5> 2873 </div> 2874 2875 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2876 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2877 </span> 2878 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2879 </div> 2880 </li> 2881 <li class="tutor-course-content-list-item"> 2882 <div class="tutor-d-flex"> 2883 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2884 <h5 class="tutor-course-content-list-item-title"> 2885 Applying PATCH to the Employee Entity </h5> 2886 </div> 2887 2888 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2889 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2890 </span> 2891 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2892 </div> 2893 </li> 2894 </ul> 2895 </div> 2896 </div> 2897 </div> 2898 <div class="tutor-accordion-item"> 2899 <h4 class="tutor-accordion-item-header"> 2900 Validation in ASP.NET Core Web API </h4> 2901 2902 <div class="tutor-accordion-item-body" style="display: none;"> 2903 <div class="tutor-accordion-item-body-content"> 2904 <ul class="tutor-course-content-list"> 2905 <li class="tutor-course-content-list-item"> 2906 <div class="tutor-d-flex"> 2907 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2908 <h5 class="tutor-course-content-list-item-title"> 2909 About ModelState Validation </h5> 2910 </div> 2911 2912 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2913 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2914 </span> 2915 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2916 </div> 2917 </li> 2918 <li class="tutor-course-content-list-item"> 2919 <div class="tutor-d-flex"> 2920 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2921 <h5 class="tutor-course-content-list-item-title"> 2922 Rerun Validation and Build-in Attributes </h5> 2923 </div> 2924 2925 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2926 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2927 </span> 2928 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2929 </div> 2930 </li> 2931 <li class="tutor-course-content-list-item"> 2932 <div class="tutor-d-flex"> 2933 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2934 <h5 class="tutor-course-content-list-item-title"> 2935 Custom Attributes and IValidatableObject </h5> 2936 </div> 2937 2938 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2939 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2940 </span> 2941 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2942 </div> 2943 </li> 2944 <li class="tutor-course-content-list-item"> 2945 <div class="tutor-d-flex"> 2946 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2947 <h5 class="tutor-course-content-list-item-title"> 2948 Validation While Creating Resources </h5> 2949 </div> 2950 2951 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2952 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2953 </span> 2954 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2955 </div> 2956 </li> 2957 <li class="tutor-course-content-list-item"> 2958 <div class="tutor-d-flex"> 2959 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2960 <h5 class="tutor-course-content-list-item-title"> 2961 Validating Int Type </h5> 2962 </div> 2963 2964 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2965 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2966 </span> 2967 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2968 </div> 2969 </li> 2970 <li class="tutor-course-content-list-item"> 2971 <div class="tutor-d-flex"> 2972 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2973 <h5 class="tutor-course-content-list-item-title"> 2974 Validation of PUT Requests </h5> 2975 </div> 2976 2977 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2978 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2979 </span> 2980 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2981 </div> 2982 </li> 2983 <li class="tutor-course-content-list-item"> 2984 <div class="tutor-d-flex"> 2985 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2986 <h5 class="tutor-course-content-list-item-title"> 2987 Validation of PATCH Requests </h5> 2988 </div> 2989 2990 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 2991 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 2992 </span> 2993 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 2994 </div> 2995 </li> 2996 <li class="tutor-course-content-list-item"> 2997 <div class="tutor-d-flex"> 2998 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 2999 <h5 class="tutor-course-content-list-item-title"> 3000 Assignment </h5> 3001 </div> 3002 3003 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3004 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3005 </span> 3006 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3007 </div> 3008 </li> 3009 <li class="tutor-course-content-list-item"> 3010 <div class="tutor-d-flex"> 3011 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3012 <h5 class="tutor-course-content-list-item-title"> 3013 Fluent Validation in Web API </h5> 3014 </div> 3015 3016 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3017 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3018 </span> 3019 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3020 </div> 3021 </li> 3022 </ul> 3023 </div> 3024 </div> 3025 </div> 3026 <div class="tutor-accordion-item"> 3027 <h4 class="tutor-accordion-item-header"> 3028 Asynchronous Code </h4> 3029 3030 <div class="tutor-accordion-item-body" style="display: none;"> 3031 <div class="tutor-accordion-item-body-content"> 3032 <ul class="tutor-course-content-list"> 3033 <li class="tutor-course-content-list-item"> 3034 <div class="tutor-d-flex"> 3035 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3036 <h5 class="tutor-course-content-list-item-title"> 3037 What is Asynchronous Programming? </h5> 3038 </div> 3039 3040 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3041 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3042 </span> 3043 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3044 </div> 3045 </li> 3046 <li class="tutor-course-content-list-item"> 3047 <div class="tutor-d-flex"> 3048 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3049 <h5 class="tutor-course-content-list-item-title"> 3050 Async, Await Keywords, and Return Types </h5> 3051 </div> 3052 3053 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3054 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3055 </span> 3056 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3057 </div> 3058 </li> 3059 <li class="tutor-course-content-list-item"> 3060 <div class="tutor-d-flex"> 3061 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3062 <h5 class="tutor-course-content-list-item-title"> 3063 Repository Class and Interface Modifications </h5> 3064 </div> 3065 3066 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3067 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3068 </span> 3069 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3070 </div> 3071 </li> 3072 <li class="tutor-course-content-list-item"> 3073 <div class="tutor-d-flex"> 3074 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3075 <h5 class="tutor-course-content-list-item-title"> 3076 Updating the Service Layer </h5> 3077 </div> 3078 3079 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3080 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3081 </span> 3082 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3083 </div> 3084 </li> 3085 <li class="tutor-course-content-list-item"> 3086 <div class="tutor-d-flex"> 3087 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3088 <h5 class="tutor-course-content-list-item-title"> 3089 Controller Modification </h5> 3090 </div> 3091 3092 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3093 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3094 </span> 3095 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3096 </div> 3097 </li> 3098 <li class="tutor-course-content-list-item"> 3099 <div class="tutor-d-flex"> 3100 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3101 <h5 class="tutor-course-content-list-item-title"> 3102 Assignment </h5> 3103 </div> 3104 3105 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3106 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3107 </span> 3108 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3109 </div> 3110 </li> 3111 <li class="tutor-course-content-list-item"> 3112 <div class="tutor-d-flex"> 3113 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3114 <h5 class="tutor-course-content-list-item-title"> 3115 Continuation in Async Programming and Common Pitfalls </h5> 3116 </div> 3117 3118 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3119 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3120 </span> 3121 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3122 </div> 3123 </li> 3124 <li class="tutor-course-content-list-item"> 3125 <div class="tutor-d-flex"> 3126 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3127 <h5 class="tutor-course-content-list-item-title"> 3128 Cancellation Token </h5> 3129 </div> 3130 3131 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3132 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3133 </span> 3134 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3135 </div> 3136 </li> 3137 <li class="tutor-course-content-list-item"> 3138 <div class="tutor-d-flex"> 3139 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3140 <h5 class="tutor-course-content-list-item-title"> 3141 Assignment </h5> 3142 </div> 3143 3144 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3145 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3146 </span> 3147 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3148 </div> 3149 </li> 3150 </ul>
3151 </div> 3152 </div> 3153 </div> 3154 <div class="tutor-accordion-item"> 3155 <h4 class="tutor-accordion-item-header"> 3156 Action Filters in ASP.NET Core Web API </h4> 3157 3158 <div class="tutor-accordion-item-body" style="display: none;"> 3159 <div class="tutor-accordion-item-body-content"> 3160 <ul class="tutor-course-content-list"> 3161 <li class="tutor-course-content-list-item"> 3162 <div class="tutor-d-flex"> 3163 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3164 <h5 class="tutor-course-content-list-item-title"> 3165 About Action Filters </h5> 3166 </div> 3167 3168 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3169 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3170 </span> 3171 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3172 </div> 3173 </li> 3174 <li class="tutor-course-content-list-item"> 3175 <div class="tutor-d-flex"> 3176 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3177 <h5 class="tutor-course-content-list-item-title"> 3178 <a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/the-scope-and-order-of-invocation-of-action-filters/"><span class="lesson-preview-title">The Scope and Order of Invocation of Action Filters</span></a> </h5> 3179 </div> 3180 3181 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3182 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3183 </span> 3184 <span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3185 </div> 3186 </li> 3187 <li class="tutor-course-content-list-item"> 3188 <div class="tutor-d-flex"> 3189 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3190 <h5 class="tutor-course-content-list-item-title"> 3191 Improving the Code With Action Filters </h5> 3192 </div> 3193 3194 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3195 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3196 </span> 3197 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3198 </div> 3199 </li> 3200 <li class="tutor-course-content-list-item"> 3201 <div class="tutor-d-flex"> 3202 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3203 <h5 class="tutor-course-content-list-item-title"> 3204 Refactoring the Service Layer </h5> 3205 </div> 3206 3207 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3208 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3209 </span> 3210 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3211 </div> 3212 </li> 3213 </ul> 3214 </div> 3215 </div> 3216 </div> 3217 <div class="tutor-accordion-item"> 3218 <h4 class="tutor-accordion-item-header"> 3219 Paging in ASP.NET Core Web API </h4> 3220 3221 <div class="tutor-accordion-item-body" style="display: none;"> 3222 <div class="tutor-accordion-item-body-content"> 3223 <ul class="tutor-course-content-list"> 3224 <li class="tutor-course-content-list-item"> 3225 <div class="tutor-d-flex"> 3226 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3227 <h5 class="tutor-course-content-list-item-title"> 3228 Paging Implementation </h5> 3229 </div> 3230 3231 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3232 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3233 </span> 3234 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3235 </div> 3236 </li> 3237 <li class="tutor-course-content-list-item"> 3238 <div class="tutor-d-flex"> 3239 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3240 <h5 class="tutor-course-content-list-item-title"> 3241 Concrete Query </h5> 3242 </div> 3243 3244 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3245 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3246 </span> 3247 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3248 </div> 3249 </li> 3250 <li class="tutor-course-content-list-item"> 3251 <div class="tutor-d-flex"> 3252 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3253 <h5 class="tutor-course-content-list-item-title"> 3254 Improving the Solution </h5> 3255 </div> 3256 3257 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3258 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3259 </span> 3260 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3261 </div> 3262 </li> 3263 <li class="tutor-course-content-list-item"> 3264 <div class="tutor-d-flex"> 3265 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3266 <h5 class="tutor-course-content-list-item-title"> 3267 Additional Improvement </h5> 3268 </div> 3269 3270 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3271 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3272 </span> 3273 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3274 </div> 3275 </li> 3276 </ul> 3277 </div> 3278 </div> 3279 </div> 3280 <div class="tutor-accordion-item"> 3281 <h4 class="tutor-accordion-item-header"> 3282 Filtering in ASP.NET Core Web API </h4> 3283 3284 <div class="tutor-accordion-item-body" style="display: none;"> 3285 <div class="tutor-accordion-item-body-content"> 3286 <ul class="tutor-course-content-list"> 3287 <li class="tutor-course-content-list-item"> 3288 <div class="tutor-d-flex"> 3289 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3290 <h5 class="tutor-course-content-list-item-title"> 3291 What is Filtering? </h5> 3292 </div> 3293 3294 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3295 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3296 </span> 3297 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3298 </div> 3299 </li> 3300 <li class="tutor-course-content-list-item"> 3301 <div class="tutor-d-flex"> 3302 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3303 <h5 class="tutor-course-content-list-item-title"> 3304 How is Filtering Different from Searching? </h5> 3305 </div> 3306 3307 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3308 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3309 </span> 3310 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3311 </div> 3312 </li> 3313 <li class="tutor-course-content-list-item"> 3314 <div class="tutor-d-flex"> 3315 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3316 <h5 class="tutor-course-content-list-item-title"> 3317 Testing the Filtering Functionality </h5> 3318 </div> 3319 3320 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3321 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3322 </span> 3323 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3324 </div> 3325 </li> 3326 </ul> 3327 </div> 3328 </div> 3329 </div> 3330 <div class="tutor-accordion-item"> 3331 <h4 class="tutor-accordion-item-header"> 3332 Searching in ASP.NET Core Web API </h4> 3333 3334 <div class="tutor-accordion-item-body" style="display: none;"> 3335 <div class="tutor-accordion-item-body-content"> 3336 <ul class="tutor-course-content-list"> 3337 <li class="tutor-course-content-list-item"> 3338 <div class="tutor-d-flex"> 3339 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3340 <h5 class="tutor-course-content-list-item-title"> 3341 What is Searching? </h5> 3342 </div> 3343 3344 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3345 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3346 </span> 3347 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3348 </div> 3349 </li> 3350 <li class="tutor-course-content-list-item"> 3351 <div class="tutor-d-flex"> 3352 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3353 <h5 class="tutor-course-content-list-item-title"> 3354 Implementing Searching in Our Application </h5> 3355 </div> 3356 3357 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3358 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3359 </span> 3360 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3361 </div> 3362 </li> 3363 <li class="tutor-course-content-list-item"> 3364 <div class="tutor-d-flex"> 3365 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3366 <h5 class="tutor-course-content-list-item-title"> 3367 Testing Our Implementation </h5> 3368 </div> 3369 3370 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3371 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3372 </span> 3373 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3374 </div> 3375 </li> 3376 </ul> 3377 </div> 3378 </div> 3379 </div> 3380 <div class="tutor-accordion-item"> 3381 <h4 class="tutor-accordion-item-header"> 3382 Sorting in ASP.NET Core Web API </h4> 3383 3384 <div class="tutor-accordion-item-body" style="display: none;"> 3385 <div class="tutor-accordion-item-body-content"> 3386 <ul class="tutor-course-content-list"> 3387 <li class="tutor-course-content-list-item"> 3388 <div class="tutor-d-flex"> 3389 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3390 <h5 class="tutor-course-content-list-item-title"> 3391 What is Sorting </h5> 3392 </div> 3393 3394 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3395 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3396 </span> 3397 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3398 </div> 3399 </li> 3400 <li class="tutor-course-content-list-item"> 3401 <div class="tutor-d-flex"> 3402 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3403 <h5 class="tutor-course-content-list-item-title"> 3404 <a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/sorting-implementation/"><span class="lesson-preview-title">Sorting Implementation</span></a> </h5> 3405 </div> 3406 3407 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3408 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3409 </span> 3410 <span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3411 </div> 3412 </li> 3413 <li class="tutor-course-content-list-item"> 3414 <div class="tutor-d-flex"> 3415 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3416 <h5 class="tutor-course-content-list-item-title"> 3417 Testing The Sorting Implementation </h5> 3418 </div> 3419 3420 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3421 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3422 </span> 3423 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3424 </div> 3425 </li> 3426 <li class="tutor-course-content-list-item"> 3427 <div class="tutor-d-flex"> 3428 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3429 <h5 class="tutor-course-content-list-item-title"> 3430 Improving the Sorting Implementation </h5> 3431 </div> 3432 3433 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3434 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3435 </span> 3436 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3437 </div> 3438 </li> 3439 </ul> 3440 </div> 3441 </div> 3442 </div> 3443 <div class="tutor-accordion-item"> 3444 <h4 class="tutor-accordion-item-header"> 3445 Data Shaping </h4> 3446 3447 <div class="tutor-accordion-item-body" style="display: none;"> 3448 <div class="tutor-accordion-item-body-content"> 3449 <ul class="tutor-course-content-list"> 3450 <li class="tutor-course-content-list-item"> 3451 <div class="tutor-d-flex"> 3452 <span class="tutor-course-content-list-item-icon tutor-ic
3452on-document-text tutor-mr-12 tutor-mt-4"></span> 3453 <h5 class="tutor-course-content-list-item-title"> 3454 What is Data Shaping? </h5> 3455 </div> 3456 3457 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3458 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3459 </span> 3460 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3461 </div> 3462 </li> 3463 <li class="tutor-course-content-list-item"> 3464 <div class="tutor-d-flex"> 3465 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3466 <h5 class="tutor-course-content-list-item-title"> 3467 Data Shaping Implementation </h5> 3468 </div> 3469 3470 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3471 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3472 </span> 3473 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3474 </div> 3475 </li> 3476 <li class="tutor-course-content-list-item"> 3477 <div class="tutor-d-flex"> 3478 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3479 <h5 class="tutor-course-content-list-item-title"> 3480 Finishing Data Shaping Implementation and Testing </h5> 3481 </div> 3482 3483 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3484 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3485 </span> 3486 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3487 </div> 3488 </li> 3489 <li class="tutor-course-content-list-item"> 3490 <div class="tutor-d-flex"> 3491 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3492 <h5 class="tutor-course-content-list-item-title"> 3493 Resolving XML Serialization Problems </h5> 3494 </div> 3495 3496 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3497 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3498 </span> 3499 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3500 </div> 3501 </li> 3502 </ul> 3503 </div> 3504 </div> 3505 </div> 3506 <div class="tutor-accordion-item"> 3507 <h4 class="tutor-accordion-item-header"> 3508 Supporting HATEOAS </h4> 3509 3510 <div class="tutor-accordion-item-body" style="display: none;"> 3511 <div class="tutor-accordion-item-body-content"> 3512 <ul class="tutor-course-content-list"> 3513 <li class="tutor-course-content-list-item"> 3514 <div class="tutor-d-flex"> 3515 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3516 <h5 class="tutor-course-content-list-item-title"> 3517 What is HATEOAS and Why is it so Important? </h5> 3518 </div> 3519 3520 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3521 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3522 </span> 3523 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3524 </div> 3525 </li> 3526 <li class="tutor-course-content-list-item"> 3527 <div class="tutor-d-flex"> 3528 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3529 <h5 class="tutor-course-content-list-item-title"> 3530 <a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/adding-links-in-the-project/"><span class="lesson-preview-title">Adding Links in the Project</span></a> </h5> 3531 </div> 3532 3533 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3534 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3535 </span> 3536 <span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3537 </div> 3538 </li> 3539 <li class="tutor-course-content-list-item"> 3540 <div class="tutor-d-flex"> 3541 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3542 <h5 class="tutor-course-content-list-item-title"> 3543 Additional Project Changes </h5> 3544 </div> 3545 3546 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3547 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3548 </span> 3549 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3550 </div> 3551 </li> 3552 <li class="tutor-course-content-list-item"> 3553 <div class="tutor-d-flex"> 3554 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3555 <h5 class="tutor-course-content-list-item-title"> 3556 Adding Custom Media Types </h5> 3557 </div> 3558 3559 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3560 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3561 </span> 3562 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3563 </div> 3564 </li> 3565 <li class="tutor-course-content-list-item"> 3566 <div class="tutor-d-flex"> 3567 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3568 <h5 class="tutor-course-content-list-item-title"> 3569 Implementing HATEOAS </h5> 3570 </div> 3571 3572 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3573 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3574 </span> 3575 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3576 </div> 3577 </li> 3578 </ul> 3579 </div> 3580 </div> 3581 </div> 3582 <div class="tutor-accordion-item"> 3583 <h4 class="tutor-accordion-item-header"> 3584 Working With OPTIONS and HEAD Requests </h4> 3585 3586 <div class="tutor-accordion-item-body" style="display: none;"> 3587 <div class="tutor-accordion-item-body-content"> 3588 <ul class="tutor-course-content-list"> 3589 <li class="tutor-course-content-list-item"> 3590 <div class="tutor-d-flex"> 3591 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3592 <h5 class="tutor-course-content-list-item-title"> 3593 OPTIONS HTTP Request </h5> 3594 </div> 3595 3596 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3597 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3598 </span> 3599 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3600 </div> 3601 </li> 3602 <li class="tutor-course-content-list-item"> 3603 <div class="tutor-d-flex"> 3604 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3605 <h5 class="tutor-course-content-list-item-title"> 3606 HEAD HTTP Request </h5> 3607 </div> 3608 3609 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3610 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3611 </span> 3612 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3613 </div> 3614 </li> 3615 </ul> 3616 </div> 3617 </div> 3618 </div> 3619 <div class="tutor-accordion-item"> 3620 <h4 class="tutor-accordion-item-header"> 3621 Root Document in ASP.NET Core Web API </h4> 3622 3623 <div class="tutor-accordion-item-body" style="display: none;"> 3624 <div class="tutor-accordion-item-body-content"> 3625 <ul class="tutor-course-content-list"> 3626 <li class="tutor-course-content-list-item"> 3627 <div class="tutor-d-flex"> 3628 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3629 <h5 class="tutor-course-content-list-item-title"> 3630 Root Document Implementation </h5> 3631 </div> 3632 3633 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3634 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3635 </span> 3636 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3637 </div> 3638 </li> 3639 </ul> 3640 </div> 3641 </div> 3642 </div> 3643 <div class="tutor-accordion-item"> 3644 <h4 class="tutor-accordion-item-header"> 3645 Versioning APIs </h4> 3646 3647 <div class="tutor-accordion-item-body" style="display: none;"> 3648 <div class="tutor-accordion-item-body-content"> 3649 <ul class="tutor-course-content-list"> 3650 <li class="tutor-course-content-list-item"> 3651 <div class="tutor-d-flex"> 3652 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3653 <h5 class="tutor-course-content-list-item-title"> 3654 About Versioning and Package Installation </h5> 3655 </div> 3656 3657 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3658 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3659 </span> 3660 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3661 </div> 3662 </li> 3663 <li class="tutor-course-content-list-item"> 3664 <div class="tutor-d-flex"> 3665 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3666 <h5 class="tutor-course-content-list-item-title"> 3667 <a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/versioning-examples/"><span class="lesson-preview-title">Versioning Examples</span></a> </h5> 3668 </div> 3669 3670 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3671 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3672 </span> 3673 <span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3674 </div> 3675 </li> 3676 <li class="tutor-course-content-list-item"> 3677 <div class="tutor-d-flex"> 3678 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3679 <h5 class="tutor-course-content-list-item-title"> 3680 Deprecating Versions And Conventions </h5> 3681 </div> 3682 3683 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3684 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3685 </span> 3686 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3687 </div> 3688 </li> 3689 </ul> 3690 </div> 3691 </div> 3692 </div> 3693 <div class="tutor-accordion-item"> 3694 <h4 class="tutor-accordion-item-header"> 3695 Caching in ASP.NET Core </h4> 3696 3697 <div class="tutor-accordion-item-body" style="display: none;"> 3698 <div class="tutor-accordion-item-body-content"> 3699 <ul class="tutor-course-content-list"> 3700 <li class="tutor-course-content-list-item"> 3701 <div class="tutor-d-flex"> 3702 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3703 <h5 class="tutor-course-content-list-item-title"> 3704 About Caching </h5> 3705 </div> 3706 3707 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3708 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3709 </span> 3710 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3711 </div> 3712 </li> 3713 <li class="tutor-course-content-list-item"> 3714 <div class="tutor-d-flex"> 3715 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3716 <h5 class="tutor-course-content-list-item-title"> 3717 Adding Cache Headers </h5> 3718 </div> 3719 3720 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3721 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3722 </span> 3723 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3724 </div> 3725 </li> 3726 <li class="tutor-course-content-list-item"> 3727 <div class="tutor-d-flex"> 3728 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3729 <h5 class="tutor-course-content-list-item-title"> 3730 Adding Cache-Store </h5> 3731 </div> 3732 3733 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3734 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3735 </span> 3736 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3737 </div> 3738 </li> 3739 <li class="tutor-course-content-list-item"> 3740 <div class="tutor-d-flex"> 3741 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3742 <h5 class="tutor-course-content-list-item-title"> 3743 Output Caching </h5> 3744 </div> 3745 3746 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3747 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3748 </span> 3749 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3750 </div> 3751 </li> 3752 <li
3752class="tutor-course-content-list-item"> 3753 <div class="tutor-d-flex"> 3754 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3755 <h5 class="tutor-course-content-list-item-title"> 3756 Using Output Caching In Our App </h5> 3757 </div> 3758 3759 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3760 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3761 </span> 3762 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3763 </div> 3764 </li> 3765 <li class="tutor-course-content-list-item"> 3766 <div class="tutor-d-flex"> 3767 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3768 <h5 class="tutor-course-content-list-item-title"> 3769 Output Cache Keys </h5> 3770 </div> 3771 3772 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3773 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3774 </span> 3775 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3776 </div> 3777 </li> 3778 <li class="tutor-course-content-list-item"> 3779 <div class="tutor-d-flex"> 3780 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3781 <h5 class="tutor-course-content-list-item-title"> 3782 Caching Revalidation </h5> 3783 </div> 3784 3785 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3786 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3787 </span> 3788 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3789 </div> 3790 </li> 3791 </ul> 3792 </div> 3793 </div> 3794 </div> 3795 <div class="tutor-accordion-item"> 3796 <h4 class="tutor-accordion-item-header"> 3797 Rate Limiting and Throttling </h4> 3798 3799 <div class="tutor-accordion-item-body" style="display: none;"> 3800 <div class="tutor-accordion-item-body-content"> 3801 <ul class="tutor-course-content-list"> 3802 <li class="tutor-course-content-list-item"> 3803 <div class="tutor-d-flex"> 3804 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3805 <h5 class="tutor-course-content-list-item-title"> 3806 About Rate Limiting </h5> 3807 </div> 3808 3809 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3810 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3811 </span> 3812 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3813 </div> 3814 </li> 3815 <li class="tutor-course-content-list-item"> 3816 <div class="tutor-d-flex"> 3817 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3818 <h5 class="tutor-course-content-list-item-title"> 3819 Implementing Rate Limiting </h5> 3820 </div> 3821 3822 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3823 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3824 </span> 3825 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3826 </div> 3827 </li> 3828 </ul> 3829 </div> 3830 </div> 3831 </div> 3832 <div class="tutor-accordion-item"> 3833 <h4 class="tutor-accordion-item-header"> 3834 Authentication and Authorization in Web API </h4> 3835 3836 <div class="tutor-accordion-item-body" style="display: none;"> 3837 <div class="tutor-accordion-item-body-content"> 3838 <ul class="tutor-course-content-list"> 3839 <li class="tutor-course-content-list-item"> 3840 <div class="tutor-d-flex"> 3841 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3842 <h5 class="tutor-course-content-list-item-title"> 3843 About The Authentication </h5> 3844 </div> 3845 3846 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3847 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3848 </span> 3849 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3850 </div> 3851 </li> 3852 <li class="tutor-course-content-list-item"> 3853 <div class="tutor-d-flex"> 3854 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3855 <h5 class="tutor-course-content-list-item-title"> 3856 Implementing Identity in ASP.NET Core Project </h5> 3857 </div> 3858 3859 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3860 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3861 </span> 3862 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3863 </div> 3864 </li> 3865 <li class="tutor-course-content-list-item"> 3866 <div class="tutor-d-flex"> 3867 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3868 <h5 class="tutor-course-content-list-item-title"> 3869 Creating Tables and Inserting Roles </h5> 3870 </div> 3871 3872 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3873 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3874 </span> 3875 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3876 </div> 3877 </li> 3878 <li class="tutor-course-content-list-item"> 3879 <div class="tutor-d-flex"> 3880 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3881 <h5 class="tutor-course-content-list-item-title"> 3882 User Creation </h5> 3883 </div> 3884 3885 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3886 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3887 </span> 3888 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3889 </div> 3890 </li> 3891 <li class="tutor-course-content-list-item"> 3892 <div class="tutor-d-flex"> 3893 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3894 <h5 class="tutor-course-content-list-item-title"> 3895 JWT Big Picture </h5> 3896 </div> 3897 3898 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3899 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3900 </span> 3901 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3902 </div> 3903 </li> 3904 <li class="tutor-course-content-list-item"> 3905 <div class="tutor-d-flex"> 3906 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3907 <h5 class="tutor-course-content-list-item-title"> 3908 JWT Configuration </h5> 3909 </div> 3910 3911 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3912 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3913 </span> 3914 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3915 </div> 3916 </li> 3917 <li class="tutor-course-content-list-item"> 3918 <div class="tutor-d-flex"> 3919 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3920 <h5 class="tutor-course-content-list-item-title"> 3921 Protecting Endpoints </h5> 3922 </div> 3923 3924 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3925 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3926 </span> 3927 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3928 </div> 3929 </li> 3930 <li class="tutor-course-content-list-item"> 3931 <div class="tutor-d-flex"> 3932 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3933 <h5 class="tutor-course-content-list-item-title"> 3934 Implementing Authentication </h5> 3935 </div> 3936 3937 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3938 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3939 </span> 3940 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3941 </div> 3942 </li> 3943 <li class="tutor-course-content-list-item"> 3944 <div class="tutor-d-flex"> 3945 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3946 <h5 class="tutor-course-content-list-item-title"> 3947 Role-Based Authorization </h5> 3948 </div> 3949 3950 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3951 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3952 </span> 3953 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3954 </div> 3955 </li> 3956 </ul> 3957 </div> 3958 </div> 3959 </div> 3960 <div class="tutor-accordion-item"> 3961 <h4 class="tutor-accordion-item-header"> 3962 Refresh Token In ASP.NET Core Web API </h4> 3963 3964 <div class="tutor-accordion-item-body" style="display: none;"> 3965 <div class="tutor-accordion-item-body-content"> 3966 <ul class="tutor-course-content-list"> 3967 <li class="tutor-course-content-list-item"> 3968 <div class="tutor-d-flex"> 3969 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3970 <h5 class="tutor-course-content-list-item-title"> 3971 About Refresh Token </h5> 3972 </div> 3973 3974 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3975 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3976 </span> 3977 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3978 </div> 3979 </li> 3980 <li class="tutor-course-content-list-item"> 3981 <div class="tutor-d-flex"> 3982 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3983 <h5 class="tutor-course-content-list-item-title"> 3984 The Need for Refresh Tokens </h5> 3985 </div> 3986 3987 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 3988 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 3989 </span> 3990 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 3991 </div> 3992 </li> 3993 <li class="tutor-course-content-list-item"> 3994 <div class="tutor-d-flex"> 3995 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 3996 <h5 class="tutor-course-content-list-item-title"> 3997 Refresh Token Implementation </h5> 3998 </div> 3999 4000 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4001 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4002 </span> 4003 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4004 </div> 4005 </li> 4006 <li class="tutor-course-content-list-item"> 4007 <div class="tutor-d-flex"> 4008 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4009 <h5 class="tutor-course-content-list-item-title"> 4010 <a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/token-controller-implementation/"><span class="lesson-preview-title">Token Controller Implementation</span></a> </h5> 4011 </div> 4012 4013 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4014 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4015 </span> 4016 <span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4017 </div> 4018 </li> 4019 </ul> 4020 </div> 4021 </div> 4022 </div> 4023 <div class="tutor-accordion-item"> 4024 <h4 class="tutor-accordion-item-header"> 4025 Binding Configuration and Options Pattern </h4> 4026 4027 <div class="tutor-accordion-item-body" style="display: none;"> 4028 <div class="tutor-accordion-item-body-content"> 4029 <ul class="tutor-course-content-list"> 4030 <li class="tutor-course-content-list-item"> 4031 <div class="tutor-d-flex"> 4032 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4033 <h5 class="tutor-course-content-list-item-title"> 4034 The Previous Implementation </h5> 4035 </div> 4036 4037 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4038 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4039 </span> 4040 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4041 </div> 4042 </li> 4043 <li class="tutor-course-content-list-item"> 4044 <div class="tutor-d-flex"> 4045 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4046 <h5 class="tutor-course-content-list-item-title"> 4047 Binding Configuration </h5> 4048 </div> 4049 4050 <div class="tutor-d-flex t
4050utor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4051 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4052 </span> 4053 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4054 </div> 4055 </li> 4056 <li class="tutor-course-content-list-item"> 4057 <div class="tutor-d-flex"> 4058 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4059 <h5 class="tutor-course-content-list-item-title"> 4060 Options Pattern </h5> 4061 </div> 4062 4063 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4064 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4065 </span> 4066 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4067 </div> 4068 </li> 4069 <li class="tutor-course-content-list-item"> 4070 <div class="tutor-d-flex"> 4071 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4072 <h5 class="tutor-course-content-list-item-title"> 4073 IOptionsSnapshot and IOptionsMonitor </h5> 4074 </div> 4075 4076 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4077 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4078 </span> 4079 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4080 </div> 4081 </li> 4082 </ul> 4083 </div> 4084 </div> 4085 </div> 4086 <div class="tutor-accordion-item"> 4087 <h4 class="tutor-accordion-item-header"> 4088 Health Checks in ASP.NET Core Web API </h4> 4089 4090 <div class="tutor-accordion-item-body" style="display: none;"> 4091 <div class="tutor-accordion-item-body-content"> 4092 <ul class="tutor-course-content-list"> 4093 <li class="tutor-course-content-list-item"> 4094 <div class="tutor-d-flex"> 4095 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4096 <h5 class="tutor-course-content-list-item-title"> 4097 About Health Checks in ASP.NET Core </h5> 4098 </div> 4099 4100 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4101 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4102 </span> 4103 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4104 </div> 4105 </li> 4106 <li class="tutor-course-content-list-item"> 4107 <div class="tutor-d-flex"> 4108 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4109 <h5 class="tutor-course-content-list-item-title"> 4110 Implementing Health Checks in ASP.NET Core Web API </h5> 4111 </div> 4112 4113 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4114 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4115 </span> 4116 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4117 </div> 4118 </li> 4119 <li class="tutor-course-content-list-item"> 4120 <div class="tutor-d-flex"> 4121 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4122 <h5 class="tutor-course-content-list-item-title"> 4123 Creating Database Health Check </h5> 4124 </div> 4125 4126 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4127 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4128 </span> 4129 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4130 </div> 4131 </li> 4132 <li class="tutor-course-content-list-item"> 4133 <div class="tutor-d-flex"> 4134 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4135 <h5 class="tutor-course-content-list-item-title"> 4136 Creating Custom Health Checks </h5> 4137 </div> 4138 4139 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4140 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4141 </span> 4142 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4143 </div> 4144 </li> 4145 <li class="tutor-course-content-list-item"> 4146 <div class="tutor-d-flex"> 4147 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4148 <h5 class="tutor-course-content-list-item-title"> 4149 Adding UI to Enhance Health Check Response </h5> 4150 </div> 4151 4152 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4153 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4154 </span> 4155 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4156 </div> 4157 </li> 4158 </ul> 4159 </div> 4160 </div> 4161 </div> 4162 <div class="tutor-accordion-item"> 4163 <h4 class="tutor-accordion-item-header"> 4164 Documenting APIs </h4> 4165 4166 <div class="tutor-accordion-item-body" style="display: none;"> 4167 <div class="tutor-accordion-item-body-content"> 4168 <ul class="tutor-course-content-list"> 4169 <li class="tutor-course-content-list-item"> 4170 <div class="tutor-d-flex"> 4171 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4172 <h5 class="tutor-course-content-list-item-title"> 4173 About Swagger </h5> 4174 </div> 4175 4176 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4177 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4178 </span> 4179 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4180 </div> 4181 </li> 4182 <li class="tutor-course-content-list-item"> 4183 <div class="tutor-d-flex"> 4184 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4185 <h5 class="tutor-course-content-list-item-title"> 4186 Swagger Integration Into Our Project </h5> 4187 </div> 4188 4189 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4190 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4191 </span> 4192 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4193 </div> 4194 </li> 4195 <li class="tutor-course-content-list-item"> 4196 <div class="tutor-d-flex"> 4197 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4198 <h5 class="tutor-course-content-list-item-title"> 4199 Adding Authorization Support </h5> 4200 </div> 4201 4202 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4203 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4204 </span> 4205 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4206 </div> 4207 </li> 4208 <li class="tutor-course-content-list-item"> 4209 <div class="tutor-d-flex"> 4210 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4211 <h5 class="tutor-course-content-list-item-title"> 4212 Extending Swagger Configuration </h5> 4213 </div> 4214 4215 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4216 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4217 </span> 4218 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4219 </div> 4220 </li> 4221 </ul> 4222 </div> 4223 </div> 4224 </div> 4225 <div class="tutor-accordion-item"> 4226 <h4 class="tutor-accordion-item-header"> 4227 Testing ASP.NET Core Web API </h4> 4228 4229 <div class="tutor-accordion-item-body" style="display: none;"> 4230 <div class="tutor-accordion-item-body-content"> 4231 <ul class="tutor-course-content-list"> 4232 <li class="tutor-course-content-list-item"> 4233 <div class="tutor-d-flex"> 4234 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4235 <h5 class="tutor-course-content-list-item-title"> 4236 Why Testing Matters? </h5> 4237 </div> 4238 4239 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4240 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4241 </span> 4242 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4243 </div> 4244 </li> 4245 <li class="tutor-course-content-list-item"> 4246 <div class="tutor-d-flex"> 4247 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4248 <h5 class="tutor-course-content-list-item-title"> 4249 Types Of Tests </h5> 4250 </div> 4251 4252 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4253 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4254 </span> 4255 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4256 </div> 4257 </li> 4258 <li class="tutor-course-content-list-item"> 4259 <div class="tutor-d-flex"> 4260 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4261 <h5 class="tutor-course-content-list-item-title"> 4262 Choosing the Right Tools for the Job </h5> 4263 </div> 4264 4265 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4266 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4267 </span> 4268 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4269 </div> 4270 </li> 4271 <li class="tutor-course-content-list-item"> 4272 <div class="tutor-d-flex"> 4273 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4274 <h5 class="tutor-course-content-list-item-title"> 4275 <a href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/lesson/setting-up-xunit-with-testcontainers/"><span class="lesson-preview-title">Setting Up xUnit with Testcontainers</span></a> </h5> 4276 </div> 4277 4278 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4279 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4280 </span> 4281 <span class="tutor-course-content-list-item-status tutor-icon-eye-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4282 </div> 4283 </li> 4284 <li class="tutor-course-content-list-item"> 4285 <div class="tutor-d-flex"> 4286 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4287 <h5 class="tutor-course-content-list-item-title"> 4288 Creating Test Classes </h5> 4289 </div> 4290 4291 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4292 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4293 </span> 4294 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4295 </div> 4296 </li> 4297 <li class="tutor-course-content-list-item"> 4298 <div class="tutor-d-flex"> 4299 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4300 <h5 class="tutor-course-content-list-item-title"> 4301 Validation Tests </h5> 4302 </div> 4303 4304 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4305 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4306 </span> 4307 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4308 </div> 4309 </li> 4310 <li class="tutor-course-content-list-item"> 4311 <div class="tutor-d-flex"> 4312 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4313 <h5 class="tutor-course-content-list-item-title"> 4314 Authorization Tests </h5> 4315 </div> 4316 4317 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4318 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4319 </span> 4320 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4321 </div> 4322 </li> 4323 <li class="tutor-course-content-list-item"> 4324 <div class="tutor-d-flex"> 4325 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4326 <h5 class="tutor-course-content-list-item-title"> 4327 Paging, Filtering, Searching, and Sorting Tests </h5> 4328 </div> 4329 4330 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4331 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4332 </span> 4333 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4334 </div> 4335 </li> 4336 <li class="tutor-course-content-list-item"> 4337 <div class="tutor-d-flex"> 4338 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4339 <h5 class="tutor-course-content-list-item-title"> 4340 What’s Next? </h5> 4341 </d
4341iv> 4342 4343 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4344 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4345 </span> 4346 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4347 </div> 4348 </li> 4349 </ul> 4350 </div> 4351 </div> 4352 </div> 4353 <div class="tutor-accordion-item"> 4354 <h4 class="tutor-accordion-item-header"> 4355 Deployment to IIS </h4> 4356 4357 <div class="tutor-accordion-item-body" style="display: none;"> 4358 <div class="tutor-accordion-item-body-content"> 4359 <ul class="tutor-course-content-list"> 4360 <li class="tutor-course-content-list-item"> 4361 <div class="tutor-d-flex"> 4362 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4363 <h5 class="tutor-course-content-list-item-title"> 4364 Creating Publish Files </h5> 4365 </div> 4366 4367 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4368 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4369 </span> 4370 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4371 </div> 4372 </li> 4373 <li class="tutor-course-content-list-item"> 4374 <div class="tutor-d-flex"> 4375 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4376 <h5 class="tutor-course-content-list-item-title"> 4377 Windows Server Hosting Bundle and IIS Installation </h5> 4378 </div> 4379 4380 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4381 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4382 </span> 4383 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4384 </div> 4385 </li> 4386 <li class="tutor-course-content-list-item"> 4387 <div class="tutor-d-flex"> 4388 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4389 <h5 class="tutor-course-content-list-item-title"> 4390 Configuring Environment File </h5> 4391 </div> 4392 4393 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4394 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4395 </span> 4396 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4397 </div> 4398 </li> 4399 <li class="tutor-course-content-list-item"> 4400 <div class="tutor-d-flex"> 4401 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4402 <h5 class="tutor-course-content-list-item-title"> 4403 Testing Deployed Application </h5> 4404 </div> 4405 4406 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4407 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4408 </span> 4409 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4410 </div> 4411 </li> 4412 </ul> 4413 </div> 4414 </div> 4415 </div> 4416 <div class="tutor-accordion-item"> 4417 <h4 class="tutor-accordion-item-header"> 4418 APPENDIX: The HTTP Reference Tables </h4> 4419 4420 <div class="tutor-accordion-item-body" style="display: none;"> 4421 <div class="tutor-accordion-item-body-content"> 4422 <ul class="tutor-course-content-list"> 4423 <li class="tutor-course-content-list-item"> 4424 <div class="tutor-d-flex"> 4425 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4426 <h5 class="tutor-course-content-list-item-title"> 4427 Request Methods </h5> 4428 </div> 4429 4430 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4431 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4432 </span> 4433 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4434 </div> 4435 </li> 4436 <li class="tutor-course-content-list-item"> 4437 <div class="tutor-d-flex"> 4438 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4439 <h5 class="tutor-course-content-list-item-title"> 4440 Status Codes </h5> 4441 </div> 4442 4443 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4444 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4445 </span> 4446 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4447 </div> 4448 </li> 4449 <li class="tutor-course-content-list-item"> 4450 <div class="tutor-d-flex"> 4451 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4452 <h5 class="tutor-course-content-list-item-title"> 4453 Request Headers </h5> 4454 </div> 4455 4456 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4457 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4458 </span> 4459 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4460 </div> 4461 </li> 4462 <li class="tutor-course-content-list-item"> 4463 <div class="tutor-d-flex"> 4464 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4465 <h5 class="tutor-course-content-list-item-title"> 4466 Mime Types </h5> 4467 </div> 4468 4469 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4470 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4471 </span> 4472 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4473 </div> 4474 </li> 4475 </ul> 4476 </div> 4477 </div> 4478 </div> 4479 <div class="tutor-accordion-item"> 4480 <h4 class="tutor-accordion-item-header"> 4481 BONUS: Improve Response Flow and Performance With Discriminated Unions </h4> 4482 4483 <div class="tutor-accordion-item-body" style="display: none;"> 4484 <div class="tutor-accordion-item-body-content"> 4485 <ul class="tutor-course-content-list"> 4486 <li class="tutor-course-content-list-item"> 4487 <div class="tutor-d-flex"> 4488 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4489 <h5 class="tutor-course-content-list-item-title"> 4490 What are Discriminated Unions and Why Should We Use It </h5> 4491 </div> 4492 4493 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4494 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4495 </span> 4496 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4497 </div> 4498 </li> 4499 <li class="tutor-course-content-list-item"> 4500 <div class="tutor-d-flex"> 4501 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4502 <h5 class="tutor-course-content-list-item-title"> 4503 Installation and Creating the Required Response Types </h5> 4504 </div> 4505 4506 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4507 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4508 </span> 4509 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4510 </div> 4511 </li> 4512 <li class="tutor-course-content-list-item"> 4513 <div class="tutor-d-flex"> 4514 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4515 <h5 class="tutor-course-content-list-item-title"> 4516 CompanyService Modification </h5> 4517 </div> 4518 4519 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4520 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4521 </span> 4522 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4523 </div> 4524 </li> 4525 <li class="tutor-course-content-list-item"> 4526 <div class="tutor-d-flex"> 4527 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4528 <h5 class="tutor-course-content-list-item-title"> 4529 CompaniesController Modifications </h5> 4530 </div> 4531 4532 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4533 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4534 </span> 4535 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4536 </div> 4537 </li> 4538 <li class="tutor-course-content-list-item"> 4539 <div class="tutor-d-flex"> 4540 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4541 <h5 class="tutor-course-content-list-item-title"> 4542 Testing the Application </h5> 4543 </div> 4544 4545 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4546 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4547 </span> 4548 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4549 </div> 4550 </li> 4551 <li class="tutor-course-content-list-item"> 4552 <div class="tutor-d-flex"> 4553 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4554 <h5 class="tutor-course-content-list-item-title"> 4555 EmployeeService Modification </h5> 4556 </div> 4557 4558 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4559 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4560 </span> 4561 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4562 </div> 4563 </li> 4564 <li class="tutor-course-content-list-item"> 4565 <div class="tutor-d-flex"> 4566 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4567 <h5 class="tutor-course-content-list-item-title"> 4568 EmployeesController Modification </h5> 4569 </div> 4570 4571 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4572 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4573 </span> 4574 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4575 </div> 4576 </li> 4577 </ul> 4578 </div> 4579 </div> 4580 </div> 4581 <div class="tutor-accordion-item"> 4582 <h4 class="tutor-accordion-item-header"> 4583 BONUS: CQRS and MediatR With ASP.NET Core Web API </h4> 4584 4585 <div class="tutor-accordion-item-body" style="display: none;"> 4586 <div class="tutor-accordion-item-body-content"> 4587 <ul class="tutor-course-content-list"> 4588 <li class="tutor-course-content-list-item"> 4589 <div class="tutor-d-flex"> 4590 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4591 <h5 class="tutor-course-content-list-item-title"> 4592 About CQRS and Mediator Pattern </h5> 4593 </div> 4594 4595 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4596 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4597 </span> 4598 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4599 </div> 4600 </li> 4601 <li class="tutor-course-content-list-item"> 4602 <div class="tutor-d-flex"> 4603 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4604 <h5 class="tutor-course-content-list-item-title"> 4605 Adding Application Project and Initial Configuration </h5> 4606 </div> 4607 4608 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4609 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4610 </span> 4611 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4612 </div> 4613 </li> 4614 <li class="tutor-course-content-list-item"> 4615 <div class="tutor-d-flex"> 4616 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4617 <h5 class="tutor-course-content-list-item-title"> 4618 Requests With MediatR </h5> 4619 </div> 4620 4621 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4622 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4623 </span> 4624 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4625 </div> 4626 </li> 4627 <li class="tutor-course-content-list-item"> 4628 <div class="tutor-d-flex"> 4629 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4630 <h5 class="tutor-course-content-list-item-title"> 4631 Commands with MediatR </h5> 4632 </div> 4633 4634 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4635 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4636 </span> 4637 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4638 </div> 4639 </li> 4640
4640 <li class="tutor-course-content-list-item"> 4641 <div class="tutor-d-flex"> 4642 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4643 <h5 class="tutor-course-content-list-item-title"> 4644 MediatR Notifications </h5> 4645 </div> 4646 4647 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4648 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4649 </span> 4650 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4651 </div> 4652 </li> 4653 <li class="tutor-course-content-list-item"> 4654 <div class="tutor-d-flex"> 4655 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4656 <h5 class="tutor-course-content-list-item-title"> 4657 MediatR Behaviors </h5> 4658 </div> 4659 4660 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4661 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4662 </span> 4663 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4664 </div> 4665 </li> 4666 </ul> 4667 </div> 4668 </div> 4669 </div> 4670 <div class="tutor-accordion-item"> 4671 <h4 class="tutor-accordion-item-header"> 4672 BONUS: Working With Multiple Databases </h4> 4673 4674 <div class="tutor-accordion-item-body" style="display: none;"> 4675 <div class="tutor-accordion-item-body-content"> 4676 <ul class="tutor-course-content-list"> 4677 <li class="tutor-course-content-list-item"> 4678 <div class="tutor-d-flex"> 4679 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4680 <h5 class="tutor-course-content-list-item-title"> 4681 Adding Support For Another Database </h5> 4682 </div> 4683 4684 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4685 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4686 </span> 4687 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4688 </div> 4689 </li> 4690 <li class="tutor-course-content-list-item"> 4691 <div class="tutor-d-flex"> 4692 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4693 <h5 class="tutor-course-content-list-item-title"> 4694 Injecting Multiple Databases in the Repository Pattern </h5> 4695 </div> 4696 4697 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4698 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4699 </span> 4700 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4701 </div> 4702 </li> 4703 <li class="tutor-course-content-list-item"> 4704 <div class="tutor-d-flex"> 4705 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4706 <h5 class="tutor-course-content-list-item-title"> 4707 Client Repository Layer Implementation </h5> 4708 </div> 4709 4710 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4711 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4712 </span> 4713 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4714 </div> 4715 </li> 4716 <li class="tutor-course-content-list-item"> 4717 <div class="tutor-d-flex"> 4718 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4719 <h5 class="tutor-course-content-list-item-title"> 4720 Client Service Layer Implementation </h5> 4721 </div> 4722 4723 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4724 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4725 </span> 4726 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4727 </div> 4728 </li> 4729 <li class="tutor-course-content-list-item"> 4730 <div class="tutor-d-flex"> 4731 <span class="tutor-course-content-list-item-icon tutor-icon-document-text tutor-mr-12 tutor-mt-4"></span> 4732 <h5 class="tutor-course-content-list-item-title"> 4733 Testing Multiple Databases </h5> 4734 </div> 4735 4736 <div class="tutor-d-flex tutor-align-center tutor-flex-shrink-0 tutor-mt-2"> 4737 <span class="tutor-course-content-list-item-duration tutor-fs-7 tutor-color-muted"> 4738 </span> 4739 <span class="tutor-course-content-list-item-status tutor-icon-lock-line tutor-color-muted tutor-ml-20" aria-hidden="true"></span> 4740 </div> 4741 </li> 4742 </ul> 4743 </div> 4744 </div> 4745 </div> 4746 </div> 4747 </div> 4748 4749 </div> 4750 <div id="tutor-course-details-tab-reviews" class="tutor-tab-item"> 4751 4752<div class="tutor-pagination-wrapper-replaceable"> 4753 <h3 class="tutor-fs-5 tutor-fw-bold tutor-color-black tutor-mb-24"> 4754 Student Ratings & Reviews </h3> 4755 4756 <div class="tutor-card tutor-review-card"> 4757 <div class="tutor-review-summary tutor-p-24 tutor-p-lg-40"> 4758 <div class="tutor-row tutor-gx-xl-5 tutor-align-center"> 4759 <div class="tutor-col-lg-auto tutor-text-center tutor-mb-16 tutor-mb-lg-0"> 4760 <div class="tutor-review-summary-average-rating tutor-mb-20"> 4761 4.9 </div> 4762 4763 <div> 4764 <div class="tutor-d-inline-block"> 4765 <div class="tutor-ratings tutor-ratings-lg"> 4766 <div class="tutor-ratings-stars"> 4767 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span> </div> 4768 </div> 4769 </div> 4770 </div> 4771 4772 <div class="tutor-fs-6 tutor-color-secondary tutor-mt-12 tutor-total-rating-count"> 4773 Total 25 Ratings </div> 4774 </div> 4775 4776 <div class="tutor-col-lg"> 4777 <div class="tutor-review-summary-ratings"> 4778 <div class="tutor-row tutor-align-center tutor-review-summary-rating"> 4779 <div class="tutor-col-auto"> 4780 <div class="tutor-ratings"> 4781 <div class="tutor-ratings-stars"> 4782 <span class="tutor-icon-star-line" aria-hidden="true"></span> 4783 </div> 4784 <div class="tutor-ratings-average"> 4785 5 </div> 4786 </div> 4787 </div> 4788 4789 <div class="tutor-col"> 4790 <div class="tutor-progress-bar tutor-ratings-progress-bar" style="--tutor-progress-value: 94.198895027624%"> 4791 <span class="tutor-progress-value" aria-hidden="true"></span> 4792 </div> 4793 </div> 4794 4795 <div class="tutor-col-4 tutor-col-lg-3"> 4796 <span class="tutor-fs-6 tutor-color-secondary tutor-individual-star-rating"> 4797 341 Ratings </span> 4798 </div> 4799 </div> 4800 <div class="tutor-row tutor-align-center tutor-review-summary-rating"> 4801 <div class="tutor-col-auto"> 4802 <div class="tutor-ratings"> 4803 <div class="tutor-ratings-stars"> 4804 <span class="tutor-icon-star-line" aria-hidden="true"></span> 4805 </div> 4806 <div class="tutor-ratings-average"> 4807 4 </div> 4808 </div> 4809 </div> 4810 4811 <div class="tutor-col"> 4812 <div class="tutor-progress-bar tutor-ratings-progress-bar" style="--tutor-progress-value: 5.2486187845304%"> 4813 <span class="tutor-progress-value" aria-hidden="true"></span> 4814 </div> 4815 </div> 4816 4817 <div class="tutor-col-4 tutor-col-lg-3"> 4818 <span class="tutor-fs-6 tutor-color-secondary tutor-individual-star-rating"> 4819 19 Ratings </span> 4820 </div> 4821 </div> 4822 <div class="tutor-row tutor-align-center tutor-review-summary-rating"> 4823 <div class="tutor-col-auto"> 4824 <div class="tutor-ratings"> 4825 <div class="tutor-ratings-stars"> 4826 <span class="tutor-icon-star-line" aria-hidden="true"></span> 4827 </div> 4828 <div class="tutor-ratings-average"> 4829 3 </div> 4830 </div> 4831 </div> 4832 4833 <div class="tutor-col"> 4834 <div class="tutor-progress-bar tutor-ratings-progress-bar" style="--tutor-progress-value: 0.27624309392265%"> 4835 <span class="tutor-progress-value" aria-hidden="true"></span> 4836 </div> 4837 </div> 4838 4839 <div class="tutor-col-4 tutor-col-lg-3"> 4840 <span class="tutor-fs-6 tutor-color-secondary tutor-individual-star-rating"> 4841 1 Rating </span> 4842 </div> 4843 </div> 4844 <div class="tutor-row tutor-align-center tutor-review-summary-rating"> 4845 <div class="tutor-col-auto"> 4846 <div class="tutor-ratings"> 4847 <div class="tutor-ratings-stars"> 4848 <span class="tutor-icon-star-line" aria-hidden="true"></span> 4849 </div> 4850 <div class="tutor-ratings-average"> 4851 2 </div> 4852 </div> 4853 </div> 4854 4855 <div class="tutor-col"> 4856 <div class="tutor-progress-bar tutor-ratings-progress-bar" style="--tutor-progress-value: 0%"> 4857 <span class="tutor-progress-value" aria-hidden="true"></span> 4858 </div> 4859 </div> 4860 4861 <div class="tutor-col-4 tutor-col-lg-3"> 4862 <span class="tutor-fs-6 tutor-color-secondary tutor-individual-star-rating"> 4863 0 Rating </span> 4864 </div> 4865 </div> 4866 <div class="tutor-row tutor-align-center tutor-review-summary-rating"> 4867 <div class="tutor-col-auto"> 4868 <div class="tutor-ratings"> 4869 <div class="tutor-ratings-stars"> 4870 <span class="tutor-icon-star-line" aria-hidden="true"></span> 4871 </div> 4872 <div class="tutor-ratings-average"> 4873 1 </div> 4874 </div> 4875 </div> 4876 4877 <div class="tutor-col"> 4878 <div class="tutor-progress-bar tutor-ratings-progress-bar" style="--tutor-progress-value: 0.27624309392265%"> 4879 <span class="tutor-progress-value" aria-hidden="true"></span> 4880 </div> 4881 </div> 4882 4883 <div class="tutor-col-4 tutor-col-lg-3"> 4884 <span class="tutor-fs-6 tutor-color-secondary tutor-individual-star-rating"> 4885 1 Rating </span> 4886 </div> 4887 </div> 4888 </div> 4889 </div>
4890 </div> 4891 </div> 4892 4893 <div class="tutor-hr" aria-hidden="true"></div> 4894 4895 <div class="tutor-reviews tutor-card-list tutor-pagination-content-appendable"> 4896 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 4897 <div class="tutor-row"> 4898 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 4899 <div class="tutor-mb-12"> 4900 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">TN</span></div></div> </div> 4901 4902 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 4903 <a href="#" class="tutor-color-black"> 4904 Tony Nguyen </a> 4905 </div> 4906 4907 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted"> 4908 2 months ago </div> 4909 </div> 4910 4911 <div class="tutor-col-lg-9"> 4912 4913 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 4914 <div class="tutor-ratings-stars"> 4915 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span> </div> 4916 </div> 4917 4918 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 4919 Vladimir and his AI Code Mentor are really helpful and cheerful, let even ADHDers can even finish the course. </div> 4920 </div> 4921 </div> 4922 </div> 4923 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 4924 <div class="tutor-row"> 4925 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 4926 <div class="tutor-mb-12"> 4927 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">A</span></div></div> </div> 4928 4929 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 4930 <a href="#" class="tutor-color-black"> 4931 anderdominio </a> 4932 </div> 4933 4934 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted"> 4935 5 months ago </div> 4936 </div> 4937 4938 <div class="tutor-col-lg-9"> 4939 4940 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 4941 <div class="tutor-ratings-stars"> 4942 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span> </div> 4943 </div> 4944 4945 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 4946 Nice to know everything I learned from this course. </div> 4947 </div> 4948 </div> 4949 </div> 4950 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 4951 <div class="tutor-row"> 4952 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 4953 <div class="tutor-mb-12"> 4954 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">M</span></div></div> </div> 4955 4956 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 4957 <a href="#" class="tutor-color-black"> 4958 marco.soriaa7 </a> 4959 </div> 4960 4961 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted"> 4962 6 months ago </div> 4963 </div> 4964 4965 <div class="tutor-col-lg-9"> 4966 4967 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 4968 <div class="tutor-ratings-stars"> 4969 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-line"></span> </div> 4970 </div> 4971 4972 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 4973 I think it is a great course It shows many aspects and it is well documented. I would suggest to update the code on some libraries. also change swagger for scalar and user azure for deploy rather than IIS </div> 4974 </div> 4975 </div> 4976 </div> 4977 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 4978 <div class="tutor-row"> 4979 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 4980 <div class="tutor-mb-12"> 4981 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">DB</span></div></div>
4981 </div> 4982 4983 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 4984 <a href="#" class="tutor-color-black"> 4985 Daniel Balaz </a> 4986 </div> 4987 4988 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted"> 4989 9 months ago </div> 4990 </div> 4991 4992 <div class="tutor-col-lg-9"> 4993 4994 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 4995 <div class="tutor-ratings-stars"> 4996 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span> </div> 4997 </div> 4998 4999 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 5000 Great course! </div> 5001 </div> 5002 </div> 5003 </div> 5004 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 5005 <div class="tutor-row"> 5006 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 5007 <div class="tutor-mb-12"> 5008 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><img src="https://courses.code-maze.com/wp-content/uploads/2025/02/20220413_124208-150x150.jpg" alt="rajada" /> </div></div> </div> 5009 5010 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 5011 <a href="#" class="tutor-color-black"> 5012 rajada </a> 5013 </div> 5014 5015 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted"> 5016 10 months ago </div> 5017 </div> 5018 5019 <div class="tutor-col-lg-9"> 5020 5021 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 5022 <div class="tutor-ratings-stars"> 5023 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span> </div> 5024 </div> 5025 5026 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 5027 This course was fundamental in improving my knowledge of Clean Architecture. The material is exceptionally well taught, being both educational and captivating. I was completely immersed in the content, delving so deeply into the subject that the experience was equivalent to a face-to-face course. I congratulate the entire team for their excellent work! You really deliver what you promise and are to be commende </div> 5028 </div> 5029 </div> 5030 </div> 5031 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 5032 <div class="tutor-row"> 5033 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 5034 <div class="tutor-mb-12"> 5035 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">M</span></div></div> </div> 5036 5037 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 5038 <a href="#" class="tutor-color-black"> 5039 marinakercov </a> 5040 </div> 5041 5042 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted"> 5043 10 months ago </div> 5044 </div> 5045 5046 <div class="tutor-col-lg-9"> 5047 5048 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 5049 <div class="tutor-ratings-stars"> 5050 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span> </div> 5051 </div> 5052 5053 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 5054 Amazing course :-). The content is excellent and very easy to follow, truly engaging from start to finish. Bravo! </div> 5055 </div> 5056 </div> 5057 </div> 5058 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 5059 <div class="tutor-row"> 5060 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 5061 <div class="tutor-mb-12"> 5062 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><img src="https://courses.code-maze.com/wp-content/uploads/2024/11/IMG_0832.jpg" alt="Gaga Demetrashvili" /> </div></div> </div> 5063 5064 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 5065 <a href="#" class="tutor-color-black"> 5066 Gaga Demetrashvili </a> 5067 </div> 5068 5069 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
5070 1 year ago </div> 5071 </div> 5072 5073 <div class="tutor-col-lg-9"> 5074 5075 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 5076 <div class="tutor-ratings-stars"> 5077 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-line"></span> </div> 5078 </div> 5079 5080 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 5081 Maybe if some parts were going more deeply into real life scenarios it would be better, but overall I am satisfied with this course. Looking forward to additions and updates based on latest best practices. </div> 5082 </div> 5083 </div> 5084 </div> 5085 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 5086 <div class="tutor-row"> 5087 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 5088 <div class="tutor-mb-12"> 5089 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">JV</span></div></div> </div> 5090 5091 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 5092 <a href="#" class="tutor-color-black"> 5093 Jorge Viveros </a> 5094 </div> 5095 5096 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted"> 5097 1 year ago </div> 5098 </div> 5099 5100 <div class="tutor-col-lg-9"> 5101 5102 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 5103 <div class="tutor-ratings-stars"> 5104 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span> </div> 5105 </div> 5106 5107 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 5108 This course is very importante for me </div> 5109 </div> 5110 </div> 5111 </div> 5112 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 5113 <div class="tutor-row"> 5114 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 5115 <div class="tutor-mb-12"> 5116 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">AC</span></div></div> </div> 5117 5118 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 5119 <a href="#" class="tutor-color-black"> 5120 Arkadiusz Chrobak </a> 5121 </div> 5122 5123 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted"> 5124 1 year ago </div> 5125 </div> 5126 5127 <div class="tutor-col-lg-9"> 5128 5129 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 5130 <div class="tutor-ratings-stars"> 5131 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span> </div> 5132 </div> 5133 5134 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 5135 Course show valid project architecture </div> 5136 </div> 5137 </div> 5138 </div> 5139 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 5140 <div class="tutor-row"> 5141 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 5142 <div class="tutor-mb-12"> 5143 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">G</span></div></div> </div> 5144 5145 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 5146 <a href="#" class="tutor-color-black"> 5147 gwheeloc </a> 5148 </div> 5149 5150 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted"> 5151 1 year ago </div> 5152 </div> 5153 5154 <div class="tutor-col-lg-9"> 5155 5156 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 5157 <div class="tutor-ratings-stars"> 5158 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-line"></span> </div> 5159 </div> 5160 5161 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 5162 I really enjoyed the course and learned a lot â Iâve even recommended it to others. One improvement I'd suggest is adding links to earlier lessons when key concepts are referenced later on. Since I completed the course over several months, fitting it in around other responsibilities, it was sometimes challenging to locate where certain ideas were originally explained. </div> 5163 </div> 5164 </div> 5165 </div> 5166 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 5167 <div class="tutor-row"> 5168 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 5169 <div class="tutor-mb-12"> 5170 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">O</span></div></div>
5170 </div> 5171 5172 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 5173 <a href="#" class="tutor-color-black"> 5174 ostart </a> 5175 </div> 5176 5177 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted"> 5178 1 year ago </div> 5179 </div> 5180 5181 <div class="tutor-col-lg-9"> 5182 5183 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 5184 <div class="tutor-ratings-stars"> 5185 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span> </div> 5186 </div> 5187 5188 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 5189 I am very grateful to Marinko and Valdimir for this wonderful course. It was a long journey, but it was always interesting. The main advantages of the course are the simplicity of presentation of difficult concepts and practical useful examples! </div> 5190 </div> 5191 </div> 5192 </div> 5193 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 5194 <div class="tutor-row"> 5195 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 5196 <div class="tutor-mb-12"> 5197 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">PW</span></div></div> </div> 5198 5199 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 5200 <a href="#" class="tutor-color-black"> 5201 Priyam Wadhawan </a> 5202 </div> 5203 5204 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted"> 5205 1 year ago </div> 5206 </div> 5207 5208 <div class="tutor-col-lg-9"> 5209 5210 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 5211 <div class="tutor-ratings-stars"> 5212 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span> </div> 5213 </div> 5214 5215 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 5216 Excellent Course </div> 5217 </div> 5218 </div> 5219 </div> 5220 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 5221 <div class="tutor-row"> 5222 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 5223 <div class="tutor-mb-12"> 5224 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">KL</span></div></div> </div> 5225 5226 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 5227 <a href="#" class="tutor-color-black"> 5228 Kari Lappalainen </a> 5229 </div> 5230 5231 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted"> 5232 1 year ago </div> 5233 </div> 5234 5235 <div class="tutor-col-lg-9"> 5236 5237 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 5238 <div class="tutor-ratings-stars"> 5239 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span> </div> 5240 </div> 5241 5242 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 5243 Very well structured and fulfilled my expectations. Thanks! </div> 5244 </div> 5245 </div> 5246 </div> 5247 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 5248 <div class="tutor-row"> 5249 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 5250 <div class="tutor-mb-12"> 5251 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">S</span></div></div> </div> 5252 5253 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 5254 <a href="#" class="tutor-color-black"> 5255 sebsronnie </a> 5256 </div> 5257 5258 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted"> 5259 2 years ago </div> 5260 </div> 5261 5262 <div class="tutor-col-lg-9"> 5263 5264 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 5265 <div class="tutor-ratings-stars"> 5266 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span> </div> 5267 </div> 5268 5269 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 5270 Excellent course! The only recommendation I'd make is to include the CQRS/MediatR and Discriminated Unions as part of the course much earlier instead of them being bonus material. </div> 5271 </div> 5272 </div> 5273 </div> 5274 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 5275 <div class="tutor-row"> 5276 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 5277 <div class="tutor-mb-12"> 5278 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">M</span></div></div>
5278 </div> 5279 5280 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 5281 <a href="#" class="tutor-color-black"> 5282 marek.petak </a> 5283 </div> 5284 5285 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted"> 5286 2 years ago </div> 5287 </div> 5288 5289 <div class="tutor-col-lg-9"> 5290 5291 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 5292 <div class="tutor-ratings-stars"> 5293 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span> </div> 5294 </div> 5295 5296 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 5297 I've had every version of this course and loved every line I've read! These guys are fantastic! </div> 5298 </div> 5299 </div> 5300 </div> 5301 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 5302 <div class="tutor-row"> 5303 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 5304 <div class="tutor-mb-12"> 5305 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">KO</span></div></div> </div> 5306 5307 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 5308 <a href="#" class="tutor-color-black"> 5309 Kingsley Omon-Edo </a> 5310 </div> 5311 5312 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted"> 5313 2 years ago </div> 5314 </div> 5315 5316 <div class="tutor-col-lg-9"> 5317 5318 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 5319 <div class="tutor-ratings-stars"> 5320 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span> </div> 5321 </div> 5322 5323 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 5324 I appreciate the effort that went into producing this course.<br /> 5325<br /> 5326The text-based nature of the course made my learning more effective, as I prefer textual materials to videos.<br /> 5327<br /> 5328The instructor was quite knowledgeable and the presentation and delivery of the content were nice.<br /> 5329<br /> 5330I look forward to taking the rest of the courses I purchased from CodeMaze.<br /> 5331<br /> 5332They offer real value for money. </div> 5333 </div> 5334 </div> 5335 </div> 5336 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 5337 <div class="tutor-row"> 5338 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 5339 <div class="tutor-mb-12"> 5340 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">YT</span></div></div> </div> 5341 5342 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 5343 <a href="#" class="tutor-color-black"> 5344 yap tel </a> 5345 </div> 5346 5347 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted"> 5348 2 years ago </div> 5349 </div> 5350 5351 <div class="tutor-col-lg-9"> 5352 5353 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 5354 <div class="tutor-ratings-stars"> 5355 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span> </div> 5356 </div> 5357 5358 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 5359 Very informative and easy to read. Keep up </div> 5360 </div> 5361 </div> 5362 </div> 5363 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 5364 <div class="tutor-row"> 5365 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 5366 <div class="tutor-mb-12"> 5367 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">BV</span></div></div> </div> 5368 5369 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 5370 <a href="#" class="tutor-color-black"> 5371 Brandon Valenzuela </a> 5372 </div> 5373 5374 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted">
5375 2 years ago </div> 5376 </div> 5377 5378 <div class="tutor-col-lg-9"> 5379 5380 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 5381 <div class="tutor-ratings-stars"> 5382 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span> </div> 5383 </div> 5384 5385 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 5386 This book was instrumental in helping me secure a position at a multinational software company. As someone working with enterprise-grade APIs, I found its content to be both comprehensive and approachable. The author has a talent for breaking down complex concepts into clear, digestible explanations, making even advanced topics feel accessible.<br /> 5387<br /> 5388The chapters are well-structured, taking you step-by-step through the intricacies of C# and its application in building robust APIs. Itâs not just a book to readâitâs a resource youâll want to revisit repeatedly. The practical examples and exercises made it easy for me to translate the knowledge into real-world projects, which undoubtedly gave me an edge during interviews and in my day-to-day work.<br /> 5389<br /> 5390If you're serious about advancing your career in software development, this book is a fantastic investment. It's clear, well-organized, and packed with actionable insights that will make you a more confident and capable developer. Highly recommended! </
5390div> 5391 </div> 5392 </div> 5393 </div> 5394 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 5395 <div class="tutor-row"> 5396 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 5397 <div class="tutor-mb-12"> 5398 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">SN</span></div></div> </div> 5399 5400 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 5401 <a href="#" class="tutor-color-black"> 5402 srinivasaraju nadimpalli </a> 5403 </div> 5404 5405 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted"> 5406 2 years ago </div> 5407 </div> 5408 5409 <div class="tutor-col-lg-9"> 5410 5411 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 5412 <div class="tutor-ratings-stars"> 5413 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span> </div> 5414 </div> 5415 5416 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 5417 Best course out there, and the knowledge gained in this course helped me in my professional journey. Thank you all for making good content. </div> 5418 </div> 5419 </div> 5420 </div> 5421 <div class="tutor-review-list-item tutor-card-list-item tutor-p-24 tutor-p-lg-40"> 5422 <div class="tutor-row"> 5423 <div class="tutor-col-lg-3 tutor-mb-16 tutor-mb-lg-0"> 5424 <div class="tutor-mb-12"> 5425 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><span class="tutor-avatar-text">A</span></div></div> </div> 5426 5427 <div class="tutor-reviewer-name tutor-fs-6 tutor-mb-4"> 5428 <a href="#" class="tutor-color-black"> 5429 aries544 </a> 5430 </div> 5431 5432 <div class="tutor-reviewed-on tutor-fs-7 tutor-color-muted"> 5433 2 years ago </div> 5434 </div> 5435 5436 <div class="tutor-col-lg-9"> 5437 5438 <div class="tutor-ratingstutor-is-sm tutor-ratings-"> 5439 <div class="tutor-ratings-stars"> 5440 <span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span><span class="tutor-icon-star-bold"></span> </div> 5441 </div> 5442 5443 <div class="tutor-fs-7 tutor-color-secondary tutor-mt-12 tutor-review-comment"> 5444 Amazing content, thank you so much </div> 5445 </div> 5446 </div> 5447 </div> 5448 </div> 5449 </div> 5450 5451 <div class="tutor-row tutor-mt-40 tutor-mb-20"> 5452 <div class="tutor-col"> 5453 </div> 5454 5455 <div class="tutor-col-auto"> 5456 <nav data-tutor_pagination_ajax="{"action":"tutor_single_course_reviews_load_more","course_id":75594}" data-tutor_pagination_layout="{"type":"load_more","load_more_text":"Load More"}" class="" ><a class="tutor-btn tutor-btn-outline-primary page-numbers tutor-mr-16" href="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/?source=tn&current_page=2">Load More</a></nav> </div> 5457 </div> 5458</div> 5459 5460 5461 </div> 5462 </div> 5463 </div> 5464 </main> 5465 5466 <aside class="tutor-col-xl-4"> 5467 <div class="tutor-single-course-sidebar tutor-mt-40 tutor-mt-xl-0" > 5468 5469 5470<div class="tutor-card tutor-card-md tutor-sidebar-card"> 5471 <div class="tutor-card-body"> 5472 <div> 5473 <div class="tutor-course-sidebar-card-pricing tutor-d-flex tutor-align-end tutor-justify-between"> 5474 <div> 5475 <span class="tutor-fs-4 tutor-fw-bold tutor-color-black"> 5476 <span class="woocommerce-Price-amount amount"><bdi><span class="woocommerce-Price-currencySymbol">$</span>97</bdi></span> </span> 5477 </div> 5478 </div> 5479 <div class="tutor-color-muted"> 5480 </div> 5481 <div class="cmz-ppp-price" data-course-id="75594" hidden></div> </div> 5482 <button 5483 class="tutor-btn tutor-btn-lg tutor-btn-block tutor-mt-24 lemon-squeezy-direct-checkout" 5484 style="background-color:rgb(35,147,113) !important;border-color:rgb(35,147,113) !important;color:#fff !important;" 5485 data-product-id="85312" 5486 data-variant-id="1708453" 5487 data-lemon-product-id="1090559" 5488 data-nonce="8866add4f8" 5489 > 5490 Buy Now </button> 5491 <div class="cmz-paddle-buttons" data-cmz-course-id="75594"> 5492 <a 5493 href="https://courses.code-maze.com/wp-admin/admin-post.php?action=cmz_paddle_buy&
5493courses=75594&_cmz_nonce=6ade3cdfea" 5494 class="tutor-btn tutor-btn-primary tutor-btn-block tutor-mt-12 cmz-paddle-direct-checkout" 5495 data-product-id="85312" 5496 data-course-id="75594" 5497 > 5498 Buy Now<span aria-hidden="true"> →</span> 5499 </a> 5500 5501 <button 5502 type="button" 5503 class="tutor-btn tutor-btn-outline-primary tutor-btn-block tutor-mt-12 cmz-paddle-add-to-cart" 5504 data-course-id="75594" 5505 data-in-cart="0" 5506 > 5507 Add to Cart </button> 5508 </div> 5509 </div> 5510 <!-- Course Info --> 5511 <div class="tutor-card-footer "> 5512 <ul class="tutor-ul"> 5513 <li class="tutor-d-flex "> 5514 <span class="tutor-icon-level tutor-color-black tutor-mt-4 tutor-mr-12" aria-labelledby="Level"></span> 5515 <span class="tutor-fs-6 tutor-color-secondary"> 5516 Intermediate </span> 5517 </li> 5518 <li class="tutor-d-flex tutor-mt-12 "> 5519 <span class="tutor-icon-clock-line tutor-color-black tutor-mt-4 tutor-mr-12" aria-labelledby="Duration"></span> 5520 <span class="tutor-fs-6 tutor-color-secondary"> 5521 <span class="tutor-meta-level">8</span><span class="tutor-meta-value tutor-color-secondary tutor-mr-4"> hours</span><span class="tutor-meta-level">15</span><span class="tutor-meta-value tutor-color-secondary tutor-mr-4"> minutes</span> Duration </span> 5522 </li> 5523 <li class="tutor-d-flex tutor-mt-12 tutor-course-certificate-meta"> 5524 <span class="tutor-icon-ribbon-o tutor-color-black tutor-mt-4 tutor-mr-12" aria-labelledby="Certificate"></span> 5525 <span class="tutor-fs-6 tutor-color-secondary"> 5526 Certificate of completion </span> 5527 </li> 5528 </ul> 5529 </div> 5530</div> 5531 5532<div class="tutor-modal tutor-login-modal" role="dialog" aria-modal="true" aria-labelledby="tutor-login-modal-title" aria-hidden="true"> 5533 <div class="tutor-modal-overlay"></div> 5534 <div class="tutor-modal-window tutor-modal-window-sm"> 5535 <div class="tutor-modal-content tutor-modal-content-white"> 5536 <button class="tutor-iconic-btn tutor-modal-close-o" data-tutor-modal-close aria-label="Close login dialog"> 5537 <span class="tutor-icon-times" aria-hidden="true"></span> 5538 </button> 5539 5540 <div class="tutor-modal-body"> 5541 <div class="tutor-py-48"> 5542 <div id="tutor-login-modal-title" class="tutor-fs-4 tutor-fw-medium tutor-color-black tutor-mb-32"> 5543 Hi, Welcome back! </div> 5544 <form id="tutor-login-form" method="post"> 5545 <input type="hidden" name="tutor_course_enroll_attempt" value="75594"> 5546 <input type="hidden" id="_tutor_nonce" name="_tutor_nonce" value="e50d0d8034" /><input type="hidden" name="_wp_http_referer" value="/courses/ultimate-aspnet-core-webapi/?source=tn" /> <input type="hidden" name="tutor_action" value="tutor_user_login" /> 5547 <input type="hidden" name="redirect_to" value="https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/?source=tn" /> 5548 5549 <div class="tutor-mb-20"> 5550 <input type="text" class="tutor-form-control" placeholder="Username or Email Address" name="log" value="" size="20" required/> 5551 </div> 5552 5553 <div class="tutor-mb-32"> 5554 <input type="password" class="tutor-form-control" placeholder="Password" name="pwd" value="" size="20" required/> 5555 </div> 5556 5557 <div class="tutor-login-error"></div> 5558 <input type="hidden" name="timezone" value="Europe/Belgrade" /> 5559
5559<script> 5560 document.addEventListener('DOMContentLoaded', function() { 5561 const timezone = document.querySelector('input[name="timezone"]'); 5562 if ( timezone) { 5563 const tz = Intl.DateTimeFormat().resolvedOptions().timeZone; 5564 timezone.value = tz 5565 } 5566 }); 5567 </script>
5567 5568 <div class="cf-turnstile-wrap" style="padding:10px 0 10px 0"><div class="cf-turnstile" data-sitekey="0x4AAAAAAEbjyVunDO1OOICn" data-theme="light"></div></div> <div class="tutor-d-flex tutor-justify-between tutor-align-center tutor-mb-40"> 5569 <div class="tutor-form-check"> 5570 <input id="tutor-login-agmnt-1" type="checkbox" class="tutor-form-check-input tutor-bg-black-40" name="rememberme" value="forever" /> 5571 <label for="tutor-login-agmnt-1" class="tutor-fs-7 tutor-color-muted"> 5572 Keep me signed in </label> 5573 </div> 5574 <a href="https://courses.code-maze.com/dashboard/retrieve-password" class="tutor-btn tutor-btn-ghost"> 5575 Forgot Password? </a> 5576 </div> 5577 5578 <button type="submit" class="tutor-btn tutor-btn-primary tutor-btn-block"> 5579 Sign In </button> 5580 5581 <div class="tutor-d-flex tutor-align-center tutor-justify-center tutor-fs-6 tutor-color-secondary tutor-mt-20"> 5582 Don't have an account? 5583 <a href="https://courses.code-maze.com/student-registration/?redirect_to=https://courses.code-maze.com/courses/ultimate-aspnet-core-webapi/?source=tn&enrol_course_id=75594" class="tutor-btn tutor-btn-link"> 5584 Register Now </a> 5585 </div> 5586 </form>
5587<script> 5588 document.addEventListener('DOMContentLoaded', function() { 5589 var { __ } = wp.i18n; 5590 var loginModal = document.querySelector('.tutor-modal.tutor-login-modal'); 5591 var errors = []; 5592 if (loginModal && errors.length) { 5593 loginModal.classList.add('tutor-is-active'); 5594 } 5595 }); 5596</script>
5596 5597 5598 </div> 5599 </div> 5600 </div> 5601 </div> 5602</div> 5603 5604 <div class="tutor-single-course-sidebar-more tutor-mt-24"> 5605 <div class="tutor-course-details-instructors"> 5606 <h3 class="tutor-fs-6 tutor-fw-medium tutor-color-black tutor-mb-16"> 5607 A course by </h3> 5608 5609 <div class="tutor-d-flex tutor-align-center tutor-mb-24"> 5610 <div class="tutor-d-flex tutor-mr-16"> 5611 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><img src="https://courses.code-maze.com/wp-content/uploads/2026/01/marinko-profile-150x150.webp" alt="Marinko Spasojevic" /> </div></div> </div> 5612 5613 <div> 5614 <a class="tutor-fs-6 tutor-fw-bold tutor-color-black" href="https://courses.code-maze.com/profile/marinko?view=instructor"> 5615 Marinko Spasojevic </a> 5616 5617 <div class="tutor-instructor-designation tutor-fs-7 tutor-color-muted"> 5618 Instructor </div> 5619 </div> 5620 </div> 5621 <div class="tutor-d-flex tutor-align-center"> 5622 <div class="tutor-d-flex tutor-mr-16"> 5623 <div class="tutor-avatar tutor-avatar-md"><div class="tutor-ratio tutor-ratio-1x1"><img src="https://courses.code-maze.com/wp-content/uploads/2026/01/vladimir-pecanac-profile-150x150.webp" alt="Vladimir Pecanac" /> </div></div> </div> 5624 5625 <div> 5626 <a class="tutor-fs-6 tutor-fw-bold tutor-color-black" href="https://courses.code-maze.com/profile/codemaze_blog?view=instructor"> 5627 Vladimir Pecanac </a> 5628 5629 <div class="tutor-instructor-designation tutor-fs-7 tutor-color-muted"> 5630 Instructor </div> 5631 </div> 5632 </div> 5633 </div> 5634 <div class="tutor-course-details-widget"> 5635 <h3 class="tutor-course-details-widget-title tutor-fs-5 tutor-color-black tutor-fw-bold tutor-mb-16"> 5636 Material Includes </h3> 5637 <ul class="tutor-course-details-widget-list tutor-fs-6 tutor-color-black"> 5638 <li class="tutor-d-flex tutor-mb-12"> 5639 <span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span> 5640 <span>Online Text Courses Included: 3</span> 5641 </li> 5642 <li class="tutor-d-flex tutor-mb-12"> 5643 <span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span> 5644 <span>Bonus Files</span> 5645 </li> 5646 <li class="tutor-d-flex tutor-mb-12"> 5647 <span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span> 5648 <span>Full source code</span> 5649 </li> 5650 <li class="tutor-d-flex tutor-mb-12"> 5651 <span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span> 5652 <span>30-day Money Back guarantee</span> 5653 </li> 5654 <li class="tutor-d-flex tutor-mb-12"> 5655 <span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span> 5656 <span>Lifetime Access</span> 5657 </li> 5658 <li class="tutor-d-flex tutor-mb-12"> 5659 <span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span> 5660 <span>Direct Support from the Instructor(s)</span> 5661 </li> 5662 <li class="tutor-d-flex tutor-mb-12"> 5663 <span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span> 5664 <span>Course Updates for Free</span> 5665 </li> 5666 <li class="tutor-d-flex tutor-mb-12"> 5667 <span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span> 5668 <span>Discord Community</span> 5669 </li> 5670 <li class="tutor-d-flex tutor-mb-12"> 5671 <span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span> 5672 <span>Framework Version: .NET 10 (.NET 9 source also included)</span> 5673 </li> 5674 </ul> 5675 </div> 5676 5677 <div class="tutor-course-details-widget"> 5678 <h3 class="tutor-course-details-widget-title tutor-fs-5 tutor-color-black tutor-fw-bold tutor-mb-16"> 5679 Requirements </h3> 5680 <ul class="tutor-course-details-widget-list tutor-fs-6 tutor-color-black"> 5681 <li class="tutor-d-flex tutor-mb-12"><span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span><span>
5681Intermediate knowledge of C# and .NET</span></li><li class="tutor-d-flex tutor-mb-12"><span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span><span>Basic web development knowledge</span></li><li class="tutor-d-flex tutor-mb-12"><span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span><span>Basic REST knowledge</span></li> </ul> 5682 </div> 5683 5684 5685 5686 <div class="tutor-course-details-widget"> 5687 <h3 class="tutor-course-details-widget-title tutor-fs-5 tutor-color-black tutor-fw-bold tutor-mb-16"> 5688 Audience </h3> 5689 <ul class="tutor-course-details-widget-list tutor-fs-6 tutor-color-black"> 5690 <li class="tutor-d-flex tutor-mb-12"> 5691 <span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span> 5692 <span>Intermediate to Advanced .NET/C# Developers</span> 5693 </li> 5694 <li class="tutor-d-flex tutor-mb-12"> 5695 <span class="tutor-icon-bullet-point tutor-color-muted tutor-mt-2 tutor-mr-8 tutor-fs-8" aria-hidden="true"></span> 5696 <span>Web Developers</span> 5697 </li> 5698 </ul> 5699 </div> 5700 5701 </div> 5702 5703 </div> 5704 </aside> 5705 </div> 5706 </div> 5707</div> 5708 5709 5710 5711 <footer id="footer" class="footer_columns_3"> 5712 <div class="container"> 5713 <div class="et_pb_extra_row container-width-change-notify"> 5714 <div class="et_pb_extra_column odd column-1"> 5715 <div id="custom_html-7" class="widget_text et_pb_widget widget_custom_html"><h4 class="widgettitle">Administrative</h4><div class="textwidget custom-html-widget"><ul> 5716 5717<li class="page_item page-item-1113"><a href="https://courses.code-maze.com/disclosure-policy/">Disclosure Policy</a></li> 5718<li class="page_item page-item-1102"><a href="https://courses.code-maze.com/privacy-policy/">Privacy Policy</a></li> 5719<li class="page_item page-item-1118"><a href="https://courses.code-maze.com/terms-of-service/">Terms of Service</a></li> 5720<li class="page_item page-item-1118"><a href="https://courses.code-maze.com/refund-policy/">Refund Policy</a></li> 5721 </ul></div></div> <!-- end .et_pb_widget --> </div> 5722 </div> 5723</div> 5724 <div id="footer-bottom"> 5725 <div class="container"> 5726 5727 <!-- Footer Info --> 5728 <p id="footer-info">© Copyright code-maze.com 2016 - 2026</p> 5729 5730 <!-- Footer Navigation --> 5731 5732 </div> 5733 </div> 5734 </footer> 5735 </div> <!-- #page-container -->
5736<script> 5737document.addEventListener("DOMContentLoaded", () => { 5738 const active = document.querySelector(".tutor-course-topic-item.is-active"); 5739 5740 if (!active) return; 5741 5742 active.scrollIntoView({ 5743 behavior: "auto", // use "smooth" if you want animation 5744 block: "center" // start | center | end | nearest 5745 }); 5746}); 5747</script>
5747 5748 5749 5750 <span title="Back To Top" id="back_to_top"></span> 5751 5752
5752<script>(function(){try{ 5753 var dark=document.documentElement.getAttribute("data-theme")==="dark"; 5754 if(!document.querySelector(".cmz-dm-toggle")){dark=dark||(function(){try{return localStorage.getItem("cmz-theme")==="dark"}catch(e){return false}})()} 5755 var t=dark?"dark":"light"; 5756 document.querySelectorAll(".cf-turnstile").forEach(function(el){el.setAttribute("data-theme",t)}); 5757 setInterval(function(){ 5758 document.querySelectorAll(".cf-turnstile-wrap").forEach(function(w){ 5759 var i=w.querySelector("input[name=cf-turnstile-response]"); 5760 var ok=!!(i&&i.value); 5761 if(ok&&!w.cmzTimer&&!w.classList.contains("cmz-ts-done")){ 5762 w.cmzTimer=setTimeout(function(){w.classList.add("cmz-ts-done");w.cmzTimer=null},3000); 5763 } 5764 if(!ok){if(w.cmzTimer){clearTimeout(w.cmzTimer);w.cmzTimer=null}w.classList.remove("cmz-ts-done")} 5765 }); 5766 },400); 5767 }catch(e){}})();</script>
5767<script type="speculationrules"> 5768{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/Extra/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 5769</script>
5769 5770
5770<script type='text/javascript'> 5771 (function () { 5772 var c = document.body.className; 5773 c = c.replace(/woocommerce-no-js/, 'woocommerce-js'); 5774 document.body.className = c; 5775 })(); 5776 </script>
5776 5777
5777<script id="cmz-buy-js-extra"> 5778var cmzBuy = {"isLoggedIn":"","registerUrl":"https://courses.code-maze.com/my-account/","cookieName":"cmz_pending_buy","autobuyParam":"cmz_autobuy"}; 5779//# sourceURL=cmz-buy-js-extra 5780</script>
vendor: 1 bytes, line 5780
5780
5781<script id="cmz-buy-js-after"> 5782(function () { 5783 var cfg = window.cmzBuy || {}; 5784 var SEL = '.lemon-squeezy-direct-checkout, .cmz-paddle-direct-checkout'; 5785 5786 function setCookie(name, value) { 5787 document.cookie = name + '=' + encodeURIComponent(value) + 5788 '; path=/; max-age=3600; samesite=lax'; 5789 } 5790 function readCookie(name) { 5791 var m = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)'); 5792 return m ? decodeURIComponent(m.pop()) : ''; 5793 } 5794 function clearCookie(name) { 5795 document.cookie = name + '=; path=/; max-age=0; samesite=lax'; 5796 } 5797 5798 // ---- Job 1: intercept guest clicks in the CAPTURE phase (runs before the plugin's 5799 // delegated jQuery handler on document, so we can cleanly take over). ---- 5800 document.addEventListener('click', function (e) { 5801 if (cfg.isLoggedIn) { return; } // logged-in users use the normal path 5802 var btn = e.target && e.target.closest ? e.target.closest(SEL) : null; 5803 if (!btn) { return; } 5804 5805 var productId = btn.getAttribute('data-child-product-id') || btn.getAttribute('data-product-id'); 5806 var variantId = btn.getAttribute('data-variant-id'); 5807 5808 // Variable products: no variant chosen yet -> let the plugin show its own "please select" alert. 5809 if (!variantId && (btn.classList.contains('lemon-squeezy-variable-direct') || 5810 btn.classList.contains('lemon-squeezy-variable-checkout'))) { 5811 return; 5812 } 5813 if (!productId) { return; } 5814 5815 e.preventDefault(); 5816 e.stopImmediatePropagation(); // stop the plugin's handler from firing 5817 5818 setCookie(cfg.cookieName, JSON.stringify({ 5819 product_id: productId, 5820 variant_id: variantId || '', 5821 variation_id: btn.getAttribute('data-variation-id') || '' 5822 })); 5823 5824 window.location.href = cfg.registerUrl; 5825 }, true); 5826 5827 // ---- Job 2: resume after registration/login. ---- 5828 function resume() { 5829 var url = new URL(window.location.href); 5830 if (url.searchParams.get(cfg.autobuyParam) !== '1') { return; } 5831 5832 var raw = readCookie(cfg.cookieName); 5833 clearCookie(cfg.cookieName); // one-shot; JS owns clearing now 5834 5835 // Clean the flag out of the address bar regardless of what happens next. 5836 url.searchParams.delete(cfg.autobuyParam); 5837 window.history.replaceState({}, document.title, url.toString()); 5838 5839 if (!raw) { return; } 5840 var intent; 5841 try { intent = JSON.parse(raw); } catch (err) { return; } 5842 if (!intent || !intent.product_id) { return; } 5843 5844 /* 5845 * 1.5.1 â pick the button the USER can see, for THIS product. Two bugs lived here: 5846 * (a) `SEL + '[data-product-id=â¦]'` with a comma-list SEL binds the attribute to the 5847 * LAST selector only, so `.lemon-squeezy-direct-checkout` matched UNFILTERED â on 5848 * a Paddle-released course page (which still carries the LS button, hidden by 5849 * cmz-paddle-cart.php's :has() rule, and drawn first) the resume clicked the hidden 5850 * Lemon Squeezy button and the buyer got "Lemon Squeezy gateway not configured" 5851 * (founder, staging, 2026-08-17 â same on password AND Google login); 5852 * (b) the bare `querySelector(SEL)` fallback took whichever button came first in DOM 5853 * order, again the hidden LS one. 5854 * Fix: build one selector per branch with the attribute attached to EACH, and prefer a 5855 * visible match â offsetParent is null for display:none, which is exactly how the 5856 * inactive gateway's button is hidden. 5857 */ 5858 function firstVisible(nodes) { 5859 var i, fallback = null; 5860 for (i = 0; i < nodes.length; i++) { 5861 if (nodes[i].offsetParent !== null) { return nodes[i]; } 5862 if (!fallback) { fallback = nodes[i]; } 5863 } 5864 return fallback; 5865 } 5866 function withAttr(attr, value) { 5867 return SEL.split(',').map(function (s) { 5868 return s.trim() + '[' + attr + '="' + value + '"]'; 5869 }).join(', '); 5870 } 5871 var btn = firstVisible(document.querySelectorAll(withAttr('data-product-id', intent.product_id))) || 5872 firstVisible(document.querySelectorAll(withAttr('data-child-product-id', intent.product_id))) || 5873 firstVisible(document.querySelectorAll(SEL)); 5874 if (!btn) { return; } 5875 5876 // Restore variant on variable buttons if it isn't already set. 5877 if (intent.variant_id && !btn.getAttribute('data-variant-id')) { 5878 btn.setAttribute('data-variant-id', intent.variant_id); 5879 } 5880 if (intent.variation_id && !btn.getAttribute('data-variation-id')) { 5881 btn.setAttribute('data-variation-id', intent.variation_id); 5882 } 5883 5884 // Native click -> bubbles to the plugin's delegated handler -> its logged-in AJAX -> LS. 5885 setTimeout(function () { btn.click(); }, 300); 5886 } 5887 5888 // Run whether the script loaded before or after the DOM was ready. 5889 if (document.readyState === 'loading') { 5890 document.addEventListener('DOMContentLoaded', resume); 5891 } else { 5892 resume(); 5893 } 5894})(); 5895//# sourceURL=cmz-buy-js-after 5896</script>
vendor: 1 bytes, line 5896
5896
5897<script id="cmz-paddle-cart-js-extra"> 5898var cmzPaddleCart = {"ajaxUrl":"https://courses.code-maze.com/wp-admin/admin-ajax.php","nonce":"7728a02a2b","cartUrl":"https://courses.code-maze.com/paddle-cart/","pricesUrl":"https://courses.code-maze.com/wp-json/cmz-paddle/v1/prices","restNonce":"273543b543"}; 5899//# sourceURL=cmz-paddle-cart-js-extra 5900</script>
vendor: 1 bytes, line 5900
5900
5901<script id="cmz-paddle-cart-js-after"> 5902(function () { 5903 var cfg = window.cmzPaddleCart || {}; 5904 5905 function post(action, data) { 5906 var body = new URLSearchParams(Object.assign({ action: action, nonce: cfg.nonce }, data)); 5907 return fetch(cfg.ajaxUrl, { 5908 method: 'POST', 5909 credentials: 'same-origin', 5910 headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, 5911 body: body.toString() 5912 }).then(function (r) { return r.json(); }); 5913 } 5914 5915 // Every cart control exists TWICE â Extra renders the primary menu into both #et-menu and 5916 // #et-extra-mobile-menu. Nothing here may use getElementById or a bare querySelector, or it 5917 // silently drives the desktop copy while the user is tapping the mobile one. Helpers: 5918 function cartItems() { return document.querySelectorAll('.cmz-paddle-cart-item'); } 5919 function itemOf(el) { return el && el.closest ? el.closest('.cmz-paddle-cart-item') : null; } 5920 function partOf(item, cls) { return item ? item.querySelector('.' + cls) : null; } 5921 5922 /* 5923 * Vertical alignment of the chip against the nav's own text â see the long note beside 5924 * --cmz-nav-reserve in the stylesheet. Extra reserves empty space UNDER each nav link as 5925 * padding-bottom on the anchor, so sibling ink sits in the top band of the row and naive 5926 * centring lands exactly reserve/2 too low. The reserve differs per breakpoint, per header 5927 * style and per scroll state, and two of its five values come from customizer output, so it 5928 * is measured off a real sibling anchor here rather than trusted to a constant. The CSS 5929 * default is the no-JS floor; this makes it exact in variants that do not exist yet. 5930 */
5931 function syncNavReserve() { 5932 document.querySelectorAll('#et-navigation > #et-menu > .cmz-paddle-cart-item').forEach(function (item) { 5933 var sib = item.parentElement.querySelector('li.menu-item:not(.cmz-paddle-cart-item) > a'); 5934 if (!sib) { return; } 5935 var reserve = parseFloat(window.getComputedStyle(sib).paddingBottom); 5936 if (!isFinite(reserve) || reserve < 0 || reserve > 200) { return; } 5937 var next = reserve + 'px'; 5938 // Only touch the DOM when it actually changed â this runs on scroll. 5939 if (item.style.getPropertyValue('--cmz-nav-reserve') !== next) { 5940 item.style.setProperty('--cmz-nav-reserve', next); 5941 } 5942 }); 5943 } 5944 var reserveQueued = false; 5945 function queueNavReserve() { 5946 if (reserveQueued) { return; } 5947 reserveQueued = true; 5948 window.requestAnimationFrame(function () { reserveQueued = false; syncNavReserve(); }); 5949 } 5950 syncNavReserve(); 5951 window.addEventListener('resize', queueNavReserve); 5952 // Extra's fixed-header mode swaps the reserve mid-scroll (36 â 44 here). Cheap to keep exact. 5953 window.addEventListener('scroll', queueNavReserve, { passive: true }); 5954 /* 5955 * ...and Extra TRANSITIONS that padding rather than snapping it, which a single sample on 5956 * the scroll event catches mid-flight: simulating .et-fixed-header measured the sibling at 5957 * 43.8px while this had already stored 36px, and nothing re-read it afterwards, leaving the 5958 * inline value stale â worse than the CSS default it overrides. transitionend is the exact 5959 * signal for "the theme has finished moving", so the last word always belongs to the 5960 * settled value. Filtered to padding so unrelated nav transitions cost nothing. 5961 * (This site runs et_non_fixed_nav, so the fixed variant is currently unreachable â it is 5962 * handled because the header mode is a theme option the founder can flip, and the whole 5963 * point of this round was to stop fixing one variant at a time.) 5964 */ 5965 var nav = document.getElementById('et-navigation'); 5966 if (nav) { 5967 nav.addEventListener('transitionend', function (e) { 5968 if (e.propertyName && e.propertyName.indexOf('padding') === 0) { queueNavReserve(); } 5969 }, true); 5970 } 5971 5972 // Badge is server-rendered at 0/hidden for every visitor alike (cache-safe-theming 5973 // playbook) â this is the client-side fill-in, the only place the count is ever decided. 5974 // Updates BOTH copies; the previous single querySelector only ever found the desktop one. 5975 function updateBadge(count) { 5976 document.querySelectorAll('.cmz-paddle-cart-badge').forEach(function (badge) { 5977 if (count > 0) { 5978 badge.textContent = String(count); 5979 badge.hidden = false; 5980 } else { 5981 badge.hidden = true; 5982 } 5983 }); 5984 } 5985 5986 /* 5987 * The Add to Cart in-cart state (founder round 4) â the SAME rule as the badge: never 5988 * server-rendered, derived here from whatever cmz_paddle_cart_state's fetch says is 5989 * actually in the cart right now. Single source of truth for every button on the page, so 5990 * an add from one button, a remove from the mini-cart dropdown, or landing on a course 5991 * that's already in the cart all converge on the same code path instead of three separate 5992 * ad-hoc DOM pokes drifting out of sync with each other. 5993 */ 5994 // The archive-card button is the same class and the same delegated handlers as the 5995 // course-page one â that is what makes the two agree in both directions â but it is an icon, 5996 // so its label must not be written over with text. 5997 function isIconButton(btn) { return btn.classList.contains('cmz-paddle-loop-add'); } 5998 5999 function syncAddToCartButtons(items) { 6000 var inCartIds = {}; 6001 (items || []).forEach(function (id) { inCartIds[String(id)] = true; }); 6002 document.querySelectorAll('.cmz-paddle-add-to-cart[data-course-id]').forEach(function (btn) { 6003 var courseId = btn.getAttribute('data-course-id'); 6004 var inCart = !!inCartIds[courseId]; 6005 btn.disabled = inCart; 6006 btn.setAttribute('data-in-cart', inCart ? '1' : '0'); 6007 btn.removeAttribute('aria-busy'); 6008 if (isIconButton(btn)) { 6009 // CSS swaps the glyph off data-in-cart; only the accessible name changes here, 6010 // so a screen reader is told the state the sighted user can see. 6011 var iconLabel = inCart ? 'In cart' : 'Add to cart'; 6012 btn.setAttribute('aria-label', iconLabel); 6013 btn.setAttribute('title', iconLabel); 6014 } else { 6015 btn.textContent = inCart ? 'In Cart â' : 'Add to Cart'; 6016 } 6017 }); 6018 } 6019 6020 document.addEventListener('click', function (e) { 6021 var btn = e.target && e.target.closest ? e.target.closest('.cmz-paddle-add-to-cart') : null; 6022 if (!btn || btn.disabled) { return; } 6023 e.preventDefault(); 6024 6025 var courseId = btn.getAttribute('data-course-id'); 6026 var icon = isIconButton(btn); 6027 btn.disabled = true; 6028 // An icon button has no text to replace â writing 'â¦' into it would delete its glyphs. 6029 var original = icon ? null : btn.textContent; 6030 if (icon) { btn.setAttribute('aria-busy', 'true'); } else { btn.textContent = 'â¦'; }
6031 function restore() { 6032 btn.disabled = false; 6033 if (icon) { btn.removeAttribute('aria-busy'); } else { btn.textContent = original; } 6034 } 6035 6036 post('cmz_paddle_cart_add', { course_id: courseId }).then(function (res) { 6037 var ok = res && res.success; 6038 var payload = res && res.data ? res.data : {}; 6039 if (ok) { 6040 // refreshCart() re-derives every button's state (including this one) from the 6041 // server's fresh item list â no manual textContent/attribute poke here, so 6042 // there is exactly one place that ever decides "in cart" or not. This is also 6043 // what keeps an archive card and the course page it links to in agreement. 6044 refreshCart(); 6045 } else { 6046 restore(); 6047 if (payload.message) { window.alert(payload.message); } 6048 } 6049 }).catch(restore); 6050 }); 6051 6052 // The cart page (/paddle-cart/) is now an unlinked fallback, but it still works if someone 6053 // lands on it directly â its remove buttons still need this. 6054 document.addEventListener('click', function (e) { 6055 var btn = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-remove') : null; 6056 if (!btn) { return; } 6057 e.preventDefault(); 6058 var courseId = btn.getAttribute('data-course-id'); 6059 var row = btn.closest('.cmz-paddle-cart-row'); 6060 btn.disabled = true; 6061 post('cmz_paddle_cart_remove', { course_id: courseId }).then(function (res) { 6062 var payload = res && res.data ? res.data : {}; 6063 updateBadge(payload.count || 0); 6064 if (row && row.parentNode) { row.parentNode.removeChild(row); } 6065 window.location.reload(); // simplest correct way to refresh the subtotal + empty state 6066 }); 6067 }); 6068 6069 // The cart icon: one click, straight to checkout. The decision (login / empty / checkout) 6070 // is entirely the server's (cmz_paddle_ajax_cart_checkout) â this only navigates. 6071 function goToCheckout() { 6072 var icons = document.querySelectorAll('.cmz-paddle-cart-link'); 6073 icons.forEach(function (i) { i.setAttribute('aria-busy', 'true'); });
6074 post('cmz_paddle_cart_checkout', {}).then(function (res) { 6075 var payload = res && res.data ? res.data : {}; 6076 if (payload.url) { window.location.href = payload.url; return; } 6077 icons.forEach(function (i) { i.removeAttribute('aria-busy'); }); 6078 }).catch(function () { 6079 icons.forEach(function (i) { i.removeAttribute('aria-busy'); }); 6080 }); 6081 } 6082 6083 document.addEventListener('click', function (e) { 6084 var icon = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-link') : null; 6085 if (!icon) { return; } 6086 e.preventDefault(); 6087 var item = itemOf(icon); 6088 // Touch: the tap is the only way into the panel, so it opens it (see the constant). 6089 if (MOBILE_TAP_OPENS_PANEL && !canHover()) { 6090 e.stopPropagation(); 6091 /* 6092 * THE SAME TAP MUST NOT OPEN AND THEN CLOSE. On a real phone (not Playwright's 6093 * emulation, which is how this survived the Phase 4 touch pass) the tap fires 6094 * focus BEFORE click, the focusin handler below opens the panel, and this toggle 6095 * then found it "already open" and shut it â the popup never visibly appeared 6096 * (founder, release night 2026-08-07, inside the burger menu). A panel opened by 6097 * any path within the last 600ms is this same gesture: leave it open. 6098 */ 6099 var openedAt = item ? Number(item.getAttribute('data-cmz-opened-at') || 0) : 0; 6100 if (isOpen(item) && (Date.now() - openedAt) > 600) { 6101 setDropdown(item, false); 6102 } else { 6103 openOnly(item); 6104 } 6105 return; 6106 } 6107 // Hover devices: a hover-opened panel must never swallow this - click still checks out. 6108 goToCheckout(); 6109 }, true); // capture â see the CAPTURE, NOT BUBBLE note below; on touch this never bubbles. 6110 6111 /* ----------------------------------------------------------------------- 6112 * Mini-cart dropdown (decisions.md 2026-08-05, "Cart management lives in a mini-cart 6113 * dropdown; overlay removal was a myth"). Contents are NEVER server-rendered â this 6114 * function is the only place that ever builds the row markup, from a client-side fetch, 6115 * same principle as the badge. Escaped by hand (textContent / createElement, no innerHTML 6116 * with server strings) since course titles are user-adjacent content. 6117 * -------------------------------------------------------------------- */ 6118 6119 function escText(el, text) { el.textContent = text == null ? '' : String(text); return el; } 6120 6121 // Drawn glyph, not a text "Ã": a character inherits font-family, size and text-transform 6122 // from whatever wins the cascade â which is how the old one ended up mis-sized and 6123 // off-centre â while an SVG stroke is immune to font rules and centres exactly. 6124 var SVG_NS = 'http://www.w3.org/2000/svg'; 6125 6126 /** 6127 * One builder for both panel glyphs, so the à and the trash can cannot drift apart: same 6128 * viewBox, same currentColor stroke, same round caps and joins. Inline SVG rather than an 6129 * icon font â nothing to load, nothing to FOUT, and immune to the font-family rules that 6130 * were mangling the old text "Ã" in the first place. 6131 */ 6132 function strokeGlyph(size, d, width) { 6133 var svg = document.createElementNS(SVG_NS, 'svg'); 6134 svg.setAttribute('viewBox', '0 0 24 24'); 6135 svg.setAttribute('width', String(size)); 6136 svg.setAttribute('height', String(size)); 6137 svg.setAttribute('aria-hidden', 'true'); 6138 svg.setAttribute('focusable', 'false'); 6139 var p = document.createElementNS(SVG_NS, 'path'); 6140 p.setAttribute('fill', 'none'); 6141 p.setAttribute('stroke', 'currentColor'); 6142 p.setAttribute('stroke-width', String(width || 2)); 6143 p.setAttribute('stroke-linecap', 'round'); 6144 p.setAttribute('stroke-linejoin', 'round'); 6145 p.setAttribute('d', d); 6146 svg.appendChild(p); 6147 return svg; 6148 } 6149 6150 function removeGlyph() { 6151 return strokeGlyph(15, 'M6 6l12 12M18 6L6 18', 2); 6152 } 6153 6154 // Trash can: lid line, handle, tapered body, two tines. Drawn at 1.8 rather than the Ã's 2 6155 // because it carries far more stroke in the same box â at 2 the shape closes up and reads as 6156 // a blob at 16px. Optically the two now match. 6157 function trashGlyph() { 6158 return strokeGlyph(16, 'M4 7h16M10 4h4M6.5 7l.8 12.1a1.4 1.4 0 0 0 1.4 1.3h6.6a1.4 1.4 0 0 0 1.4-1.3L17.5 7M10.2 10.7v6M13.8 10.7v6', 1.8); 6159 } 6160 6161 /* 6162 * Builds the panel for ONE .cmz-paddle-cart-dropdown. Called for every copy in the document 6163 * (desktop + mobile clone), which is the fix for the mini-cart being inert on touch. 6164 * 6165 * Still hand-escaped throughout (createElement + textContent, never innerHTML with a server 6166 * string) â course titles are user-adjacent content and this markup is built client-side. 6167 * 6168 * No per-line PRICE, deliberately. decisions.md ("The cart is a store, not a page") settles 6169 * that Paddle's checkout is where the buyer sees real money, because PPP and promo pricing 6170 * are resolved server-side at transaction creation; the only number available client-side 6171 * is the WooCommerce list price, which is NOT what most buyers are charged. The fallback 6172 * cart page already had to label its subtotal "an estimate" for exactly this reason. A 6173 * mini-cart quoting a price the buyer will not pay is the display-side version of the 6174 * 215-wrong-orders mistake, so the panel shows what it can state truthfully â what is in 6175 * the cart â and sends them to the checkout for the total. 6176 */ 6177 6178 /* ================================================================================= 6179 * VIEWER PRICES â GET /cmz-paddle/v1/prices (gateway 1.14.0) 6180 * 6181 * ONE cache feeds both surfaces: the archive cards and the mini-cart. Fetched per set of 6182 * ids not yet known, so opening the popup after the archive has loaded costs nothing. 6183 * 6184 * WE RENDER `formatted`, NEVER THE MINOR UNITS. The gateway formats in the buyer's currency 6185 * and that is the figure we show â the same no-arithmetic rule the switch confirm follows. 6186 *
6187 * THE ONE EXCEPTION, AND WHY IT IS SAFE: the subtotal. The contract carries no subtotal and 6188 * the founder needs one ("so that the customers know they've reached their budget"), so the 6189 * per-line `price` values â integers, already discounted by Paddle, all in one currency â 6190 * are ADDED. Integer addition of same-currency minor units is exact: no rounding, no 6191 * percentage, no conversion, nothing derived. Formatting uses the currency's own decimal 6192 * places via Intl, so zero-decimal currencies stay right. 6193 * ============================================================================== */ 6194 var priceCache = {}; // course_id -> row from the endpoint 6195 var priceMeta = null; // { currency_code, estimate, discount } 6196 6197 function pricesFetch(ids) { 6198 var want = ids.filter(function (id) { return !(id in priceCache); }); 6199 if (!want.length) { return Promise.resolve(); } 6200 if (!cfg.pricesUrl) { return Promise.resolve(); } 6201 return fetch(cfg.pricesUrl + '?courses=' + encodeURIComponent(want.join(',')), { 6202 credentials: 'same-origin', 6203 headers: { 'Accept': 'application/json', 'X-WP-Nonce': cfg.restNonce } 6204 }) 6205 .then(function (r) { return r.ok ? r.json() : null; }) 6206 .then(function (d) { 6207 if (!d || !d.courses) { return; } 6208 priceMeta = { currency_code: d.currency_code, estimate: !!d.estimate, discount: d.discount || null }; 6209 d.courses.forEach(function (c) { priceCache[String(c.course_id)] = c; }); 6210 }) 6211 .catch(function () { /* no prices is a missing line, never a broken page */ }); 6212 } 6213 6214 function money(minor, currency) { 6215 var n = Number(minor); 6216 if (!isFinite(n)) { return ''; } 6217 var cur = currency || 'USD', digits = 2; 6218 try { digits = new Intl.NumberFormat('en', { style: 'currency', currency: cur }).resolvedOptions().maximumFractionDigits; } catch (e) {} 6219 try { return new Intl.NumberFormat(undefined, { style: 'currency', currency: cur }).format(n / Math.pow(10, digits)); } 6220 catch (e) { return cur + ' ' + (n / Math.pow(10, digits)).toFixed(digits); } 6221 } 6222 6223 /* Archive cards. An unsellable course gets no price AND no add-to-cart, so the card never 6224 offers something the checkout would refuse. */ 6225 function paintLoopPrices() { 6226 var slots = document.querySelectorAll('.cmz-paddle-loop-price[data-course-id]'); 6227 if (!slots.length) { return; } 6228 var ids = Array.prototype.map.call(slots, function (el) { return el.getAttribute('data-course-id'); }); 6229 pricesFetch(ids).then(function () { 6230 slots.forEach(function (el) { 6231 var row = priceCache[el.getAttribute('data-course-id')]; 6232 if (!row) { return; } 6233 if (!row.sellable) { 6234 el.hidden = true; 6235 var btn = document.querySelector('.cmz-paddle-loop-add[data-course-id="' + el.getAttribute('data-course-id') + '"]'); 6236 if (btn) { btn.hidden = true; } 6237 return; 6238 } 6239 el.textContent = ''; 6240 var f = row.formatted || {}; 6241 if (row.discount && f.list) { 6242 var was = document.createElement('span'); 6243 was.className = 'cmz-paddle-price-was'; 6244 escText(was, f.list); 6245 el.appendChild(was); 6246 } 6247 var now = document.createElement('span'); 6248 now.className = 'cmz-paddle-price-now'; 6249 escText(now, f.price || f.list || ''); 6250 el.appendChild(now); 6251 el.hidden = false; 6252 }); 6253 }); 6254 } 6255 6256 function renderOneDropdown(dd, lines) { 6257 dd.textContent = ''; 6258 6259 if (!lines || !lines.length) { 6260 var empty = document.createElement('div'); 6261 empty.className = 'cmz-paddle-cart-dropdown-empty'; 6262 escText(empty, 'Your cart is empty.'); 6263 dd.appendChild(empty); 6264 return; 6265 } 6266 6267 var head = document.createElement('div'); 6268 head.className = 'cmz-paddle-mc-head'; 6269 var headLabel = document.createElement('span'); 6270 escText(headLabel, 'Your cart'); 6271 head.appendChild(headLabel); 6272 var headCount = document.createElement('span'); 6273 headCount.className = 'cmz-paddle-mc-count'; 6274 escText(headCount, lines.length === 1 ? '1 course' : lines.length + ' courses'); 6275 head.appendChild(headCount); 6276 dd.appendChild(head); 6277 6278 var list = document.createElement('div'); 6279 list.className = 'cmz-paddle-mc-list'; 6280 6281 lines.forEach(function (line) { 6282 var row = document.createElement('div'); 6283 row.className = 'cmz-paddle-cart-dropdown-row'; 6284 row.setAttribute('data-course-id', line.course_id); 6285 6286 // Course artwork (founder, Dometrain reference). Decorative â the title beside it 6287 // is the accessible name â so alt is empty rather than a duplicate announcement. 6288 if (line.thumb) { 6289 var img = document.createElement('img'); 6290 img.className = 'cmz-paddle-mc-thumb'; 6291 img.src = line.thumb; 6292 img.alt = ''; 6293 img.loading = 'lazy'; 6294 row.appendChild(img); 6295 } 6296 6297 var a = document.createElement('a'); 6298 a.href = line.url || '#'; 6299 escText(a, line.title || ''); 6300 row.appendChild(a); 6301 6302 // Per-line price: the discounted figure, with list struck above it only when there 6303 // IS a discount. No discount label per row â one label by the subtotal instead,
6304 // because repeating it on every line is what turns a popup into a receipt. 6305 var prow = priceCache[String(line.course_id)]; 6306 if (prow && prow.sellable && prow.formatted) { 6307 var pw = document.createElement('span'); 6308 pw.className = 'cmz-paddle-mc-price'; 6309 if (prow.discount && prow.formatted.list) { 6310 var wasEl = document.createElement('span'); 6311 wasEl.className = 'cmz-paddle-mc-was'; 6312 escText(wasEl, prow.formatted.list); 6313 pw.appendChild(wasEl); 6314 } 6315 var nowEl = document.createElement('span'); 6316 nowEl.className = 'cmz-paddle-mc-now'; 6317 escText(nowEl, prow.formatted.price || prow.formatted.list || ''); 6318 pw.appendChild(nowEl); 6319 row.appendChild(pw); 6320 } 6321 6322 var remove = document.createElement('button'); 6323 remove.type = 'button'; 6324 remove.className = 'cmz-paddle-cart-row-remove'; 6325 remove.setAttribute('data-course-id', line.course_id); 6326 remove.setAttribute('title', 'Remove from cart'); 6327 remove.setAttribute('aria-label', 'Remove ' + (line.title || 'this course') + ' from cart'); 6328 remove.appendChild(removeGlyph()); 6329 row.appendChild(remove); 6330 6331 list.appendChild(row); 6332 }); 6333 dd.appendChild(list); 6334 6335 /* 6336 * Subtotal, one discount label, one caveat â in that order, and only when we actually 6337 * have figures for every priced line. A partial subtotal is worse than none: it would 6338 * understate the basket, which is the one direction a budget number must never err. 6339 */ 6340 var priced = lines.map(function (l) { return priceCache[String(l.course_id)]; }) 6341 .filter(function (r) { return r && r.sellable && r.price; }); 6342 if (priced.length && priced.length === lines.length && priceMeta) { 6343 var sum = 0; 6344 priced.forEach(function (r) { sum += Number(r.price); }); // integers, one currency 6345 var sub = document.createElement('div'); 6346 sub.className = 'cmz-paddle-mc-sub'; 6347 var sl = document.createElement('span'); 6348 escText(sl, 'Subtotal'); 6349 var sv = document.createElement('span'); 6350 escText(sv, money(sum, priceMeta.currency_code)); 6351 sub.appendChild(sl); sub.appendChild(sv); 6352 dd.appendChild(sub); 6353 6354 if (priceMeta.discount && priceMeta.discount.label) { 6355 var dl = document.createElement('span'); 6356 dl.className = 'cmz-paddle-mc-disc'; 6357 escText(dl, priceMeta.discount.label); 6358 dd.appendChild(dl); 6359 } 6360 if (priceMeta.estimate) { 6361 // `estimate` is about TAX only â the discount and the pre-tax figures are exact, 6362 // so the line says that and does not hedge the whole number. 6363 var nt = document.createElement('span'); 6364 nt.className = 'cmz-paddle-mc-note'; 6365 escText(nt, 'Taxes are finalised at checkout.'); 6366 dd.appendChild(nt); 6367 } 6368 } 6369 6370 var actions = document.createElement('div'); 6371 actions.className = 'cmz-paddle-cart-dropdown-actions'; 6372 6373 // Trash can, not the word "Empty cart" (founder: "people will get that better"). The 6374 // glyph carries no text, so the accessible name has to be supplied explicitly â and 6375 // title as well, which is what gives mouse users the tooltip. 6376 var emptyLink = document.createElement('button'); 6377 emptyLink.type = 'button'; 6378 emptyLink.className = 'cmz-paddle-cart-empty-link'; 6379 emptyLink.setAttribute('aria-label', 'Empty cart'); 6380 emptyLink.setAttribute('title', 'Empty cart'); 6381 emptyLink.appendChild(trashGlyph()); 6382 actions.appendChild(emptyLink); 6383 6384 // Keeps the Tutor classes off entirely â this button is styled by the component, and 6385 // inheriting tutor-btn-primary was one more cascade fight for no benefit. 6386 var checkoutBtn = document.createElement('button'); 6387 checkoutBtn.type = 'button'; 6388 checkoutBtn.className = 'cmz-paddle-cart-dropdown-checkout'; 6389 // Count in the label (founder, Dometrain reference): the button states what it is about 6390 // to buy, so the basket size is legible without reading back up the panel. 6391 var coLabel = document.createElement('span'); 6392 escText(coLabel, 'Checkout (' + lines.length + ')'); 6393 checkoutBtn.appendChild(coLabel); 6394 var arrow = document.createElement('span'); 6395 arrow.className = 'cmz-paddle-mc-arrow'; 6396 arrow.setAttribute('aria-hidden', 'true'); 6397 escText(arrow, 'â'); 6398 checkoutBtn.appendChild(arrow); 6399 actions.appendChild(checkoutBtn); 6400 6401 dd.appendChild(actions); 6402 } 6403
6404 function renderDropdown(lines) { 6405 function paint() { 6406 document.querySelectorAll('.cmz-paddle-cart-dropdown').forEach(function (dd) { 6407 renderOneDropdown(dd, lines); 6408 }); 6409 } 6410 // Render immediately so the popup never waits on the network, then again once prices 6411 // land. Cached ids resolve synchronously and the second pass is a no-op. 6412 paint(); 6413 if (lines && lines.length) { 6414 pricesFetch(lines.map(function (l) { return String(l.course_id); })).then(paint); 6415 } 6416 } 6417 6418 function refreshCart() { 6419 return post('cmz_paddle_cart_state', {}).then(function (res) { 6420 var payload = res && res.data ? res.data : {}; 6421 updateBadge(payload.count || 0); 6422 renderDropdown(payload.lines || []); 6423 syncAddToCartButtons(payload.items || []); 6424 return payload; 6425 }); 6426 } 6427 6428 // Open/close act on ONE menu item's own panel (there are two in the document). Passing the 6429 // item in is what makes the mobile clone work. 6430 function setDropdown(item, open) { 6431 if (!item) { return; } 6432 var dd = partOf(item, 'cmz-paddle-cart-dropdown'); 6433 var link = partOf(item, 'cmz-paddle-cart-link'); 6434 if (!dd) { return; } 6435 dd.hidden = !open; 6436 // Timestamp every open, so the touch toggle can tell "this same tap already opened 6437 // it via focusin" from "a second, deliberate closing tap" (see the click handler). 6438 if (open) { item.setAttribute('data-cmz-opened-at', String(Date.now())); } 6439 // The link is the popup's control now that the caret is gone, so it carries the state. 6440 if (link) { link.setAttribute('aria-expanded', open ? 'true' : 'false'); } 6441 } 6442 function closeAllDropdowns() {
6443 cartItems().forEach(function (item) { setDropdown(item, false); }); 6444 } 6445 function isOpen(item) { 6446 var dd = partOf(item, 'cmz-paddle-cart-dropdown'); 6447 return !!(dd && !dd.hidden); 6448 } 6449 function openOnly(item) { 6450 closeAllDropdowns(); // only ever one panel open at a time 6451 setDropdown(item, true); 6452 } 6453 6454 /* ----------------------------------------------------------------------- 6455 * Opening the panel. The caret is gone (founder: "it opens on hover, so we don't need a 6456 * dropdown arrow then"), so the chip itself is the whole control, and what a press means 6457 * depends on whether the device can hover: 6458 * 6459 * hover-capable ... hover peeks the panel; CLICK still goes straight to checkout, which 6460 * is the standing one-less-step ruling and is untouched. 6461 * touch ........... TAP opens the panel, and checkout is one more tap on the panel's own 6462 * Checkout (n) button. With no hover and no caret there would otherwise 6463 * be no way to see the basket before a tap mints a transaction â the 6464 * extra tap buys the contents view. 6465 * 6466 * The touch behaviour is the one deliberate departure from "icon click â checkout", so it 6467 * is switchable HERE, in one constant, instead of being spread through the handlers. 6468 * -------------------------------------------------------------------- */ 6469 var MOBILE_TAP_OPENS_PANEL = true; 6470 var HOVER_CLOSE_DELAY = 260; // grace period so the pointer can cross into the panel 6471 var hoverCloseTimer = null; 6472 6473 // (hover: hover) and (pointer: fine) is the capability question, not a width guess: a 6474 // touch laptop reports a coarse pointer, and a narrow desktop window still has a mouse. 6475 function canHover() { 6476 return !!(window.matchMedia && window.matchMedia('(hover: hover) and (pointer: fine)').matches); 6477 } 6478 6479 function cancelHoverClose() { 6480 if (hoverCloseTimer) { window.clearTimeout(hoverCloseTimer); hoverCloseTimer = null; } 6481 } 6482 function scheduleHoverClose() { 6483 cancelHoverClose(); 6484 hoverCloseTimer = window.setTimeout(function () { closeAllDropdowns(); }, HOVER_CLOSE_DELAY); 6485 } 6486 6487 /* 6488 * DELEGATED, NEVER PER-ITEM (release night 2026-08-07, "nothing happens when I hover"). 6489 * The per-item mouseenter/focus bindings ran once at script init â but Extra builds the 6490 * BURGER menu's cart item later, so the clone a narrow window actually shows had no hover 6491 * handlers at all: hover did nothing and a click fell through to checkout. Every other 6492 * cart listener in this file is already document-delegated for exactly this reason; now 6493 * these are too. mouseover/mouseout + a relatedTarget-containment check reproduce 6494 * mouseenter/mouseleave semantics (movement within the item, chip â panel, is ignored). 6495 * 6496 * The pointer flag lives on the item as data-cmz-pointer-in: focusout is not only "the 6497 * user tabbed away" â removing a row disables the focused à button, which drops focus 6498 * with no relatedTarget, and closing on that slammed the panel shut after every removal. 6499 * While the pointer is physically inside, focus hiccups never close; hover-away does. 6500 */ 6501 document.addEventListener('mouseover', function (e) { 6502 var item = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-item') : null; 6503 if (!item || !canHover()) { return; } 6504 if (e.relatedTarget && item.contains(e.relatedTarget)) { return; } // moved within 6505 item.setAttribute('data-cmz-pointer-in', '1'); 6506 cancelHoverClose(); 6507 openOnly(item); 6508 }, true); 6509 document.addEventListener('mouseout', function (e) { 6510 var item = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-item') : null; 6511 if (!item || !canHover()) { return; } 6512 if (e.relatedTarget && item.contains(e.relatedTarget)) { return; } // still inside 6513 item.removeAttribute('data-cmz-pointer-in'); 6514 scheduleHoverClose(); 6515 }, true); 6516 // Keyboard: tabbing onto the chip or into the panel opens it and holds it open. 6517 document.addEventListener('focusin', function (e) { 6518 var item = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-item') : null; 6519 if (!item) { return; } 6520 cancelHoverClose(); 6521 openOnly(item); 6522 }); 6523 document.addEventListener('focusout', function (e) { 6524 var item = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-item') : null; 6525 if (!item) { return; } 6526 var to = e.relatedTarget; 6527 if (to && item.contains(to)) { return; } 6528 // Focus fell out because the control under the pointer was disabled or removed â 6529 // the pointer is still here, so the panel stays until it actually leaves. 6530 if (canHover() && item.hasAttribute('data-cmz-pointer-in')) { return; } 6531 setDropdown(item, false); 6532 }); 6533 6534 /* 6535 * ============================ CAPTURE, NOT BUBBLE ============================ 6536 * Every delegated listener whose target lives inside the NAV is registered on the capture 6537 * phase, and this is load-bearing rather than stylistic. 6538 * 6539 * MEASURED on a real phone-emulating browser, 2026-08-06 â instrumented three listeners and 6540 * tapped the cart chip: 6541 * CAPTURE on document -> fired (closest('.cmz-paddle-cart-link') === true) 6542 * BUBBLE on the link -> fired 6543 * BUBBLE on document -> NEVER FIRED 6544 * Something between the link and document calls stopPropagation(): Extra's own mobile-menu 6545 * handler, on the menu it renders as a SECOND copy of the nav (the same duplicate-menu trap 6546 * that made the mini-cart inert on touch once before â different mechanism, same surface). 6547 * 6548 * The buyer-visible consequence was total: on touch, tapping the cart chip did nothing at
6549 * all. Not open the panel, not go to the cart â the anchor's href is "#", so the default 6550 * merely appended a hash. The cart was UNREACHABLE from the mobile nav, and every control 6551 * inside the mini-cart (row Ã, empty-cart trash, Checkout) was dead for the same reason. 6552 * 6553 * Capture runs document-downward, so it is reached before any descendant can stop 6554 * propagation. Each handler still early-returns unless its own selector matches, so the cost 6555 * is one closest() per document click. These all sit on `document`, so stopPropagation() in 6556 * one of them does not prevent the others from running. 6557 * ============================================================================= */ 6558 6559 // Outside click and Escape both close it â standard dropdown manners. 6560 document.addEventListener('click', function (e) { 6561 var withinItem = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-item') : null; 6562 if (!withinItem) { closeAllDropdowns(); } 6563 }, true); 6564 document.addEventListener('keydown', function (e) { 6565 if (e.key === 'Escape' || e.key === 'Esc') { closeAllDropdowns(); } 6566 }); 6567 6568 // Remove a line from inside the dropdown. refreshCart() re-derives badge, dropdown AND 6569 // every course-page "Add to Cart" button's state together â one call, one source of truth, 6570 // so a removal here can never drift out of sync with what a page's own button shows. 6571 document.addEventListener('click', function (e) { 6572 var btn = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-row-remove') : null; 6573 if (!btn) { return; } 6574 e.preventDefault(); 6575 var courseId = btn.getAttribute('data-course-id'); 6576 btn.disabled = true; 6577 post('cmz_paddle_cart_remove', { course_id: courseId }).then(function () { 6578 refreshCart(); 6579 }); 6580 }, true); 6581 6582 // Empty the whole cart from the dropdown â same convergence via refreshCart(). Closing 6583 // here is deliberate (founder: "close on clear all is okay") and now has to be explicit, 6584 // because the pointer-still-inside guard stopped the old accidental focusout close. 6585 document.addEventListener('click', function (e) { 6586 var btn = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-empty-link') : null; 6587 if (!btn) { return; } 6588 e.preventDefault(); 6589 btn.disabled = true; 6590 post('cmz_paddle_cart_empty', {}).then(function () { 6591 refreshCart(); 6592 closeAllDropdowns(); 6593 }).catch(function () { 6594 btn.disabled = false; 6595 }); 6596 }, true); 6597 6598 // Checkout button inside the dropdown behaves exactly like the icon click. 6599 document.addEventListener('click', function (e) { 6600 var btn = e.target && e.target.closest ? e.target.closest('.cmz-paddle-cart-dropdown-checkout') : null; 6601 if (!btn) { return; } 6602 e.preventDefault(); 6603 goToCheckout(); 6604 }, true); 6605 6606 // Resume-after-login: a guest sent to log in from an icon click comes back to 6607 // /courses/?_cmz_cart_resume=1 (see cmz_paddle_cart_resume_url()). If they're gated and 6608 // logged in now (this script only runs at all if they are, per the enqueue gate), fire the 6609 // same checkout call again automatically rather than making them click twice â the "resume 6610 // into checkout" the founder asked for, built without touching cmz_pending_buy. 6611 (function maybeResume() { 6612 try { 6613 var params = new URLSearchParams(location.search); 6614 if (params.get('_cmz_cart_resume') !== '1') { return; } 6615 params.delete('_cmz_cart_resume'); 6616 var clean = location.pathname + (params.toString() ? '?' + params.toString() : '') + location.hash; 6617 window.history.replaceState({}, document.title, clean); 6618 goToCheckout(); 6619 } catch (e) { /* private-mode storage or URL API failure â never break the page */ } 6620 })(); 6621 6622 // Initial badge + dropdown fill, once per page load â one fetch does both. 6623 refreshCart().catch(function () {}); 6624 // Archive price lines: one batched call for every card on the page, independent of the 6625 // cart fetch above so a slow cart never delays the prices or vice versa. 6626 paintLoopPrices(); 6627})(); 6628//# sourceURL=cmz-paddle-cart-js-after 6629</script>
vendor: 1 bytes, line 6629
6629
6630<script id="wp-hooks-js" src="https://courses.code-maze.com/wp-includes/js/dist/hooks.min.js?ver=f0f188028580e8dc1255"></script>
vendor: 1 bytes, line 6630
6630
6631<script id="wp-i18n-js" src="https://courses.code-maze.com/wp-includes/js/dist/i18n.min.js?ver=1dfe7db3940c23ea9216"></script>
vendor: 1 bytes, line 6631
6631
6632<script id="wp-i18n-js-after"> 6633wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); 6634//# sourceURL=wp-i18n-js-after 6635</script>
vendor: 1 bytes, line 6635
6635
6636<script id="react-js" src="https://courses.code-maze.com/wp-includes/js/dist/vendor/react.min.js?ver=18.3.1.1"></script>
vendor: 1 bytes, line 6636
6636
6637<script id="react-dom-js" src="https://courses.code-maze.com/wp-includes/js/dist/vendor/react-dom.min.js?ver=18.3.1.1"></script>
vendor: 1 bytes, line 6637
6637
6638<script id="wp-escape-html-js" src="https://courses.code-maze.com/wp-includes/js/dist/escape-html.min.js?ver=87ebe53e97bba59805a5"></script>
vendor: 1 bytes, line 6638
6638
6639<script id="wp-element-js" src="https://courses.code-maze.com/wp-includes/js/dist/element.min.js?ver=4a4370b2b349066fd440"></script>
vendor: 1 bytes, line 6639
6639
6640<script id="tutor-script-js-extra"> 6641var _tutorobject = {"ajaxurl":"https://courses.code-maze.com/wp-admin/admin-ajax.php","home_url":"https://courses.code-maze.com","site_url":"https://courses.code-maze.com","site_title":"Code Maze","base_path":"/","tutor_url":"https://courses.code-maze.com/wp-content/plugins/tutor/","tutor_pro_url":"https://courses.code-maze.com/wp-content/plugins/tutor-pro/","nonce_key":"_tutor_nonce","_tutor_nonce":"e50d0d8034","loading_icon_url":"https://courses.code-maze.com/wp-admin/images/wpspin_light.gif","placeholder_img_src":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/placeholder.svg","enable_lesson_classic_editor":"1","tutor_frontend_dashboard_url":"https://courses.code-maze.com/dashboard/","is_dashboard_page":"","wp_date_format":"MMMM d, yyyy","start_of_week":"1","is_admin":"","is_admin_bar_showing":"","addons_data":[{"name":"Course Bundle","description":"Group multiple courses to sell together.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/course-bundle/thumbnail.svg","base_name":"course-bundle","is_enabled":1},{"name":"Subscription","description":"Manage subscription","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/subscription/thumbnail.png","base_name":"subscription","is_enabled":0},{"name":"Content Bank","description":"Create content once and use it across multiple courses.","is_new":true,"url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/content-bank/thumbnail.png","base_name":"content-bank","is_enabled":0},{"name":"Social Login","description":"Let users register & login through social networks.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/social-login/thumbnail.svg","base_name":"social-login","is_enabled":0},{"name":"Content Drip","description":"Unlock lessons by schedule or when students meet a specific condition.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/content-drip/thumbnail.png","base_name":"content-drip","is_enabled":0},{"name":"Tutor Multi Instructors","description":"Collaborate and add multiple instructors to a course.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-multi-instructors/thumbnail.png","base_name":"tutor-multi-instructors","is_enabled":1},{"name":"Tutor Assignments","description":"Assess student learning with assignments.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-assignments/thumbnail.png","base_name":"tutor-assignments","is_enabled":1},{"name":"Tutor Course Preview","description":"Offer free previews of specific lessons before enrollment.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-course-preview/thumbnail.png","base_name":"tutor-course-preview","is_enabled":1},{"name":"Tutor Course Attachments","description":"Add unlimited attachments/ private files to any Tutor course","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-course-attachments/thumbnail.png","base_name":"tutor-course-attachments","is_enabled":1},{"name":"Tutor Google Meet Integration","description":"Host live classes with Google Meet, directly from your lesson page.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/google-meet/thumbnail.png","base_name":"google-meet","is_enabled":0},{"name":"Tutor Report","description":"Check your course performance through Tutor Report stats.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-report/thumbnail.png","base_name":"tutor-report","is_enabled":1},{"name":"Email","description":"Send automated and customized emails for various Tutor events.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-email/thumbnail.png","base_name":"tutor-email","is_enabled":1},{"name":"Calendar","description":"Enable to let students view all your course events in one place.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/calendar/thumbn
6641ail.png","base_name":"calendar","is_enabled":0},{"name":"Notifications","description":"Keep students and instructors notified of course events on their dashboard.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-notifications/thumbnail.png","base_name":"tutor-notifications","is_enabled":0},{"name":"Google Classroom Integration","description":"Enable to integrate Tutor LMS with Google Classroom.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/google-classroom/thumbnail.png","base_name":"google-classroom","is_enabled":0},{"name":"Tutor Zoom Integration","description":"Connect Tutor LMS with Zoom to host live online classes.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-zoom/thumbnail.png","base_name":"tutor-zoom","is_enabled":0},{"name":"Quiz Export/Import","description":"Save time by exporting/importing quiz data with easy options.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/quiz-import-export/thumbnail.png","base_name":"quiz-import-export","is_enabled":0},{"name":"Enrollment","description":"Enable to manually enroll students in your courses.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/enrollments/thumbnail.png","base_name":"enrollments","is_enabled":1},{"name":"Tutor Certificate","description":"Enable to award certificates upon course completion.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-certificate/thumbnail.png","base_name":"tutor-certificate","is_enabled":1},{"name":"Gradebook","description":"Track student progress with a centralized gradebook.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/gradebook/thumbnail.png","base_name":"gradebook","is_enabled":1}
6641,{"name":"Tutor Prerequisites","description":"Set course prerequisites to guide learning paths effectively.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-prerequisites/thumbnail.png","base_name":"tutor-prerequisites","is_enabled":0},{"name":"BuddyPress","description":"Boost engagement with social features through BuddyPress for Tutor LMS.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/buddypress/thumbnail.png","base_name":"buddypress","is_enabled":0},{"name":"WooCommerce Subscriptions","description":"Capture Residual Revenue with Recurring Payments.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/wc-subscriptions/thumbnail.png","base_name":"wc-subscriptions","is_enabled":0},{"name":"Paid Memberships Pro","description":"Boost revenue by selling course memberships.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/pmpro/thumbnail.png","base_name":"pmpro","is_enabled":0},{"name":"Restrict Content Pro","description":"Enable to manage content access through Restrict Content Pro. ","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/restrict-content-pro/thumbnail.png","base_name":"restrict-content-pro","is_enabled":0},{"name":"Weglot","description":"Translate & manage multilingual courses for global reach.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-weglot/thumbnail.png","base_name":"tutor-weglot","is_enabled":0},{"name":"WPML","description":"Create multilingual courses, lessons, dashboard and more.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-wpml/thumbnail.png","base_name":"tutor-wpml","is_enabled":0},{"name":"H5P","description":"Integrate H5P to add interactivity and engagement to your courses.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/h5p/thumbnail.png","base_name":"h5p","is_enabled":0}],"current_user":[],"content_change_event":"tutor_content_changed_event","is_tutor_course_edit":"","current_page":"","quiz_answer_display_time":"2000","is_ssl":"1","course_list_page_url":"https://courses.code-maze.com/wp-admin/admin.php?page=tutor","course_post_type":"courses","tutor_currency":{"symbol":"$","currency":false,"position":"left","thousand_separator":",","decimal_separator":".","no_of_decimal":"2"},"local":"en_US","settings":{"monetize_by":"wc"},"max_upload_size":"1572864000","monetize_by":"wc","kids_icons_registry":[],"is_kids_mode":"","user_preferences":[],"is_legacy_learning_mode":"1","course_slug":"courses","lesson_slug":"lesson","quiz_slug":"quizzes","is_tour_completed":"1","visibility_control":"","assignment_slug":"assignments","legal_consent_display_places":["student_registration","login","checkout","instructor_registration"]}; 6642//# sourceURL=tutor-script-js-extra 6643</script>
vendor: 1 bytes, line 6643
6643
6644<script id="tutor-script-js" src="https://courses.code-maze.com/wp-content/plugins/tutor/assets/js/tutor.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6644
6644
6645<script id="jquery-ui-core-js-before"> 6646jQuery.uiBackCompat = true; 6647//# sourceURL=jquery-ui-core-js-before 6648</script>
vendor: 1 bytes, line 6648
6648
6649<script id="jquery-ui-core-js" src="https://courses.code-maze.com/wp-includes/js/jquery/ui/core.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 6649
6649
6650<script id="jquery-ui-mouse-js" src="https://courses.code-maze.com/wp-includes/js/jquery/ui/mouse.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 6650
6650
6651<script id="jquery-ui-sortable-js" src="https://courses.code-maze.com/wp-includes/js/jquery/ui/sortable.min.js?ver=1.14.2"></script>
vendor: 1 bytes, line 6651
6651
6652<script id="jquery-touch-punch-js" src="https://courses.code-maze.com/wp-includes/js/jquery/jquery.ui.touch-punch.js?ver=0.2.2"></script>
vendor: 1 bytes, line 6652
6652
6653<script id="tutor-plyr-js" src="https://courses.code-maze.com/wp-content/plugins/tutor/assets/lib/plyr/plyr.polyfilled.min.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6653
6653
6654<script id="tutor-social-share-js" src="https://courses.code-maze.com/wp-content/plugins/tutor/assets/lib/SocialShare/SocialShare.min.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6654
6654
6655<script id="moment-js" src="https://courses.code-maze.com/wp-includes/js/dist/vendor/moment.min.js?ver=2.30.1"></script>
vendor: 1 bytes, line 6655
6655
6656<script id="moment-js-after"> 6657moment.updateLocale( 'en_US', {"months":["January","February","March","April","May","June","July","August","September","October","November","December"],"monthsShort":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"weekdays":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"weekdaysShort":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"week":{"dow":1},"longDateFormat":{"LT":"g:i a","LTS":null,"L":null,"LL":"F j, Y","LLL":"F j, Y g:i a","LLLL":null}} ); 6658//# sourceURL=moment-js-after 6659</script>
vendor: 1 bytes, line 6659
6659
6660<script id="wp-deprecated-js" src="https://courses.code-maze.com/wp-includes/js/dist/deprecated.min.js?ver=fe587bac92b7d0ef760e"></script>
vendor: 1 bytes, line 6660
6660
6661<script id="wp-date-js" src="https://courses.code-maze.com/wp-includes/js/dist/date.min.js?ver=8173fc0fc12b7bb7eaf0"></script>
vendor: 1 bytes, line 6661
6661
6662<script id="wp-date-js-after"> 6663wp.date.setSettings( {"l10n":{"locale":"en_US","months":["January","February","March","April","May","June","July","August","September","October","November","December"],"monthsShort":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"weekdays":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"weekdaysShort":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"meridiem":{"am":"am","pm":"pm","AM":"AM","PM":"PM"},"relative":{"future":"%s from now","past":"%s ago","s":"a second","ss":"%d seconds","m":"a minute","mm":"%d minutes","h":"an hour","hh":"%d hours","d":"a day","dd":"%d days","M":"a month","MM":"%d months","y":"a year","yy":"%d years"},"startOfWeek":1},"formats":{"time":"g:i a","date":"F j, Y","datetime":"F j, Y g:i a","datetimeAbbreviated":"M j, Y g:i a"},"timezone":{"offset":2,"offsetFormatted":"2","string":"Europe/Belgrade","abbr":"CEST"}} ); 6664//# sourceURL=wp-date-js-after 6665</script>
vendor: 1 bytes, line 6665
6665
6666<script id="tutor-frontend-js-extra"> 6667var _tutorobject = {"ajaxurl":"https://courses.code-maze.com/wp-admin/admin-ajax.php","home_url":"https://courses.code-maze.com","site_url":"https://courses.code-maze.com","site_title":"Code Maze","base_path":"/","tutor_url":"https://courses.code-maze.com/wp-content/plugins/tutor/","tutor_pro_url":"https://courses.code-maze.com/wp-content/plugins/tutor-pro/","nonce_key":"_tutor_nonce","_tutor_nonce":"e50d0d8034","loading_icon_url":"https://courses.code-maze.com/wp-admin/images/wpspin_light.gif","placeholder_img_src":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/placeholder.svg","enable_lesson_classic_editor":"1","tutor_frontend_dashboard_url":"https://courses.code-maze.com/dashboard/","is_dashboard_page":"","wp_date_format":"MMMM d, yyyy","start_of_week":"1","is_admin":"","is_admin_bar_showing":"","addons_data":[{"name":"Course Bundle","description":"Group multiple courses to sell together.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/course-bundle/thumbnail.svg","base_name":"course-bundle","is_enabled":1},{"name":"Subscription","description":"Manage subscription","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/subscription/thumbnail.png","base_name":"subscription","is_enabled":0},{"name":"Content Bank","description":"Create content once and use it across multiple courses.","is_new":true,"url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/content-bank/thumbnail.png","base_name":"content-bank","is_enabled":0},{"name":"Social Login","description":"Let users register & login through social networks.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/social-login/thumbnail.svg","base_name":"social-login","is_enabled":0},{"name":"Content Drip","description":"Unlock lessons by schedule or when students meet a specific condition.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/content-drip/thumbnail.png","base_name":"content-drip","is_enabled":0},{"name":"Tutor Multi Instructors","description":"Collaborate and add multiple instructors to a course.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-multi-instructors/thumbnail.png","base_name":"tutor-multi-instructors","is_enabled":1},{"name":"Tutor Assignments","description":"Assess student learning with assignments.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-assignments/thumbnail.png","base_name":"tutor-assignments","is_enabled":1},{"name":"Tutor Course Preview","description":"Offer free previews of specific lessons before enrollment.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-course-preview/thumbnail.png","base_name":"tutor-course-preview","is_enabled":1},{"name":"Tutor Course Attachments","description":"Add unlimited attachments/ private files to any Tutor course","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-course-attachments/thumbnail.png","base_name":"tutor-course-attachments","is_enabled":1},{"name":"Tutor Google Meet Integration","description":"Host live classes with Google Meet, directly from your lesson page.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/google-meet/thumbnail.png","base_name":"google-meet","is_enabled":0},{"name":"Tutor Report","description":"Check your course performance through Tutor Report stats.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-report/thumbnail.png","base_name":"tutor-report","is_enabled":1},{"name":"Email","description":"Send automated and customized emails for various Tutor events.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-email/thumbnail.png","base_name":"tutor-email","is_enabled":1},{"name":"Calendar","description":"Enable to let students view all your course events in one place.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/calendar/thumbn
6667ail.png","base_name":"calendar","is_enabled":0},{"name":"Notifications","description":"Keep students and instructors notified of course events on their dashboard.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-notifications/thumbnail.png","base_name":"tutor-notifications","is_enabled":0},{"name":"Google Classroom Integration","description":"Enable to integrate Tutor LMS with Google Classroom.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/google-classroom/thumbnail.png","base_name":"google-classroom","is_enabled":0},{"name":"Tutor Zoom Integration","description":"Connect Tutor LMS with Zoom to host live online classes.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-zoom/thumbnail.png","base_name":"tutor-zoom","is_enabled":0},{"name":"Quiz Export/Import","description":"Save time by exporting/importing quiz data with easy options.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/quiz-import-export/thumbnail.png","base_name":"quiz-import-export","is_enabled":0},{"name":"Enrollment","description":"Enable to manually enroll students in your courses.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/enrollments/thumbnail.png","base_name":"enrollments","is_enabled":1},{"name":"Tutor Certificate","description":"Enable to award certificates upon course completion.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-certificate/thumbnail.png","base_name":"tutor-certificate","is_enabled":1},{"name":"Gradebook","description":"Track student progress with a centralized gradebook.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/gradebook/thumbnail.png","base_name":"gradebook","is_enabled":1}
6667,{"name":"Tutor Prerequisites","description":"Set course prerequisites to guide learning paths effectively.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-prerequisites/thumbnail.png","base_name":"tutor-prerequisites","is_enabled":0},{"name":"BuddyPress","description":"Boost engagement with social features through BuddyPress for Tutor LMS.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/buddypress/thumbnail.png","base_name":"buddypress","is_enabled":0},{"name":"WooCommerce Subscriptions","description":"Capture Residual Revenue with Recurring Payments.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/wc-subscriptions/thumbnail.png","base_name":"wc-subscriptions","is_enabled":0},{"name":"Paid Memberships Pro","description":"Boost revenue by selling course memberships.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/pmpro/thumbnail.png","base_name":"pmpro","is_enabled":0},{"name":"Restrict Content Pro","description":"Enable to manage content access through Restrict Content Pro. ","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/restrict-content-pro/thumbnail.png","base_name":"restrict-content-pro","is_enabled":0},{"name":"Weglot","description":"Translate & manage multilingual courses for global reach.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-weglot/thumbnail.png","base_name":"tutor-weglot","is_enabled":0},{"name":"WPML","description":"Create multilingual courses, lessons, dashboard and more.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/tutor-wpml/thumbnail.png","base_name":"tutor-wpml","is_enabled":0},{"name":"H5P","description":"Integrate H5P to add interactivity and engagement to your courses.","url":"https://courses.code-maze.com/wp-content/plugins/tutor/assets/images/addons/h5p/thumbnail.png","base_name":"h5p","is_enabled":0}],"current_user":[],"content_change_event":"tutor_content_changed_event","is_tutor_course_edit":"","current_page":"","quiz_answer_display_time":"2000","is_ssl":"1","course_list_page_url":"https://courses.code-maze.com/wp-admin/admin.php?page=tutor","course_post_type":"courses","tutor_currency":{"symbol":"$","currency":false,"position":"left","thousand_separator":",","decimal_separator":".","no_of_decimal":"2"},"local":"en_US","settings":{"monetize_by":"wc"},"max_upload_size":"1572864000","monetize_by":"wc","kids_icons_registry":[],"is_kids_mode":"","user_preferences":[],"is_legacy_learning_mode":"1","course_slug":"courses","lesson_slug":"lesson","quiz_slug":"quizzes","is_tour_completed":"1","visibility_control":"","assignment_slug":"assignments","legal_consent_display_places":["student_registration","login","checkout","instructor_registration"]}; 6668//# sourceURL=tutor-frontend-js-extra 6669</script>
vendor: 1 bytes, line 6669
6669
6670<script id="tutor-frontend-js" src="https://courses.code-maze.com/wp-content/plugins/tutor/assets/js/tutor-front.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6670
6670
6671<script id="tutor-tiny-js" src="https://courses.code-maze.com/wp-includes/js/tinymce/tinymce.min.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6671
6671
6672<script id="tutor-tinymce-codesample-js" src="https://courses.code-maze.com/wp-content/plugins/tutor-pro/assets/lib/codesample/prism.min.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6672
6672
6673<script id="tutor-tinymce-code-js" src="https://courses.code-maze.com/wp-content/plugins/tutor-pro/assets/lib/tinymce/code.plugin.min.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6673
6673
6674<script id="tutor-prism-js-js" src="https://courses.code-maze.com/wp-content/plugins/tutor-pro/assets/lib/prism/prism.min.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6674
6674
6675<script id="tutor-prism-script-js" src="https://courses.code-maze.com/wp-content/plugins/tutor-pro/assets/lib/prism/script.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6675
6675
6676<script id="tutor-pro-front-js" src="https://courses.code-maze.com/wp-content/plugins/tutor-pro/assets/js/front.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6676
6676
6677<script id="tutor-course-bundle-common-js-before"> 6678var tutorProCourseBundle = {"is_course_bundle_editor":false,"course_bundle_list_page_url":"https:\/\/courses.code-maze.com\/wp-admin\/admin.php?page=tutor","course_bundle_post_type":"course-bundle"} 6679//# sourceURL=tutor-course-bundle-common-js-before 6680</script>
vendor: 1 bytes, line 6680
6680
6681<script id="tutor-course-bundle-common-js" src="https://courses.code-maze.com/wp-content/plugins/tutor-pro/addons/course-bundle/assets/js/common.js?ver=4.0.4"></script>
vendor: 1 bytes, line 6681
6681
6682<script id="masonry-js" src="https://courses.code-maze.com/wp-includes/js/masonry.min.js?ver=4.2.2"></script>
vendor: 1 bytes, line 6682
6682
6683<script id="extra-scripts-js-extra"> 6684var EXTRA = {"images_uri":"https://courses.code-maze.com/wp-content/themes/Extra/images/","ajaxurl":"https://courses.code-maze.com/wp-admin/admin-ajax.php","your_rating":"Your Rating:","item_in_cart_count":"%d Item in Cart","items_in_cart_count":"%d Items in Cart","item_count":"%d Item","items_count":"%d Items","rating_nonce":"c5f5229343","timeline_nonce":"568010e392","blog_feed_nonce":"0d6c653e03","error":"There was a problem, please try again.","contact_error_name_required":"Name field cannot be empty.","contact_error_email_required":"Email field cannot be empty.","contact_error_email_invalid":"Please enter a valid email address.","is_ab_testing_active":"","is_cache_plugin_active":"no"}; 6685var et_shortcodes_strings = {"previous":"Previous","next":"Next"}; 6686var et_pb_custom = {"ajaxurl":"https://courses.code-maze.com/wp-admin/admin-ajax.php","images_uri":"https://courses.code-maze.com/wp-content/themes/Extra/images","builder_images_uri":"https://courses.code-maze.com/wp-content/themes/Extra/includes/builder/images","et_frontend_nonce":"f3f62076a5","subscription_failed":"Please, check the fields below to make sure you entered the correct information.","et_ab_log_nonce":"f939c35cb5","fill_message":"Please, fill in the following fields:","contact_error_message":"Please, fix the following errors:","invalid":"Invalid email","captcha":"Captcha","prev":"Prev","previous":"Previous","next":"Next","wrong_captcha":"You entered the wrong number in captcha.","wrong_checkbox":"Checkbox","ignore_waypoints":"no","is_divi_theme_used":"","widget_search_selector":".widget_search","ab_tests":[],"is_ab_testing_active":"","page_id":"75594","unique_test_id":"","ab_bounce_rate":"5","is_cache_plugin_active":"no","is_shortcode_tracking":"","tinymce_uri":""}; var et_builder_utils_params = {"condition":{"diviTheme":false,"extraTheme":true},"scrollLocations":["app","top"],"builderScrollLocations":{"desktop":"app","tablet":"app","phone":"app"},"onloadScrollLocation":"app","builderType":"fe"}; var et_frontend_scripts = {"builderCssContainerPrefix":"#et-boc","builderCssLayoutPrefix":"#et-boc .et-l"}; 6687var et_pb_box_shadow_elements = []; 6688var et_pb_motion_elements = {"desktop":[],"tablet":[],"phone":[]}; 6689var et_pb_sticky_elements = []; 6690//# sourceURL=extra-scripts-js-extra 6691</script>
vendor: 1 bytes, line 6691
6691
6692<script id="extra-scripts-js" src="https://courses.code-maze.com/wp-content/themes/Extra/scripts/scripts.unified.js?ver=4.9.7"></script>
vendor: 1 bytes, line 6692
6692
6693<script id="lemon-squeezy-direct-checkout-js-extra"> 6694var lemon_squeezy_direct = {"ajax_url":"https://courses.code-maze.com/wp-admin/admin-ajax.php","i18n":{"processing":"Processing...","error":"An error occurred. Please try again."}}; 6695//# sourceURL=lemon-squeezy-direct-checkout-js-extra 6696</script>
vendor: 1 bytes, line 6696
6696
6697<script id="lemon-squeezy-direct-checkout-js" src="https://courses.code-maze.com/wp-content/plugins/lemon-squeezy-for-woocommerce/assets/js/direct-checkout.js?ver=1.0.0"></script>
vendor: 1 bytes, line 6697
6697
6698<script id="fancybox-purify-js" src="https://courses.code-maze.com/wp-content/plugins/easy-fancybox/vendor/purify.min.js?ver=1790926221"></script>
vendor: 1 bytes, line 6698
6698
6699<script id="jquery-fancybox-js-extra"> 6700var efb_i18n = {"close":"Close","next":"Next","prev":"Previous","startSlideshow":"Start slideshow","toggleSize":"Toggle size"}; 6701//# sourceURL=jquery-fancybox-js-extra 6702</script>
vendor: 1 bytes, line 6702
6702
6703<script id="jquery-fancybox-js" src="https://courses.code-maze.com/wp-content/plugins/easy-fancybox/fancybox/1.5.4/jquery.fancybox.js?ver=1790926221"></script>
vendor: 1 bytes, line 6703
6703
6704<script id="jquery-fancybox-js-after"> 6705var fb_timeout, fb_opts={'autoScale':true,'showCloseButton':true,'margin':20,'pixelRatio':'false','centerOnScroll':false,'enableEscapeButton':true,'overlayShow':true,'hideOnOverlayClick':true,'minVpHeight':320,'disableCoreLightbox':'true','enableBlockControls':'true','fancybox_openBlockControls':'true' }; 6706if(typeof easy_fancybox_handler==='undefined'){ 6707var easy_fancybox_handler=function(){ 6708jQuery([".nolightbox","a.wp-block-file__button","a.pin-it-button","a[href*='pinterest.com\/pin\/create']","a[href*='facebook.com\/share']","a[href*='twitter.com\/share']"].join(',')).addClass('nofancybox'); 6709jQuery('a.fancybox-close').on('click',function(e){e.preventDefault();jQuery.fancybox.close()}); 6710/* IMG */ 6711 var unlinkedImageBlocks=jQuery(".wp-block-image > img:not(.nofancybox,figure.nofancybox>img)"); 6712 unlinkedImageBlocks.wrap(function() { 6713 var href = jQuery( this ).attr( "src" ); 6714 return "<a href='" + href + "'></a>"; 6715 }); 6716var fb_IMG_select=jQuery('a[href*=".jpg" i]:not(.nofancybox,li.nofancybox>a,figure.nofancybox>a),area[href*=".jpg" i]:not(.nofancybox),a[href*=".jpeg" i]:not(.nofancybox,li.nofancybox>a,figure.nofancybox>a),area[href*=".jpeg" i]:not(.nofancybox),a[href*=".png" i]:not(.nofancybox,li.nofancybox>a,figure.nofancybox>a),area[href*=".png" i]:not(.nofancybox),a[href*=".webp" i]:not(.nofancybox,li.nofancybox>a,figure.nofancybox>a),area[href*=".webp" i]:not(.nofancybox)'); 6717fb_IMG_select.addClass('fancybox image'); 6718var fb_IMG_sections=jQuery('.gallery,.wp-block-gallery,.tiled-gallery,.wp-block-jetpack-tiled-gallery,.ngg-galleryoverview,.ngg-imagebrowser,.nextgen_pro_blog_gallery,.nextgen_pro_film,.nextgen_pro_horizontal_filmstrip,.ngg-pro-masonry-wrapper,.ngg-pro-mosaic-container,.nextgen_pro_sidescroll,.nextgen_pro_slideshow,.nextgen_pro_thumbnail_grid,.tiled-gallery'); 6719fb_IMG_sections.each(function(){jQuery(this).find(fb_IMG_select).attr('rel','gallery-'+fb_IMG_sections.index(this));}); 6720jQuery('a.fancybox,area.fancybox,.fancybox>a').each(function(){jQuery(this).fancybox(jQuery.extend(true,{},fb_opts,{'transition':'elastic','transitionIn':'elastic','easingIn':'easeOutBack','transitionOut':'elastic','easingOut':'easeInBack','opacity':false,'hideOnContentClick':false,'titleShow':false,'titlePosition':'over','titleFromAlt':false,'showNavArrows':true,'enableKeyboardNav':true,'cyclic':false,'mouseWheel':'false'}))}); 6721/* PDF */ 6722jQuery('a.fancybox-pdf,area.fancybox-pdf,.fancybox-pdf>a').each(function(){jQuery(this).fancybox(jQuery.extend(true,{},fb_opts,{'type':'iframe','width':'90%','height':'90%','padding':10,'titleShow':false,'titlePosition':'float','titleFromAlt':true,'autoDimensions':false,'scrolling':'no'}))}); 6723};}; 6724jQuery(easy_fancybox_handler);jQuery(document).on('post-load',easy_fancybox_handler); 6725 6726//# sourceURL=jquery-fancybox-js-after 6727</script>
vendor: 1 bytes, line 6727
6727
6728<script id="jquery-easing-js" src="https://courses.code-maze.com/wp-content/plugins/easy-fancybox/vendor/jquery.easing.js?ver=1.4.1"></script>
vendor: 1 bytes, line 6728
6728
6729<script id="sourcebuster-js-js" src="https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/js/sourcebuster/sourcebuster.min.js?ver=9.3.6"></script>
vendor: 1 bytes, line 6729
6729
6730<script id="wc-order-attribution-js-extra"> 6731var wc_order_attribution = {"params":{"lifetime":1.0e-5,"session":30,"base64":false,"ajaxurl":"https://courses.code-maze.com/wp-admin/admin-ajax.php","prefix":"wc_order_attribution_","allowTracking":true},"fields":{"source_type":"current.typ","referrer":"current_add.rf","utm_campaign":"current.cmp","utm_source":"current.src","utm_medium":"current.mdm","utm_content":"current.cnt","utm_id":"current.id","utm_term":"current.trm","utm_source_platform":"current.plt","utm_creative_format":"current.fmt","utm_marketing_tactic":"current.tct","session_entry":"current_add.ep","session_start_time":"current_add.fd","session_pages":"session.pgs","session_count":"udata.vst","user_agent":"udata.uag"}}; 6732//# sourceURL=wc-order-attribution-js-extra 6733</script>
vendor: 1 bytes, line 6733
6733
6734<script id="wc-order-attribution-js" src="https://courses.code-maze.com/wp-content/plugins/woocommerce/assets/js/frontend/order-attribution.min.js?ver=9.3.6"></script>
vendor: 1 bytes, line 6734
6734
6735<script id="et-builder-cpt-modules-wrapper-js-extra"> 6736var et_modules_wrapper = {"builderCssContainerPrefix":"#et-boc","builderCssLayoutPrefix":"#et-boc .et-l"}; 6737//# sourceURL=et-builder-cpt-modules-wrapper-js-extra 6738</script>
vendor: 1 bytes, line 6738
6738
6739<script id="et-builder-cpt-modules-wrapper-js" src="https://courses.code-maze.com/wp-content/themes/Extra/includes/builder/scripts/cpt-modules-wrapper.js?ver=4.9.7"></script>
vendor: 1 bytes, line 6739
6739
6740<script id="et-core-common-js" src="https://courses.code-maze.com/wp-content/themes/Extra/core/admin/js/common.js?ver=4.9.7"></script>
vendor: 1 bytes, line 6740
6740
6741<script id="cmz-dark-mode-js" src="https://courses.code-maze.com/wp-content/mu-plugins/cmz-dark-mode/dark-mode.js?ver=1786298694"></script>
vendor: 1 bytes, line 6741
6741
6742<script id="enlighterjs-js" src="https://courses.code-maze.com/wp-content/plugins/enlighter/cache/enlighterjs.min.js?ver=QIGroSBnr%2BtDXuU"></script>
vendor: 1 bytes, line 6742
6742
6743<script id="enlighterjs-js-after"> 6744!function(e,n){if("undefined"!=typeof EnlighterJS){var o={"selectors":{"block":"pre.EnlighterJSRAW","inline":"code.EnlighterJSRAW"},"options":{"indent":4,"ampersandCleanup":true,"linehover":true,"rawcodeDbclick":false,"textOverflow":"scroll","linenumbers":false,"theme":"monokai","language":"csharp","retainCssClasses":false,"collapse":false,"toolbarOuter":"","toolbarTop":"{BTN_RAW}{BTN_COPY}{BTN_WINDOW}{BTN_WEBSITE}","toolbarBottom":""}};(e.EnlighterJSINIT=function(){EnlighterJS.init(o.selectors.block,o.selectors.inline,o.options)})()}else{(n&&(n.error||n.log)||function(){})("Error: EnlighterJS resources not loaded yet!")}}(window,console); 6745//# sourceURL=enlighterjs-js-after 6746</script>
6746 6747 <style id="cmz-course-price-style"> 6748 /* 6749 * COLOURS ARE MEASURED, NOT PICKED. Card surfaces are #fff light and #1f1f22 dark 6750 * (the same two cmz-paddle-cart.php measured its card prices against). Computed 6751 * contrast, all AA or better: now 17.99 / 12.51, was 4.83 / 5.35, label 5.05 / 8.61. 6752 * The greys differ per theme because no single grey clears AA on both surfaces. 6753 */ 6754 .cmz-ppp-price[hidden] { display: none; } 6755 .cmz-ppp-price { 6756 display: flex; 6757 flex-direction: column; 6758 align-items: flex-start; 6759 line-height: 1.2; 6760 } 6761 .cmz-ppp-row { 6762 display: flex; 6763 align-items: baseline; 6764 gap: 10px; 6765 flex-wrap: wrap; 6766 } 6767 /* 35px matches the customizer's own 6768 `.tutor-course-sidebar-card-pricing .woocommerce-Price-amount { font-size:35px }`. 6769 The slot sits OUTSIDE that container, so it cannot inherit the rule and has to 6770 restate it â otherwise swapping in the real price would visibly shrink it. */ 6771 .cmz-ppp-now { font-size: 35px; font-weight: 700; color: #14171a; } 6772 /* 6773 * THE STRIKE IS A DRAWN RULE, not text-decoration â same finding as the card prices: 6774 * `line-through` is positioned from font metrics and this face puts its strike below 6775 * the middle of the digits. A centred pseudo-element crosses them at any size. 6776 */ 6777 .cmz-ppp-was { 6778 position: relative; 6779 font-size: 1.05rem; 6780 text-decoration: none; 6781 color: #6b7280; 6782 } 6783 .cmz-ppp-was::after { 6784 content: ''; 6785 position: absolute; 6786 left: 0; 6787 right: 0; 6788 top: 47%; /* digits have no descender: their ink centre sits above the box centre */ 6789 height: 1px; 6790 background: currentColor; 6791 pointer-events: none; 6792 } 6793 .cmz-ppp-label { margin-top: 6px; font-size: .82rem; font-weight: 600; color: #1e7d60; } 6794 .cmz-ppp-note { margin-top: 2px; font-size: .78rem; color: #6b7280; } 6795 /* 6796 * HIDING TUTOR'S PRICE NEEDS ITS OWN WEAPON. Measured on staging, 2026-08-16: the 6797 * price block carries Tutor's `tutor-d-flex` utility, and tutor.min.css declares 6798 * `.tutor-d-flex { display: flex !important }`. That beats BOTH the `hidden` 6799 * attribute and an inline `style="display:none"` â the first attempt set both and the 6800 * list price stayed on screen next to the discounted one, which is the exact 6801 * two-disagreeing-prices state this file must never produce. 6802 * 6803 * The class is doubled deliberately: `.cmz-ppp-replaced.cmz-ppp-replaced` scores 6804 * (0,2,0) against `.tutor-d-flex`'s (0,1,0), so it wins on SPECIFICITY and not on 6805 * source order. A single class would tie at (0,1,0) and depend on this footer block 6806 * still being parsed after tutor.min.css â true today, and not something to stake the 6807 * price display on. 6808 */ 6809 .cmz-ppp-replaced.cmz-ppp-replaced { display: none !important; } 6810 :root[data-theme="dark"] .cmz-ppp-now { color: #e4e0da; } 6811 :root[data-theme="dark"] .cmz-ppp-was, 6812 :root[data-theme="dark"] .cmz-ppp-note { color: #8b949e; } 6813 :root[data-theme="dark"] .cmz-ppp-label { color: #4fd1a5; } 6814 </style> 6815
6815<script id="cmz-course-price-js"> 6816 (function () { 6817 var CFG = {"pricesUrl":"https:\/\/courses.code-maze.com\/wp-json\/cmz-paddle\/v1\/prices","restNonce":"273543b543"}; 6818 6819 var slots = document.querySelectorAll('.cmz-ppp-price[data-course-id]'); 6820 if (!slots.length) { return; } 6821 6822 /* textContent throughout, never innerHTML with a server string â the labels come from 6823 our own gateway, but this is money markup built client-side and it follows the same 6824 rule the mini-cart follows for course titles. */ 6825 function put(el, text) { el.textContent = String(text == null ? '' : text); return el; } 6826 function span(cls, text) { var e = document.createElement('span'); e.className = cls; return put(e, text); } 6827 6828 /* 6829 * Tutor's own price block, scoped to the card this slot lives in â never a 6830 * document-wide lookup, because the entry box can render twice (the sidebar copy and 6831 * the mobile top copy) and each must swap its own. 6832 */ 6833 function originalPriceBlock(slot) { 6834 var card = slot.closest('.tutor-card-body') || slot.parentElement; 6835 return card ? card.querySelector('.tutor-course-sidebar-card-pricing') : null; 6836 } 6837 6838 var ids = []; 6839 Array.prototype.forEach.call(slots, function (s) { 6840 var id = s.getAttribute('data-course-id'); 6841 if (id && ids.indexOf(id) === -1) { ids.push(id); } 6842 }); 6843 6844 fetch(CFG.pricesUrl + '?courses=' + encodeURIComponent(ids.join(',')), { 6845 credentials: 'same-origin', 6846 headers: { 'Accept': 'application/json', 'X-WP-Nonce': CFG.restNonce } 6847 }) 6848 .then(function (r) { return r.ok ? r.json() : null; }) 6849 .then(function (d) { 6850 if (!d || !d.courses) { return; } 6851 6852 /* No discount for this visitor is the COMMON case, not a failure: most countries 6853 have no PPP tier, and Tutor's list price is already the right answer for them. 6854 Touching the page here would only add a redundant second copy of the same 6855 number. */ 6856 if (!d.discount) { return; } 6857 6858 var byId = {}; 6859 d.courses.forEach(function (c) { byId[String(c.course_id)] = c; }); 6860 6861 Array.prototype.forEach.call(slots, function (slot) { 6862 var row = byId[slot.getAttribute('data-course-id')]; 6863 if (!row || !row.sellable) { return; } 6864 6865 var f = row.formatted || {}; 6866 if (!f.list || !f.price || f.list === f.price) { return; } 6867 6868 var original = originalPriceBlock(slot); 6869 if (!original) { 6870 /* 6871 * We can render the real price but cannot hide the list price beside it. 6872 * Showing both would put two disagreeing numbers on the same card â the 6873 * display-side version of the mistake that produced 215 wrong-priced 6874 * orders. So: change nothing, and leave a machine-readable breadcrumb for 6875 * ppp-price-check.py, which reports it the next morning. 6876 */ 6877 slot.setAttribute('data-cmz-ppp', 'unresolved'); 6878 return; 6879 } 6880 6881 slot.textContent = ''; 6882 var line = document.createElement('div'); 6883 line.className = 'cmz-ppp-row'; 6884 line.appendChild(span('cmz-ppp-was', f.list)); 6885 line.appendChild(span('cmz-ppp-now', f.price)); 6886 slot.appendChild(line); 6887 6888 if (d.discount.label) { 6889 slot.appendChild(span('cmz-ppp-label', d.discount.label)); 6890 } 6891 if (d.estimate) { 6892 /* `estimate` is about TAX ONLY â the discount and the pre-tax figures are 6893 exact â so the note says that and does not hedge the whole number. 6894 Same wording as the mini-cart's caveat. */ 6895 slot.appendChild(span('cmz-ppp-note', 'Taxes are finalised at checkout.')); 6896 } 6897 6898 /* Swap LAST, and only now that a complete replacement is on the page: at no 6899 point does the card show nothing. The class does the hiding â see the 6900 `.cmz-ppp-replaced` note in the stylesheet for why `hidden` and an inline 6901 display cannot. `hidden` is set as well, purely so assistive tech and the 6902 external check agree with what is on screen. */ 6903 original.classList.add('cmz-ppp-replaced'); 6904 original.setAttribute('hidden', 'hidden'); 6905 slot.setAttribute('data-cmz-ppp', 'applied'); 6906 slot.removeAttribute('hidden'); 6907 }); 6908 }) 6909 .catch(function () { /* no price is Tutor's price, never a broken page */ }); 6910 })(); 6911 </script>
6911 6912
6912<script id="cmz-course-intro-video"> 6913document.addEventListener('ended', function (e) { 6914 var v = e.target; 6915 if (v && v.tagName === 'VIDEO' && v.closest('.tutor-video-player')) { 6916 v.currentTime = 0; 6917 } 6918}, true); 6919</script>
6919 6920
6920<script> 6921 (function () { 6922 function tag(el) { 6923 el.setAttribute('translate', 'no'); 6924 el.classList.add('notranslate'); 6925 } 6926 // Narrow to whatever wraps your post body; falls back to <body> 6927 var root = document.querySelector('.tutor-course-topic-single-body') || document.body; 6928 6929 document.querySelectorAll('.enlighter-default').forEach(tag); 6930 6931 var obs = new MutationObserver(function (mutations) { 6932 for (var m of mutations) { 6933 for (var node of m.addedNodes) { 6934 if (node.nodeType !== 1) continue; 6935 if (node.classList.contains('enlighter-default')) tag(node); 6936 node.querySelectorAll('.enlighter-default').forEach(tag); 6937 } 6938 } 6939 }); 6940 obs.observe(root, { childList: true, subtree: true }); 6941 6942 // Enlighter is done shortly after load; stop watching afterward. 6943 window.addEventListener('load', function () { 6944 setTimeout(function () { obs.disconnect(); }, 3000); 6945 }); 6946 })(); 6947 </script>
6947 6948
6948<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"15d44baa35234e0b9b1793aaf2be1974","r":1,"spa":2}' crossorigin="anonymous"></script>
6948 6949</body> 6950</html> 6951 6952<!-- Performance optimized by Redis Object Cache. Learn more: https://wprediscache.com -->
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.