From 32ea766bb922df58043acb017bafe36758e0dde0 Mon Sep 17 00:00:00 2001 From: LLaverty Date: Wed, 3 Sep 2025 16:10:22 +0100 Subject: [PATCH 01/35] spelling: UrlProviderCollecton -> UrlProviderCollection --- .../reference/routing/request-pipeline/outbound-pipeline.md | 2 +- .../reference/routing/request-pipeline/outbound-pipeline.md | 2 +- .../reference/routing/request-pipeline/outbound-pipeline.md | 2 +- .../reference/routing/request-pipeline/outbound-pipeline.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/10/umbraco-cms/reference/routing/request-pipeline/outbound-pipeline.md b/10/umbraco-cms/reference/routing/request-pipeline/outbound-pipeline.md index 4588fe7d2e8..abc88d6472a 100644 --- a/10/umbraco-cms/reference/routing/request-pipeline/outbound-pipeline.md +++ b/10/umbraco-cms/reference/routing/request-pipeline/outbound-pipeline.md @@ -311,7 +311,7 @@ namespace RoutingDocs.UrlProviders The GetOtherUrls method is only used in the Umbraco Backoffice to provide a list to editors of other Urls which also map to the node. -For example, let's consider a convention-led `umbracoUrlAlias` property that enables editors to specify a comma delimited list of alternative urls for the node. It has a corresponding `AliasUrlProvider` registered in the `UrlProviderCollecton` to display this list to the Editor in the backoffice Info Content app for a node. +For example, let's consider a convention-led `umbracoUrlAlias` property that enables editors to specify a comma delimited list of alternative urls for the node. It has a corresponding `AliasUrlProvider` registered in the `UrlProviderCollection` to display this list to the Editor in the backoffice Info Content app for a node. ### Url Provider Mode diff --git a/13/umbraco-cms/reference/routing/request-pipeline/outbound-pipeline.md b/13/umbraco-cms/reference/routing/request-pipeline/outbound-pipeline.md index 5514abd162c..daa5821cd3e 100644 --- a/13/umbraco-cms/reference/routing/request-pipeline/outbound-pipeline.md +++ b/13/umbraco-cms/reference/routing/request-pipeline/outbound-pipeline.md @@ -313,7 +313,7 @@ If you want to have multiple URL providers, you can add them one after the other The GetOtherUrls method is only used in the Umbraco Backoffice to provide a list to editors of other Urls which also map to the node. -For example, let's consider a convention-led `umbracoUrlAlias` property that enables editors to specify a comma-delimited list of alternative URLs for the node. It has a corresponding `AliasUrlProvider` registered in the `UrlProviderCollecton` to display this list to the Editor in the backoffice Info Content app for a node. +For example, let's consider a convention-led `umbracoUrlAlias` property that enables editors to specify a comma-delimited list of alternative URLs for the node. It has a corresponding `AliasUrlProvider` registered in the `UrlProviderCollection` to display this list to the Editor in the backoffice Info Content app for a node. ### Url Provider Mode diff --git a/15/umbraco-cms/reference/routing/request-pipeline/outbound-pipeline.md b/15/umbraco-cms/reference/routing/request-pipeline/outbound-pipeline.md index de18159a7b4..d256a0f42c0 100644 --- a/15/umbraco-cms/reference/routing/request-pipeline/outbound-pipeline.md +++ b/15/umbraco-cms/reference/routing/request-pipeline/outbound-pipeline.md @@ -322,7 +322,7 @@ If you want to have multiple URL providers, you can add them one after the other The GetOtherUrls method is only used in the Umbraco Backoffice to provide a list to editors of other Urls which also map to the node. -For example, let's consider a convention-led `umbracoUrlAlias` property that enables editors to specify a comma-delimited list of alternative URLs for the node. It has a corresponding `AliasUrlProvider` registered in the `UrlProviderCollecton` to display this list to the Editor in the backoffice Info Content app for a node. +For example, let's consider a convention-led `umbracoUrlAlias` property that enables editors to specify a comma-delimited list of alternative URLs for the node. It has a corresponding `AliasUrlProvider` registered in the `UrlProviderCollection` to display this list to the Editor in the backoffice Info Content app for a node. ### Url Provider Mode diff --git a/16/umbraco-cms/reference/routing/request-pipeline/outbound-pipeline.md b/16/umbraco-cms/reference/routing/request-pipeline/outbound-pipeline.md index 6c05f2166e5..90250cef436 100644 --- a/16/umbraco-cms/reference/routing/request-pipeline/outbound-pipeline.md +++ b/16/umbraco-cms/reference/routing/request-pipeline/outbound-pipeline.md @@ -315,7 +315,7 @@ If you want to have multiple URL providers, you can add them one after the other The GetOtherUrls method is only used in the Umbraco Backoffice to provide a list to editors of other Urls which also map to the node. -For example, let's consider a convention-led `umbracoUrlAlias` property that enables editors to specify a comma-delimited list of alternative URLs for the node. It has a corresponding `AliasUrlProvider` registered in the `UrlProviderCollecton` to display this list to the Editor in the backoffice Info Content app for a node. +For example, let's consider a convention-led `umbracoUrlAlias` property that enables editors to specify a comma-delimited list of alternative URLs for the node. It has a corresponding `AliasUrlProvider` registered in the `UrlProviderCollection` to display this list to the Editor in the backoffice Info Content app for a node. ### Url Provider Mode From 6f07b564b87c1e963aeae3fb1adc67a7bf780857 Mon Sep 17 00:00:00 2001 From: LLaverty Date: Wed, 3 Sep 2025 16:11:44 +0100 Subject: [PATCH 02/35] spelling: infite -> infinite --- .../request-pipeline/published-content-request-preparation.md | 2 +- .../request-pipeline/published-content-request-preparation.md | 2 +- .../request-pipeline/published-content-request-preparation.md | 2 +- .../request-pipeline/published-content-request-preparation.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/10/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md b/10/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md index 70a75b11144..2288ada3193 100644 --- a/10/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md +++ b/10/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md @@ -61,7 +61,7 @@ When finding published content the `PublishedRouter` will first check if the `Pu You can also implement your own content finders and last chance finder, for more information, see [IContentFinder](icontentfinder.md) -The `PublishedRouter` will also follow any internal redirects there might be, it is however limited, as to not spiral out of control if there is an infite loop of redirects. +The `PublishedRouter` will also follow any internal redirects there might be, it is however limited, as to not spiral out of control if there is an infinite loop of redirects. ### Find template diff --git a/13/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md b/13/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md index 71d07206c12..d1f31faa391 100644 --- a/13/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md +++ b/13/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md @@ -60,7 +60,7 @@ When finding published content the `PublishedRouter` will first check if the `Pu You can also implement your own content finders and last chance finder, for more information, see [IContentFinder](icontentfinder.md) -The `PublishedRouter` will also follow any internal redirects there might be, it is however limited, as to not spiral out of control if there is an infite loop of redirects. +The `PublishedRouter` will also follow any internal redirects there might be, it is however limited, as to not spiral out of control if there is an infinite loop of redirects. ### Find template diff --git a/15/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md b/15/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md index 79d8667f9b1..d91d909c8a4 100644 --- a/15/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md +++ b/15/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md @@ -60,7 +60,7 @@ When finding published content the `PublishedRouter` will first check if the `Pu You can also implement your own content finders and last chance finder, for more information, see [IContentFinder](icontentfinder.md) -The `PublishedRouter` will also follow any internal redirects there might be, it is however limited, as to not spiral out of control if there is an infite loop of redirects. +The `PublishedRouter` will also follow any internal redirects there might be, it is however limited, as to not spiral out of control if there is an infinite loop of redirects. ### Find template diff --git a/16/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md b/16/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md index 79d8667f9b1..d91d909c8a4 100644 --- a/16/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md +++ b/16/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md @@ -60,7 +60,7 @@ When finding published content the `PublishedRouter` will first check if the `Pu You can also implement your own content finders and last chance finder, for more information, see [IContentFinder](icontentfinder.md) -The `PublishedRouter` will also follow any internal redirects there might be, it is however limited, as to not spiral out of control if there is an infite loop of redirects. +The `PublishedRouter` will also follow any internal redirects there might be, it is however limited, as to not spiral out of control if there is an infinite loop of redirects. ### Find template From e1bd877b740ec4dbcdd72369bc465926a81dd144 Mon Sep 17 00:00:00 2001 From: LLaverty Date: Wed, 3 Sep 2025 16:12:54 +0100 Subject: [PATCH 03/35] spelling: filese -> files --- 10/umbraco-cms/reference/routing/surface-controllers/README.md | 2 +- 13/umbraco-cms/reference/routing/surface-controllers/README.md | 2 +- 15/umbraco-cms/reference/routing/surface-controllers/README.md | 2 +- 16/umbraco-cms/reference/routing/surface-controllers/README.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/10/umbraco-cms/reference/routing/surface-controllers/README.md b/10/umbraco-cms/reference/routing/surface-controllers/README.md index e326a91ca5f..3c8e4e8a1ca 100644 --- a/10/umbraco-cms/reference/routing/surface-controllers/README.md +++ b/10/umbraco-cms/reference/routing/surface-controllers/README.md @@ -141,7 +141,7 @@ Since they get routed via an MVC area, your views should be placed in the follow * `~/App_Plugins/{areaname}/Views/{controllername}/` * `~/App_Plugins/{areaname}/Views/Shared/` -Since you're only able to place static filese within your package's `App_Plugin` folder, it's highly recommend to ensure that the area you use is the same as your package name, since that allows your views to be found. +Since you're only able to place static files within your package's `App_Plugin` folder, it's highly recommend to ensure that the area you use is the same as your package name, since that allows your views to be found. The controller itself should not be placed in the App_Plugins folder, the App_Plugins folder is for static files only, compiled files like the controller will be included in the dlls used by the nuget package. diff --git a/13/umbraco-cms/reference/routing/surface-controllers/README.md b/13/umbraco-cms/reference/routing/surface-controllers/README.md index 0479149cbcc..8f95444335e 100644 --- a/13/umbraco-cms/reference/routing/surface-controllers/README.md +++ b/13/umbraco-cms/reference/routing/surface-controllers/README.md @@ -136,7 +136,7 @@ Since they get routed via an MVC area, your views should be placed in the follow * `~/App_Plugins/{areaname}/Views/{controllername}/` * `~/App_Plugins/{areaname}/Views/Shared/` -Since you're only able to place static filese within your package's `App_Plugin` folder, it's highly recommend to ensure that the area you use is the same as your package name, since that allows your views to be found. +Since you're only able to place static files within your package's `App_Plugin` folder, it's highly recommend to ensure that the area you use is the same as your package name, since that allows your views to be found. The controller itself should not be placed in the App_Plugins folder, the App_Plugins folder is for static files only, compiled files like the controller will be included in the dlls used by the nuget package. diff --git a/15/umbraco-cms/reference/routing/surface-controllers/README.md b/15/umbraco-cms/reference/routing/surface-controllers/README.md index 0479149cbcc..8f95444335e 100644 --- a/15/umbraco-cms/reference/routing/surface-controllers/README.md +++ b/15/umbraco-cms/reference/routing/surface-controllers/README.md @@ -136,7 +136,7 @@ Since they get routed via an MVC area, your views should be placed in the follow * `~/App_Plugins/{areaname}/Views/{controllername}/` * `~/App_Plugins/{areaname}/Views/Shared/` -Since you're only able to place static filese within your package's `App_Plugin` folder, it's highly recommend to ensure that the area you use is the same as your package name, since that allows your views to be found. +Since you're only able to place static files within your package's `App_Plugin` folder, it's highly recommend to ensure that the area you use is the same as your package name, since that allows your views to be found. The controller itself should not be placed in the App_Plugins folder, the App_Plugins folder is for static files only, compiled files like the controller will be included in the dlls used by the nuget package. diff --git a/16/umbraco-cms/reference/routing/surface-controllers/README.md b/16/umbraco-cms/reference/routing/surface-controllers/README.md index 0479149cbcc..8f95444335e 100644 --- a/16/umbraco-cms/reference/routing/surface-controllers/README.md +++ b/16/umbraco-cms/reference/routing/surface-controllers/README.md @@ -136,7 +136,7 @@ Since they get routed via an MVC area, your views should be placed in the follow * `~/App_Plugins/{areaname}/Views/{controllername}/` * `~/App_Plugins/{areaname}/Views/Shared/` -Since you're only able to place static filese within your package's `App_Plugin` folder, it's highly recommend to ensure that the area you use is the same as your package name, since that allows your views to be found. +Since you're only able to place static files within your package's `App_Plugin` folder, it's highly recommend to ensure that the area you use is the same as your package name, since that allows your views to be found. The controller itself should not be placed in the App_Plugins folder, the App_Plugins folder is for static files only, compiled files like the controller will be included in the dlls used by the nuget package. From b058597fd65f8d864da9faf03532d85ebb01644d Mon Sep 17 00:00:00 2001 From: LLaverty Date: Wed, 3 Sep 2025 16:14:05 +0100 Subject: [PATCH 04/35] spelling: WithMiddelware -> WithMiddleware --- 13/umbraco-cms/reference/routing/custom-middleware.md | 2 +- 15/umbraco-cms/reference/routing/custom-middleware.md | 2 +- 16/umbraco-cms/reference/routing/custom-middleware.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/13/umbraco-cms/reference/routing/custom-middleware.md b/13/umbraco-cms/reference/routing/custom-middleware.md index 0a6e4b4205d..9f5c7607bfb 100644 --- a/13/umbraco-cms/reference/routing/custom-middleware.md +++ b/13/umbraco-cms/reference/routing/custom-middleware.md @@ -22,7 +22,7 @@ The addition of the `PostRouting` callback is to allow correctly configuring the * `WithCustomMiddleware()` is a method that can be used in Umbraco for adding custom middleware. This includes some specific customizable instructions that run in the request processing pipeline. {% hint style="warning" %} -Using `WithCustomMiddleware()` instead of `WithMiddelware()` should only be used as a last resort. This is because Umbraco can break if you forget to add middleware or add them in the wrong order. +Using `WithCustomMiddleware()` instead of `WithMiddleware()` should only be used as a last resort. This is because Umbraco can break if you forget to add middleware or add them in the wrong order. {% endhint %} ## Configuring the Cross-Origin Resource Sharing (CORS) middleware diff --git a/15/umbraco-cms/reference/routing/custom-middleware.md b/15/umbraco-cms/reference/routing/custom-middleware.md index 0a6e4b4205d..9f5c7607bfb 100644 --- a/15/umbraco-cms/reference/routing/custom-middleware.md +++ b/15/umbraco-cms/reference/routing/custom-middleware.md @@ -22,7 +22,7 @@ The addition of the `PostRouting` callback is to allow correctly configuring the * `WithCustomMiddleware()` is a method that can be used in Umbraco for adding custom middleware. This includes some specific customizable instructions that run in the request processing pipeline. {% hint style="warning" %} -Using `WithCustomMiddleware()` instead of `WithMiddelware()` should only be used as a last resort. This is because Umbraco can break if you forget to add middleware or add them in the wrong order. +Using `WithCustomMiddleware()` instead of `WithMiddleware()` should only be used as a last resort. This is because Umbraco can break if you forget to add middleware or add them in the wrong order. {% endhint %} ## Configuring the Cross-Origin Resource Sharing (CORS) middleware diff --git a/16/umbraco-cms/reference/routing/custom-middleware.md b/16/umbraco-cms/reference/routing/custom-middleware.md index 0a6e4b4205d..9f5c7607bfb 100644 --- a/16/umbraco-cms/reference/routing/custom-middleware.md +++ b/16/umbraco-cms/reference/routing/custom-middleware.md @@ -22,7 +22,7 @@ The addition of the `PostRouting` callback is to allow correctly configuring the * `WithCustomMiddleware()` is a method that can be used in Umbraco for adding custom middleware. This includes some specific customizable instructions that run in the request processing pipeline. {% hint style="warning" %} -Using `WithCustomMiddleware()` instead of `WithMiddelware()` should only be used as a last resort. This is because Umbraco can break if you forget to add middleware or add them in the wrong order. +Using `WithCustomMiddleware()` instead of `WithMiddleware()` should only be used as a last resort. This is because Umbraco can break if you forget to add middleware or add them in the wrong order. {% endhint %} ## Configuring the Cross-Origin Resource Sharing (CORS) middleware From 5d4ff9300eee9298eda24a67a5e89cef028feed0 Mon Sep 17 00:00:00 2001 From: LLaverty Date: Wed, 3 Sep 2025 16:14:36 +0100 Subject: [PATCH 05/35] spelling: wich -> which --- 10/umbraco-cms/reference/routing/custom-routes.md | 2 +- 13/umbraco-cms/reference/routing/custom-routes.md | 2 +- 15/umbraco-cms/reference/routing/custom-routes.md | 2 +- 16/umbraco-cms/reference/routing/custom-routes.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/10/umbraco-cms/reference/routing/custom-routes.md b/10/umbraco-cms/reference/routing/custom-routes.md index 62462bf77c9..bb7040b51ae 100644 --- a/10/umbraco-cms/reference/routing/custom-routes.md +++ b/10/umbraco-cms/reference/routing/custom-routes.md @@ -135,7 +135,7 @@ public IActionResult Product(string id) } ``` -This method is a bit more interesting, here we get some extra data from a different source, in this case a `DbContext`, but this can be anything you want, using the id we get from the route values. We use this extra data to create a custom model, wich includes the available stores, which we then render the view with. +This method is a bit more interesting, here we get some extra data from a different source, in this case a `DbContext`, but this can be anything you want, using the id we get from the route values. We use this extra data to create a custom model, which includes the available stores, which we then render the view with. It's important to note that this custom model must implement `IPublishedContent`, to do this we inherit from the `ContentModel` class, in this case our model looks like this: diff --git a/13/umbraco-cms/reference/routing/custom-routes.md b/13/umbraco-cms/reference/routing/custom-routes.md index 9f2350e35e2..e310bdac1b7 100644 --- a/13/umbraco-cms/reference/routing/custom-routes.md +++ b/13/umbraco-cms/reference/routing/custom-routes.md @@ -121,7 +121,7 @@ public IActionResult Product(string id) } ``` -This method is a bit more interesting, here we get some extra data from a different source, in this case a `DbContext`, but this can be anything you want, using the id we get from the route values. We use this extra data to create a custom model, wich includes the available stores, which we then render the view with. +This method is a bit more interesting, here we get some extra data from a different source, in this case a `DbContext`, but this can be anything you want, using the id we get from the route values. We use this extra data to create a custom model, which includes the available stores, which we then render the view with. It's important to note that this custom model must implement `IPublishedContent`, to do this we inherit from the `ContentModel` class, in this case our model looks like this: diff --git a/15/umbraco-cms/reference/routing/custom-routes.md b/15/umbraco-cms/reference/routing/custom-routes.md index 22e717586d2..4c8905d3fc7 100644 --- a/15/umbraco-cms/reference/routing/custom-routes.md +++ b/15/umbraco-cms/reference/routing/custom-routes.md @@ -120,7 +120,7 @@ public IActionResult Product(string id) } ``` -This method is a bit more interesting, here we get some extra data from a different source, in this case a `DbContext`, but this can be anything you want, using the id we get from the route values. We use this extra data to create a custom model, wich includes the available stores, which we then render the view with. +This method is a bit more interesting, here we get some extra data from a different source, in this case a `DbContext`, but this can be anything you want, using the id we get from the route values. We use this extra data to create a custom model, which includes the available stores, which we then render the view with. It's important to note that this custom model must implement `IPublishedContent`, to do this we inherit from the `ContentModel` class, in this case our model looks like this: diff --git a/16/umbraco-cms/reference/routing/custom-routes.md b/16/umbraco-cms/reference/routing/custom-routes.md index 22e717586d2..4c8905d3fc7 100644 --- a/16/umbraco-cms/reference/routing/custom-routes.md +++ b/16/umbraco-cms/reference/routing/custom-routes.md @@ -120,7 +120,7 @@ public IActionResult Product(string id) } ``` -This method is a bit more interesting, here we get some extra data from a different source, in this case a `DbContext`, but this can be anything you want, using the id we get from the route values. We use this extra data to create a custom model, wich includes the available stores, which we then render the view with. +This method is a bit more interesting, here we get some extra data from a different source, in this case a `DbContext`, but this can be anything you want, using the id we get from the route values. We use this extra data to create a custom model, which includes the available stores, which we then render the view with. It's important to note that this custom model must implement `IPublishedContent`, to do this we inherit from the `ContentModel` class, in this case our model looks like this: From ab4fc4568fa2c980a644db9a9c27e36b7b53af53 Mon Sep 17 00:00:00 2001 From: LLaverty Date: Wed, 3 Sep 2025 16:14:59 +0100 Subject: [PATCH 06/35] spelling: propperty -> property --- 10/umbraco-cms/reference/routing/custom-routes.md | 2 +- 13/umbraco-cms/reference/routing/custom-routes.md | 2 +- 15/umbraco-cms/reference/routing/custom-routes.md | 2 +- 16/umbraco-cms/reference/routing/custom-routes.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/10/umbraco-cms/reference/routing/custom-routes.md b/10/umbraco-cms/reference/routing/custom-routes.md index bb7040b51ae..b0418945eb2 100644 --- a/10/umbraco-cms/reference/routing/custom-routes.md +++ b/10/umbraco-cms/reference/routing/custom-routes.md @@ -228,7 +228,7 @@ public IPublishedContent FindContent(ActionExecutingContext actionExecutingConte } ``` -We start off by getting our product root using the `UmbracoContext` to get it based off its id. Next we need to figure out what action is being requested, to do this we cast the `actionExecutingContext.ActionDescriptor` to a `ControllerActionDescriptor` and use its `ActionName` propperty. If the action name is index, we just return the product root, but if it's product, we try to get the SKU from the route value `id`, and try to find the child node which matches the SKU and return that. +We start off by getting our product root using the `UmbracoContext` to get it based off its id. Next we need to figure out what action is being requested, to do this we cast the `actionExecutingContext.ActionDescriptor` to a `ControllerActionDescriptor` and use its `ActionName` property. If the action name is index, we just return the product root, but if it's product, we try to get the SKU from the route value `id`, and try to find the child node which matches the SKU and return that. Now there's only one last thing to do, we need to register our shop controller, if you're creating a controller for your own site you can do it in the `Configure` method of `Startup.cs` like so: diff --git a/13/umbraco-cms/reference/routing/custom-routes.md b/13/umbraco-cms/reference/routing/custom-routes.md index e310bdac1b7..332233a439c 100644 --- a/13/umbraco-cms/reference/routing/custom-routes.md +++ b/13/umbraco-cms/reference/routing/custom-routes.md @@ -214,7 +214,7 @@ public IPublishedContent FindContent(ActionExecutingContext actionExecutingConte } ``` -We start off by getting our product root using the `UmbracoContext` to get it based off its id. Next we need to figure out what action is being requested. To do this we cast the `actionExecutingContext.ActionDescriptor` to a `ControllerActionDescriptor` and use its `ActionName` propperty. If the action name is index, we return the product root. If it's product, we try to get the SKU from the route value `id`. Then we try to find the child node which matches the SKU and return that. +We start off by getting our product root using the `UmbracoContext` to get it based off its id. Next we need to figure out what action is being requested. To do this we cast the `actionExecutingContext.ActionDescriptor` to a `ControllerActionDescriptor` and use its `ActionName` property. If the action name is index, we return the product root. If it's product, we try to get the SKU from the route value `id`. Then we try to find the child node which matches the SKU and return that. There's only one last thing to do. We need to register our shop controller. If you're creating a controller for your own site you can do it in the `Program.cs` like so: diff --git a/15/umbraco-cms/reference/routing/custom-routes.md b/15/umbraco-cms/reference/routing/custom-routes.md index 4c8905d3fc7..1ee23579700 100644 --- a/15/umbraco-cms/reference/routing/custom-routes.md +++ b/15/umbraco-cms/reference/routing/custom-routes.md @@ -213,7 +213,7 @@ public IPublishedContent FindContent(ActionExecutingContext actionExecutingConte } ``` -We start off by getting our product root using the `UmbracoContext` to get it based off its id. Next we need to figure out what action is being requested. To do this we cast the `actionExecutingContext.ActionDescriptor` to a `ControllerActionDescriptor` and use its `ActionName` propperty. If the action name is index, we return the product root. If it's product, we try to get the SKU from the route value `id`. Then we try to find the child node which matches the SKU and return that. +We start off by getting our product root using the `UmbracoContext` to get it based off its id. Next we need to figure out what action is being requested. To do this we cast the `actionExecutingContext.ActionDescriptor` to a `ControllerActionDescriptor` and use its `ActionName` property. If the action name is index, we return the product root. If it's product, we try to get the SKU from the route value `id`. Then we try to find the child node which matches the SKU and return that. There's only one last thing to do. We need to register our shop controller. If you're creating a controller for your own site you can do it in the `Program.cs` like so: diff --git a/16/umbraco-cms/reference/routing/custom-routes.md b/16/umbraco-cms/reference/routing/custom-routes.md index 4c8905d3fc7..1ee23579700 100644 --- a/16/umbraco-cms/reference/routing/custom-routes.md +++ b/16/umbraco-cms/reference/routing/custom-routes.md @@ -213,7 +213,7 @@ public IPublishedContent FindContent(ActionExecutingContext actionExecutingConte } ``` -We start off by getting our product root using the `UmbracoContext` to get it based off its id. Next we need to figure out what action is being requested. To do this we cast the `actionExecutingContext.ActionDescriptor` to a `ControllerActionDescriptor` and use its `ActionName` propperty. If the action name is index, we return the product root. If it's product, we try to get the SKU from the route value `id`. Then we try to find the child node which matches the SKU and return that. +We start off by getting our product root using the `UmbracoContext` to get it based off its id. Next we need to figure out what action is being requested. To do this we cast the `actionExecutingContext.ActionDescriptor` to a `ControllerActionDescriptor` and use its `ActionName` property. If the action name is index, we return the product root. If it's product, we try to get the SKU from the route value `id`. Then we try to find the child node which matches the SKU and return that. There's only one last thing to do. We need to register our shop controller. If you're creating a controller for your own site you can do it in the `Program.cs` like so: From 17291d002245fd81af48438a016ccaa4e2aab2ab Mon Sep 17 00:00:00 2001 From: LLaverty Date: Wed, 3 Sep 2025 16:15:30 +0100 Subject: [PATCH 07/35] spelling: abouth -> about --- 10/umbraco-cms/reference/routing/custom-routes.md | 2 +- 13/umbraco-cms/reference/routing/custom-routes.md | 2 +- 15/umbraco-cms/reference/routing/custom-routes.md | 2 +- 16/umbraco-cms/reference/routing/custom-routes.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/10/umbraco-cms/reference/routing/custom-routes.md b/10/umbraco-cms/reference/routing/custom-routes.md index b0418945eb2..a6b1f522f19 100644 --- a/10/umbraco-cms/reference/routing/custom-routes.md +++ b/10/umbraco-cms/reference/routing/custom-routes.md @@ -260,7 +260,7 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) } ``` -As you can see there's nothing Umbraco specific abouth the controller routing, it's using the default `MapController` route of the `EndpointRouteBuilder`, we give our mapping a name, a pattern for the controller and some default values, so if no action is specified it will default to `Index`. +As you can see there's nothing Umbraco specific about the controller routing, it's using the default `MapController` route of the `EndpointRouteBuilder`, we give our mapping a name, a pattern for the controller and some default values, so if no action is specified it will default to `Index`. If you're creating a package you won't have access to the `Startup.cs`, so instead you can use a composer with an `UmbracoPipelineFilter` like so: diff --git a/13/umbraco-cms/reference/routing/custom-routes.md b/13/umbraco-cms/reference/routing/custom-routes.md index 332233a439c..e02c3b2b337 100644 --- a/13/umbraco-cms/reference/routing/custom-routes.md +++ b/13/umbraco-cms/reference/routing/custom-routes.md @@ -238,7 +238,7 @@ app.UseUmbraco() }); ``` -As you can see there's nothing Umbraco specific abouth the controller routing, it's using the default `MapController` route of the `EndpointRouteBuilder`, we give our mapping a name, a pattern for the controller and some default values, so if no action is specified it will default to `Index`. +As you can see there's nothing Umbraco specific about the controller routing, it's using the default `MapController` route of the `EndpointRouteBuilder`, we give our mapping a name, a pattern for the controller and some default values, so if no action is specified it will default to `Index`. If you're creating a package you won't have access to the `Program.cs`, so instead you can use a composer with an `UmbracoPipelineFilter` like so: diff --git a/15/umbraco-cms/reference/routing/custom-routes.md b/15/umbraco-cms/reference/routing/custom-routes.md index 1ee23579700..b7d9dc88364 100644 --- a/15/umbraco-cms/reference/routing/custom-routes.md +++ b/15/umbraco-cms/reference/routing/custom-routes.md @@ -236,7 +236,7 @@ app.UseUmbraco() }); ``` -As you can see there's nothing Umbraco specific abouth the controller routing, it's using the default `MapController` route of the `EndpointRouteBuilder`, we give our mapping a name, a pattern for the controller and some default values, so if no action is specified it will default to `Index`. +As you can see there's nothing Umbraco specific about the controller routing, it's using the default `MapController` route of the `EndpointRouteBuilder`, we give our mapping a name, a pattern for the controller and some default values, so if no action is specified it will default to `Index`. If you're creating a package you won't have access to the `Program.cs`, so instead you can use a composer with an `UmbracoPipelineFilter` like so: diff --git a/16/umbraco-cms/reference/routing/custom-routes.md b/16/umbraco-cms/reference/routing/custom-routes.md index 1ee23579700..b7d9dc88364 100644 --- a/16/umbraco-cms/reference/routing/custom-routes.md +++ b/16/umbraco-cms/reference/routing/custom-routes.md @@ -236,7 +236,7 @@ app.UseUmbraco() }); ``` -As you can see there's nothing Umbraco specific abouth the controller routing, it's using the default `MapController` route of the `EndpointRouteBuilder`, we give our mapping a name, a pattern for the controller and some default values, so if no action is specified it will default to `Index`. +As you can see there's nothing Umbraco specific about the controller routing, it's using the default `MapController` route of the `EndpointRouteBuilder`, we give our mapping a name, a pattern for the controller and some default values, so if no action is specified it will default to `Index`. If you're creating a package you won't have access to the `Program.cs`, so instead you can use a composer with an `UmbracoPipelineFilter` like so: From 688ebb9dc0f3f1883482a81f2703e890801ce116 Mon Sep 17 00:00:00 2001 From: LLaverty Date: Wed, 3 Sep 2025 16:16:20 +0100 Subject: [PATCH 08/35] spelling: remove `zspo` --- 13/umbraco-cms/reference/routing/custom-routes.md | 2 +- 15/umbraco-cms/reference/routing/custom-routes.md | 2 +- 16/umbraco-cms/reference/routing/custom-routes.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/13/umbraco-cms/reference/routing/custom-routes.md b/13/umbraco-cms/reference/routing/custom-routes.md index e02c3b2b337..a76c1324817 100644 --- a/13/umbraco-cms/reference/routing/custom-routes.md +++ b/13/umbraco-cms/reference/routing/custom-routes.md @@ -491,4 +491,4 @@ public class ShopControllerComposer : IComposer The `Compose` method of our composer is much the same as any other normal routing. The one difference is that we call `ForUmbracoPage` on the `MapControllerRoute` where we pass in our `FindContent` method. The `FindContent` method is almost the same as it was in the controller in the `IVirtualPageController` example, with one important difference. Since we can no longer inject our required service into the constructor, we instead request them using `actionExecutingContext.HttpContext.RequestServices.GetRequiredService`. You should _not_ save the `HttpContext` or the `IServiceProvider` you get from the `actionExecutingContext` to a field or property on the class. The reason for this is that they will be specific to each request. -With this we have a custom routed controller within the Umbraco pipeline. If you navigate to `/shop` or `/shop/product/` you will see the controllers actions being called with the content found in `FindContent`.zspo +With this we have a custom routed controller within the Umbraco pipeline. If you navigate to `/shop` or `/shop/product/` you will see the controllers actions being called with the content found in `FindContent`. diff --git a/15/umbraco-cms/reference/routing/custom-routes.md b/15/umbraco-cms/reference/routing/custom-routes.md index b7d9dc88364..314e8eab521 100644 --- a/15/umbraco-cms/reference/routing/custom-routes.md +++ b/15/umbraco-cms/reference/routing/custom-routes.md @@ -488,4 +488,4 @@ public class ShopControllerComposer : IComposer The `Compose` method of our composer is much the same as any other normal routing. The one difference is that we call `ForUmbracoPage` on the `MapControllerRoute` where we pass in our `FindContent` method. The `FindContent` method is almost the same as it was in the controller in the `IVirtualPageController` example, with one important difference. Since we can no longer inject our required service into the constructor, we instead request them using `actionExecutingContext.HttpContext.RequestServices.GetRequiredService`. You should _not_ save the `HttpContext` or the `IServiceProvider` you get from the `actionExecutingContext` to a field or property on the class. The reason for this is that they will be specific to each request. -With this we have a custom routed controller within the Umbraco pipeline. If you navigate to `/shop` or `/shop/product/` you will see the controllers actions being called with the content found in `FindContent`.zspo +With this we have a custom routed controller within the Umbraco pipeline. If you navigate to `/shop` or `/shop/product/` you will see the controllers actions being called with the content found in `FindContent`. diff --git a/16/umbraco-cms/reference/routing/custom-routes.md b/16/umbraco-cms/reference/routing/custom-routes.md index b7d9dc88364..314e8eab521 100644 --- a/16/umbraco-cms/reference/routing/custom-routes.md +++ b/16/umbraco-cms/reference/routing/custom-routes.md @@ -488,4 +488,4 @@ public class ShopControllerComposer : IComposer The `Compose` method of our composer is much the same as any other normal routing. The one difference is that we call `ForUmbracoPage` on the `MapControllerRoute` where we pass in our `FindContent` method. The `FindContent` method is almost the same as it was in the controller in the `IVirtualPageController` example, with one important difference. Since we can no longer inject our required service into the constructor, we instead request them using `actionExecutingContext.HttpContext.RequestServices.GetRequiredService`. You should _not_ save the `HttpContext` or the `IServiceProvider` you get from the `actionExecutingContext` to a field or property on the class. The reason for this is that they will be specific to each request. -With this we have a custom routed controller within the Umbraco pipeline. If you navigate to `/shop` or `/shop/product/` you will see the controllers actions being called with the content found in `FindContent`.zspo +With this we have a custom routed controller within the Umbraco pipeline. If you navigate to `/shop` or `/shop/product/` you will see the controllers actions being called with the content found in `FindContent`. From 785a75bd6447c782fbcb15732ad2a308c7eecea5 Mon Sep 17 00:00:00 2001 From: LLaverty Date: Wed, 3 Sep 2025 16:18:12 +0100 Subject: [PATCH 09/35] spelling: extention -> extension --- .../extending/filesystemproviders/azure-blob-storage.md | 2 +- 13/umbraco-cms/reference/security/external-login-providers.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/10/umbraco-cms/extending/filesystemproviders/azure-blob-storage.md b/10/umbraco-cms/extending/filesystemproviders/azure-blob-storage.md index 227a3df0d53..92b5a3a7250 100644 --- a/10/umbraco-cms/extending/filesystemproviders/azure-blob-storage.md +++ b/10/umbraco-cms/extending/filesystemproviders/azure-blob-storage.md @@ -77,7 +77,7 @@ You can get your connection string from your Azure Portal under "Access Keys". You're almost there. The last step is to set up the required services and middleware. This may sound daunting, but thankfully there are extension methods that do all this for you. All you need to do is invoke them in the `ConfigureServices` and `Configure` methods in the `startup.cs` file. -Invoke the `.AddAzureBlobMediaFileSystem()` extention method in the `ConfigureServices` method: +Invoke the `.AddAzureBlobMediaFileSystem()` extension method in the `ConfigureServices` method: ```C# public void ConfigureServices(IServiceCollection services) diff --git a/13/umbraco-cms/reference/security/external-login-providers.md b/13/umbraco-cms/reference/security/external-login-providers.md index bfbd88648b6..146fcef62b1 100644 --- a/13/umbraco-cms/reference/security/external-login-providers.md +++ b/13/umbraco-cms/reference/security/external-login-providers.md @@ -60,7 +60,7 @@ When you are implementing your own custom authentication on Users and/or Members The process requires adding a couple of new classes (`.cs` files) to your Umbraco project: * **Custom-named configuration** to add additional configuration for handling different options related to the authentication. [See a generic example of the configuration class to learn more.](#custom-named-configuration) -* A **static extention class** to extend on the default authentication implementation in Umbraco CMS for either Users or Members. [See a generic example of the static extension class to learn more.](#static-extension-class) +* A **static extension class** to extend on the default authentication implementation in Umbraco CMS for either Users or Members. [See a generic example of the static extension class to learn more.](#static-extension-class) To register these two classes in Umbraco CMS you need to add them to the `Program.cs` file. From 1f2770e363ebdbf605850024bbce47fb065c7309 Mon Sep 17 00:00:00 2001 From: LLaverty Date: Wed, 3 Sep 2025 16:19:17 +0100 Subject: [PATCH 10/35] spelling: enabeld -> enabled --- 13/umbraco-cms/reference/security/two-factor-authentication.md | 2 +- 15/umbraco-cms/reference/security/two-factor-authentication.md | 2 +- 16/umbraco-cms/reference/security/two-factor-authentication.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/13/umbraco-cms/reference/security/two-factor-authentication.md b/13/umbraco-cms/reference/security/two-factor-authentication.md index 738cf0ae194..50d2ce5c120 100644 --- a/13/umbraco-cms/reference/security/two-factor-authentication.md +++ b/13/umbraco-cms/reference/security/two-factor-authentication.md @@ -234,7 +234,7 @@ At this point, the 2FA is active, but no members have set up 2FA yet. The setup You can also check that the **Two-factor Authentication** option is checked on the member in the Umbraco backoffice. -![Check the Member profile in the Umbraco backoffice to verify whether two-factor authentication is enabeld.](images/2fa-member-backoffice.png) +![Check the Member profile in the Umbraco backoffice to verify whether two-factor authentication is enabled.](images/2fa-member-backoffice.png) ### Notification when 2FA is requested for a member diff --git a/15/umbraco-cms/reference/security/two-factor-authentication.md b/15/umbraco-cms/reference/security/two-factor-authentication.md index 821cc2a523e..61d51075906 100644 --- a/15/umbraco-cms/reference/security/two-factor-authentication.md +++ b/15/umbraco-cms/reference/security/two-factor-authentication.md @@ -238,7 +238,7 @@ If you already have a members-only page with the edit profile options, you can s You can also check that the **Two-factor Authentication** option is checked on the member in the Umbraco backoffice. -![Check the Member profile in the Umbraco backoffice to verify whether two-factor authentication is enabeld.](images/2fa-member-backoffice.png) +![Check the Member profile in the Umbraco backoffice to verify whether two-factor authentication is enabled.](images/2fa-member-backoffice.png) ### Notification when 2FA is requested for a member diff --git a/16/umbraco-cms/reference/security/two-factor-authentication.md b/16/umbraco-cms/reference/security/two-factor-authentication.md index f3391c775f8..bc8e437faac 100644 --- a/16/umbraco-cms/reference/security/two-factor-authentication.md +++ b/16/umbraco-cms/reference/security/two-factor-authentication.md @@ -238,7 +238,7 @@ If you already have a members-only page with the edit profile options, you can s You can also check that the **Two-factor Authentication** option is checked on the member in the Umbraco backoffice. -![Check the Member profile in the Umbraco backoffice to verify whether two-factor authentication is enabeld.](images/2fa-member-backoffice.png) +![Check the Member profile in the Umbraco backoffice to verify whether two-factor authentication is enabled.](images/2fa-member-backoffice.png) ### Notification when 2FA is requested for a member From 1a31ae58beddfd8f9215cc279c9a7a2b516aba84 Mon Sep 17 00:00:00 2001 From: LLaverty Date: Wed, 3 Sep 2025 16:20:45 +0100 Subject: [PATCH 11/35] spelling: overriden -> overridden --- 13/umbraco-cms/reference/webhooks/expanding-webhook-events.md | 2 +- 15/umbraco-cms/reference/webhooks/expanding-webhook-events.md | 2 +- 16/umbraco-cms/reference/webhooks/expanding-webhook-events.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/13/umbraco-cms/reference/webhooks/expanding-webhook-events.md b/13/umbraco-cms/reference/webhooks/expanding-webhook-events.md index 2a7244693af..d38d975525c 100644 --- a/13/umbraco-cms/reference/webhooks/expanding-webhook-events.md +++ b/13/umbraco-cms/reference/webhooks/expanding-webhook-events.md @@ -138,7 +138,7 @@ To leverage the `WebhookEventContentBase` class, follow - **ConvertEntityToRequestPayload**: Implement this method to customize the content entity payload before sending it to webhooks. - If we take a look at the `ContentPublishedWebhookEvent`, we can see how these methods are overriden. + If we take a look at the `ContentPublishedWebhookEvent`, we can see how these methods are overridden. ```csharp protected override IEnumerable GetEntitiesFromNotification(ContentPublishedNotification notification) => notification.PublishedEntities; diff --git a/15/umbraco-cms/reference/webhooks/expanding-webhook-events.md b/15/umbraco-cms/reference/webhooks/expanding-webhook-events.md index f841575c5cc..094c4fe91c1 100644 --- a/15/umbraco-cms/reference/webhooks/expanding-webhook-events.md +++ b/15/umbraco-cms/reference/webhooks/expanding-webhook-events.md @@ -131,7 +131,7 @@ To leverage the `WebhookEventContentBase` class, follow * **GetEntitiesFromNotification**: Implement this method to extract content entities from the notification. * **ConvertEntityToRequestPayload**: Implement this method to customize the content entity payload before sending it to webhooks. - If we take a look at the `ContentPublishedWebhookEvent`, we can see how these methods are overriden. + If we take a look at the `ContentPublishedWebhookEvent`, we can see how these methods are overridden. {% include "../../.gitbook/includes/obsolete-warning-ipublishedsnapshotaccessor.md" %} diff --git a/16/umbraco-cms/reference/webhooks/expanding-webhook-events.md b/16/umbraco-cms/reference/webhooks/expanding-webhook-events.md index cc97073a837..796353ba746 100644 --- a/16/umbraco-cms/reference/webhooks/expanding-webhook-events.md +++ b/16/umbraco-cms/reference/webhooks/expanding-webhook-events.md @@ -133,7 +133,7 @@ To leverage the `WebhookEventContentBase` class, follow * **GetEntitiesFromNotification**: Implement this method to extract content entities from the notification. * **ConvertEntityToRequestPayload**: Implement this method to customize the content entity payload before sending it to webhooks. - If we take a look at the `ContentPublishedWebhookEvent`, we can see how these methods are overriden. + If we take a look at the `ContentPublishedWebhookEvent`, we can see how these methods are overridden. {% include "../../.gitbook/includes/obsolete-warning-ipublishedsnapshotaccessor.md" %} From eca8ac71dfb24eb788f6cfde6c0ec990501ff69c Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:51:39 +0200 Subject: [PATCH 12/35] Update 10/umbraco-cms/reference/routing/custom-routes.md --- 10/umbraco-cms/reference/routing/custom-routes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/10/umbraco-cms/reference/routing/custom-routes.md b/10/umbraco-cms/reference/routing/custom-routes.md index a6b1f522f19..c09a714df2c 100644 --- a/10/umbraco-cms/reference/routing/custom-routes.md +++ b/10/umbraco-cms/reference/routing/custom-routes.md @@ -135,7 +135,7 @@ public IActionResult Product(string id) } ``` -This method is a bit more interesting, here we get some extra data from a different source, in this case a `DbContext`, but this can be anything you want, using the id we get from the route values. We use this extra data to create a custom model, which includes the available stores, which we then render the view with. +Here, we get some extra data from a different source. In this case, a `DbContext`, but this can be anything you want, using the ID we get from the route values. We use this extra data to create a custom model, which includes the available stores, which we then render the view with. It's important to note that this custom model must implement `IPublishedContent`, to do this we inherit from the `ContentModel` class, in this case our model looks like this: From d74df645a68b0bca2903cdf201a7a57147f2da80 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:51:49 +0200 Subject: [PATCH 13/35] Update 10/umbraco-cms/reference/routing/custom-routes.md --- 10/umbraco-cms/reference/routing/custom-routes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/10/umbraco-cms/reference/routing/custom-routes.md b/10/umbraco-cms/reference/routing/custom-routes.md index c09a714df2c..f630e28cf9d 100644 --- a/10/umbraco-cms/reference/routing/custom-routes.md +++ b/10/umbraco-cms/reference/routing/custom-routes.md @@ -228,7 +228,7 @@ public IPublishedContent FindContent(ActionExecutingContext actionExecutingConte } ``` -We start off by getting our product root using the `UmbracoContext` to get it based off its id. Next we need to figure out what action is being requested, to do this we cast the `actionExecutingContext.ActionDescriptor` to a `ControllerActionDescriptor` and use its `ActionName` property. If the action name is index, we just return the product root, but if it's product, we try to get the SKU from the route value `id`, and try to find the child node which matches the SKU and return that. +Start by retrieving the product root using the `UmbracoContext` to obtain it based on its ID. Next, let's figure out what action is being requested. To do this, cast the `actionExecutingContext.ActionDescriptor` to a `ControllerActionDescriptor` and use its `ActionName` property. If the action name is index, it returns the product root. If it's a product, we get the SKU from the route value `id` and find the matching child node. Now there's only one last thing to do, we need to register our shop controller, if you're creating a controller for your own site you can do it in the `Configure` method of `Startup.cs` like so: From 838c4f440f252cbe7e76ab17a4665e93cab0f1c3 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:51:57 +0200 Subject: [PATCH 14/35] Update 10/umbraco-cms/reference/routing/custom-routes.md --- 10/umbraco-cms/reference/routing/custom-routes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/10/umbraco-cms/reference/routing/custom-routes.md b/10/umbraco-cms/reference/routing/custom-routes.md index f630e28cf9d..80d0f00130f 100644 --- a/10/umbraco-cms/reference/routing/custom-routes.md +++ b/10/umbraco-cms/reference/routing/custom-routes.md @@ -260,7 +260,7 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) } ``` -As you can see there's nothing Umbraco specific about the controller routing, it's using the default `MapController` route of the `EndpointRouteBuilder`, we give our mapping a name, a pattern for the controller and some default values, so if no action is specified it will default to `Index`. +There's nothing Umbraco-specific about the controller routing; it's using the default `MapController` route of the `EndpointRouteBuilder`. Give the mapping a name, a pattern for the controller, and some default values, so if no action is specified, it will default to `Index`. If you're creating a package you won't have access to the `Startup.cs`, so instead you can use a composer with an `UmbracoPipelineFilter` like so: From 751b31e630e700e0d953b1c767665ed0e206cbfc Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:52:04 +0200 Subject: [PATCH 15/35] Update 10/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md --- .../request-pipeline/published-content-request-preparation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/10/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md b/10/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md index 2288ada3193..0c3b2991fa6 100644 --- a/10/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md +++ b/10/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md @@ -61,7 +61,7 @@ When finding published content the `PublishedRouter` will first check if the `Pu You can also implement your own content finders and last chance finder, for more information, see [IContentFinder](icontentfinder.md) -The `PublishedRouter` will also follow any internal redirects there might be, it is however limited, as to not spiral out of control if there is an infinite loop of redirects. +The `PublishedRouter` will also follow any internal redirects, but it is limited to avoid spiraling out of control due to an infinite redirect loop. ### Find template From 2a3a786b37cbdf527aa9b63ac3e27feee32a67b5 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:52:11 +0200 Subject: [PATCH 16/35] Update 10/umbraco-cms/reference/routing/surface-controllers/README.md --- 10/umbraco-cms/reference/routing/surface-controllers/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/10/umbraco-cms/reference/routing/surface-controllers/README.md b/10/umbraco-cms/reference/routing/surface-controllers/README.md index 3c8e4e8a1ca..1b8ee181613 100644 --- a/10/umbraco-cms/reference/routing/surface-controllers/README.md +++ b/10/umbraco-cms/reference/routing/surface-controllers/README.md @@ -141,7 +141,7 @@ Since they get routed via an MVC area, your views should be placed in the follow * `~/App_Plugins/{areaname}/Views/{controllername}/` * `~/App_Plugins/{areaname}/Views/Shared/` -Since you're only able to place static files within your package's `App_Plugin` folder, it's highly recommend to ensure that the area you use is the same as your package name, since that allows your views to be found. +Since you're only able to place static files in your package's `App_Plugin` folder, it is highly recommended to ensure that the area you use matches your package name. This allows your views to be located easily. The controller itself should not be placed in the App_Plugins folder, the App_Plugins folder is for static files only, compiled files like the controller will be included in the dlls used by the nuget package. From 186dfc1444fd97323969a34c80d835e9d2c8fcda Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:52:43 +0200 Subject: [PATCH 17/35] Update 13/umbraco-cms/reference/routing/custom-routes.md --- 13/umbraco-cms/reference/routing/custom-routes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/13/umbraco-cms/reference/routing/custom-routes.md b/13/umbraco-cms/reference/routing/custom-routes.md index a76c1324817..876e15d84b1 100644 --- a/13/umbraco-cms/reference/routing/custom-routes.md +++ b/13/umbraco-cms/reference/routing/custom-routes.md @@ -121,7 +121,7 @@ public IActionResult Product(string id) } ``` -This method is a bit more interesting, here we get some extra data from a different source, in this case a `DbContext`, but this can be anything you want, using the id we get from the route values. We use this extra data to create a custom model, which includes the available stores, which we then render the view with. +Here, we get some extra data from a different source. In this case, a `DbContext`, but this can be anything you want, using the ID we get from the route values. We use this extra data to create a custom model, which includes the available stores, which we then render the view with. It's important to note that this custom model must implement `IPublishedContent`, to do this we inherit from the `ContentModel` class, in this case our model looks like this: From 6f3719dc1ec6fec57db9ba1a8baa174cd58da370 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:52:57 +0200 Subject: [PATCH 18/35] Update 13/umbraco-cms/reference/routing/custom-routes.md --- 13/umbraco-cms/reference/routing/custom-routes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/13/umbraco-cms/reference/routing/custom-routes.md b/13/umbraco-cms/reference/routing/custom-routes.md index 876e15d84b1..0a908c68ee8 100644 --- a/13/umbraco-cms/reference/routing/custom-routes.md +++ b/13/umbraco-cms/reference/routing/custom-routes.md @@ -238,7 +238,7 @@ app.UseUmbraco() }); ``` -As you can see there's nothing Umbraco specific about the controller routing, it's using the default `MapController` route of the `EndpointRouteBuilder`, we give our mapping a name, a pattern for the controller and some default values, so if no action is specified it will default to `Index`. +There's nothing Umbraco-specific about the controller routing; it's using the default `MapController` route of the `EndpointRouteBuilder`. Give the mapping a name, a pattern for the controller, and some default values, so if no action is specified, it will default to `Index`. If you're creating a package you won't have access to the `Program.cs`, so instead you can use a composer with an `UmbracoPipelineFilter` like so: From ea25591e042171fdd8e0f7e39ecab5ddb0bc9c5d Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:53:08 +0200 Subject: [PATCH 19/35] Update 13/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md --- .../request-pipeline/published-content-request-preparation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/13/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md b/13/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md index d1f31faa391..a18c1018ca9 100644 --- a/13/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md +++ b/13/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md @@ -60,7 +60,7 @@ When finding published content the `PublishedRouter` will first check if the `Pu You can also implement your own content finders and last chance finder, for more information, see [IContentFinder](icontentfinder.md) -The `PublishedRouter` will also follow any internal redirects there might be, it is however limited, as to not spiral out of control if there is an infinite loop of redirects. +The `PublishedRouter` will also follow any internal redirects, but it is limited to avoid spiraling out of control due to an infinite redirect loop. ### Find template From 4c1f28a58e9eeb32477fd1498f4c4bd1c327cd5c Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:53:21 +0200 Subject: [PATCH 20/35] Update 13/umbraco-cms/reference/routing/custom-routes.md --- 13/umbraco-cms/reference/routing/custom-routes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/13/umbraco-cms/reference/routing/custom-routes.md b/13/umbraco-cms/reference/routing/custom-routes.md index 0a908c68ee8..2688f337785 100644 --- a/13/umbraco-cms/reference/routing/custom-routes.md +++ b/13/umbraco-cms/reference/routing/custom-routes.md @@ -214,7 +214,7 @@ public IPublishedContent FindContent(ActionExecutingContext actionExecutingConte } ``` -We start off by getting our product root using the `UmbracoContext` to get it based off its id. Next we need to figure out what action is being requested. To do this we cast the `actionExecutingContext.ActionDescriptor` to a `ControllerActionDescriptor` and use its `ActionName` property. If the action name is index, we return the product root. If it's product, we try to get the SKU from the route value `id`. Then we try to find the child node which matches the SKU and return that. +Start by retrieving the product root using the `UmbracoContext` to obtain it based on its ID. Next, let's figure out what action is being requested. To do this, cast the `actionExecutingContext.ActionDescriptor` to a `ControllerActionDescriptor` and use its `ActionName` property. If the action name is index, it returns the product root. If it's a product, we get the SKU from the route value `id` and find the matching child node. There's only one last thing to do. We need to register our shop controller. If you're creating a controller for your own site you can do it in the `Program.cs` like so: From c659f45dd1a47316ea82443d245171c4ac35b722 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:53:35 +0200 Subject: [PATCH 21/35] Update 13/umbraco-cms/reference/routing/surface-controllers/README.md --- 13/umbraco-cms/reference/routing/surface-controllers/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/13/umbraco-cms/reference/routing/surface-controllers/README.md b/13/umbraco-cms/reference/routing/surface-controllers/README.md index 8f95444335e..3860e129c26 100644 --- a/13/umbraco-cms/reference/routing/surface-controllers/README.md +++ b/13/umbraco-cms/reference/routing/surface-controllers/README.md @@ -136,7 +136,7 @@ Since they get routed via an MVC area, your views should be placed in the follow * `~/App_Plugins/{areaname}/Views/{controllername}/` * `~/App_Plugins/{areaname}/Views/Shared/` -Since you're only able to place static files within your package's `App_Plugin` folder, it's highly recommend to ensure that the area you use is the same as your package name, since that allows your views to be found. +Since you're only able to place static files in your package's `App_Plugin` folder, it is highly recommended to ensure that the area you use matches your package name. This allows your views to be located easily. The controller itself should not be placed in the App_Plugins folder, the App_Plugins folder is for static files only, compiled files like the controller will be included in the dlls used by the nuget package. From c4032ec69d30f3bbb6015f87d9e54534013f7d49 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:53:48 +0200 Subject: [PATCH 22/35] Update 15/umbraco-cms/reference/routing/custom-routes.md --- 15/umbraco-cms/reference/routing/custom-routes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/15/umbraco-cms/reference/routing/custom-routes.md b/15/umbraco-cms/reference/routing/custom-routes.md index 314e8eab521..20924409262 100644 --- a/15/umbraco-cms/reference/routing/custom-routes.md +++ b/15/umbraco-cms/reference/routing/custom-routes.md @@ -120,7 +120,7 @@ public IActionResult Product(string id) } ``` -This method is a bit more interesting, here we get some extra data from a different source, in this case a `DbContext`, but this can be anything you want, using the id we get from the route values. We use this extra data to create a custom model, which includes the available stores, which we then render the view with. +Here, we get some extra data from a different source. In this case, a `DbContext`, but this can be anything you want, using the ID we get from the route values. We use this extra data to create a custom model, which includes the available stores, which we then render the view with. It's important to note that this custom model must implement `IPublishedContent`, to do this we inherit from the `ContentModel` class, in this case our model looks like this: From 16d56741933a21cf6ddfdc7bd5f52a639ff0c8db Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:53:59 +0200 Subject: [PATCH 23/35] Update 15/umbraco-cms/reference/routing/custom-routes.md --- 15/umbraco-cms/reference/routing/custom-routes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/15/umbraco-cms/reference/routing/custom-routes.md b/15/umbraco-cms/reference/routing/custom-routes.md index 20924409262..a2e35b0db2e 100644 --- a/15/umbraco-cms/reference/routing/custom-routes.md +++ b/15/umbraco-cms/reference/routing/custom-routes.md @@ -213,7 +213,7 @@ public IPublishedContent FindContent(ActionExecutingContext actionExecutingConte } ``` -We start off by getting our product root using the `UmbracoContext` to get it based off its id. Next we need to figure out what action is being requested. To do this we cast the `actionExecutingContext.ActionDescriptor` to a `ControllerActionDescriptor` and use its `ActionName` property. If the action name is index, we return the product root. If it's product, we try to get the SKU from the route value `id`. Then we try to find the child node which matches the SKU and return that. +Start by retrieving the product root using the `UmbracoContext` to obtain it based on its ID. Next, let's figure out what action is being requested. To do this, cast the `actionExecutingContext.ActionDescriptor` to a `ControllerActionDescriptor` and use its `ActionName` property. If the action name is index, it returns the product root. If it's a product, we get the SKU from the route value `id` and find the matching child node. There's only one last thing to do. We need to register our shop controller. If you're creating a controller for your own site you can do it in the `Program.cs` like so: From c0d92e64e36f69f93e0e9eb1f338e3b35534ce28 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:54:11 +0200 Subject: [PATCH 24/35] Update 15/umbraco-cms/reference/routing/custom-routes.md --- 15/umbraco-cms/reference/routing/custom-routes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/15/umbraco-cms/reference/routing/custom-routes.md b/15/umbraco-cms/reference/routing/custom-routes.md index a2e35b0db2e..5b4fdbacf59 100644 --- a/15/umbraco-cms/reference/routing/custom-routes.md +++ b/15/umbraco-cms/reference/routing/custom-routes.md @@ -236,7 +236,7 @@ app.UseUmbraco() }); ``` -As you can see there's nothing Umbraco specific about the controller routing, it's using the default `MapController` route of the `EndpointRouteBuilder`, we give our mapping a name, a pattern for the controller and some default values, so if no action is specified it will default to `Index`. +There's nothing Umbraco-specific about the controller routing; it's using the default `MapController` route of the `EndpointRouteBuilder`. Give the mapping a name, a pattern for the controller, and some default values, so if no action is specified, it will default to `Index`. If you're creating a package you won't have access to the `Program.cs`, so instead you can use a composer with an `UmbracoPipelineFilter` like so: From 71cfa2aa3bcf3ffe77085102cd1221846e19ccf6 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:54:22 +0200 Subject: [PATCH 25/35] Update 15/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md --- .../request-pipeline/published-content-request-preparation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/15/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md b/15/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md index d91d909c8a4..4716e89edaf 100644 --- a/15/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md +++ b/15/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md @@ -60,7 +60,7 @@ When finding published content the `PublishedRouter` will first check if the `Pu You can also implement your own content finders and last chance finder, for more information, see [IContentFinder](icontentfinder.md) -The `PublishedRouter` will also follow any internal redirects there might be, it is however limited, as to not spiral out of control if there is an infinite loop of redirects. +The `PublishedRouter` will also follow any internal redirects, but it is limited to avoid spiraling out of control due to an infinite redirect loop. ### Find template From b8ae53b037291987b42cf0ed9c2f631353811435 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:54:31 +0200 Subject: [PATCH 26/35] Update 15/umbraco-cms/reference/routing/surface-controllers/README.md --- 15/umbraco-cms/reference/routing/surface-controllers/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/15/umbraco-cms/reference/routing/surface-controllers/README.md b/15/umbraco-cms/reference/routing/surface-controllers/README.md index 8f95444335e..3860e129c26 100644 --- a/15/umbraco-cms/reference/routing/surface-controllers/README.md +++ b/15/umbraco-cms/reference/routing/surface-controllers/README.md @@ -136,7 +136,7 @@ Since they get routed via an MVC area, your views should be placed in the follow * `~/App_Plugins/{areaname}/Views/{controllername}/` * `~/App_Plugins/{areaname}/Views/Shared/` -Since you're only able to place static files within your package's `App_Plugin` folder, it's highly recommend to ensure that the area you use is the same as your package name, since that allows your views to be found. +Since you're only able to place static files in your package's `App_Plugin` folder, it is highly recommended to ensure that the area you use matches your package name. This allows your views to be located easily. The controller itself should not be placed in the App_Plugins folder, the App_Plugins folder is for static files only, compiled files like the controller will be included in the dlls used by the nuget package. From e82b5f55db4a793c9a7ef91d43718b592af79980 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:54:41 +0200 Subject: [PATCH 27/35] Update 16/umbraco-cms/reference/routing/custom-routes.md --- 16/umbraco-cms/reference/routing/custom-routes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/16/umbraco-cms/reference/routing/custom-routes.md b/16/umbraco-cms/reference/routing/custom-routes.md index 314e8eab521..20924409262 100644 --- a/16/umbraco-cms/reference/routing/custom-routes.md +++ b/16/umbraco-cms/reference/routing/custom-routes.md @@ -120,7 +120,7 @@ public IActionResult Product(string id) } ``` -This method is a bit more interesting, here we get some extra data from a different source, in this case a `DbContext`, but this can be anything you want, using the id we get from the route values. We use this extra data to create a custom model, which includes the available stores, which we then render the view with. +Here, we get some extra data from a different source. In this case, a `DbContext`, but this can be anything you want, using the ID we get from the route values. We use this extra data to create a custom model, which includes the available stores, which we then render the view with. It's important to note that this custom model must implement `IPublishedContent`, to do this we inherit from the `ContentModel` class, in this case our model looks like this: From 89ca8a74e5eca7ba2f4afde8fc7f7425fdcb54b9 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:54:50 +0200 Subject: [PATCH 28/35] Update 16/umbraco-cms/reference/routing/custom-routes.md --- 16/umbraco-cms/reference/routing/custom-routes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/16/umbraco-cms/reference/routing/custom-routes.md b/16/umbraco-cms/reference/routing/custom-routes.md index 20924409262..a2e35b0db2e 100644 --- a/16/umbraco-cms/reference/routing/custom-routes.md +++ b/16/umbraco-cms/reference/routing/custom-routes.md @@ -213,7 +213,7 @@ public IPublishedContent FindContent(ActionExecutingContext actionExecutingConte } ``` -We start off by getting our product root using the `UmbracoContext` to get it based off its id. Next we need to figure out what action is being requested. To do this we cast the `actionExecutingContext.ActionDescriptor` to a `ControllerActionDescriptor` and use its `ActionName` property. If the action name is index, we return the product root. If it's product, we try to get the SKU from the route value `id`. Then we try to find the child node which matches the SKU and return that. +Start by retrieving the product root using the `UmbracoContext` to obtain it based on its ID. Next, let's figure out what action is being requested. To do this, cast the `actionExecutingContext.ActionDescriptor` to a `ControllerActionDescriptor` and use its `ActionName` property. If the action name is index, it returns the product root. If it's a product, we get the SKU from the route value `id` and find the matching child node. There's only one last thing to do. We need to register our shop controller. If you're creating a controller for your own site you can do it in the `Program.cs` like so: From 5374bda122fcd612ef196b666f2acc3b23a2fe4e Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:55:01 +0200 Subject: [PATCH 29/35] Update 16/umbraco-cms/reference/routing/custom-routes.md --- 16/umbraco-cms/reference/routing/custom-routes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/16/umbraco-cms/reference/routing/custom-routes.md b/16/umbraco-cms/reference/routing/custom-routes.md index a2e35b0db2e..5b4fdbacf59 100644 --- a/16/umbraco-cms/reference/routing/custom-routes.md +++ b/16/umbraco-cms/reference/routing/custom-routes.md @@ -236,7 +236,7 @@ app.UseUmbraco() }); ``` -As you can see there's nothing Umbraco specific about the controller routing, it's using the default `MapController` route of the `EndpointRouteBuilder`, we give our mapping a name, a pattern for the controller and some default values, so if no action is specified it will default to `Index`. +There's nothing Umbraco-specific about the controller routing; it's using the default `MapController` route of the `EndpointRouteBuilder`. Give the mapping a name, a pattern for the controller, and some default values, so if no action is specified, it will default to `Index`. If you're creating a package you won't have access to the `Program.cs`, so instead you can use a composer with an `UmbracoPipelineFilter` like so: From a55c1afd735a7bf548eabb43754b3c2fc62b4224 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:55:08 +0200 Subject: [PATCH 30/35] Update 16/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md --- .../request-pipeline/published-content-request-preparation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/16/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md b/16/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md index d91d909c8a4..4716e89edaf 100644 --- a/16/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md +++ b/16/umbraco-cms/reference/routing/request-pipeline/published-content-request-preparation.md @@ -60,7 +60,7 @@ When finding published content the `PublishedRouter` will first check if the `Pu You can also implement your own content finders and last chance finder, for more information, see [IContentFinder](icontentfinder.md) -The `PublishedRouter` will also follow any internal redirects there might be, it is however limited, as to not spiral out of control if there is an infinite loop of redirects. +The `PublishedRouter` will also follow any internal redirects, but it is limited to avoid spiraling out of control due to an infinite redirect loop. ### Find template From f479a4565dad169a710f032cbd040650c7ebd4f0 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:55:17 +0200 Subject: [PATCH 31/35] Update 16/umbraco-cms/reference/routing/surface-controllers/README.md --- 16/umbraco-cms/reference/routing/surface-controllers/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/16/umbraco-cms/reference/routing/surface-controllers/README.md b/16/umbraco-cms/reference/routing/surface-controllers/README.md index 8f95444335e..3860e129c26 100644 --- a/16/umbraco-cms/reference/routing/surface-controllers/README.md +++ b/16/umbraco-cms/reference/routing/surface-controllers/README.md @@ -136,7 +136,7 @@ Since they get routed via an MVC area, your views should be placed in the follow * `~/App_Plugins/{areaname}/Views/{controllername}/` * `~/App_Plugins/{areaname}/Views/Shared/` -Since you're only able to place static files within your package's `App_Plugin` folder, it's highly recommend to ensure that the area you use is the same as your package name, since that allows your views to be found. +Since you're only able to place static files in your package's `App_Plugin` folder, it is highly recommended to ensure that the area you use matches your package name. This allows your views to be located easily. The controller itself should not be placed in the App_Plugins folder, the App_Plugins folder is for static files only, compiled files like the controller will be included in the dlls used by the nuget package. From 16a49558eacf201296f6dc948fb15e10c79e9ef3 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 10:04:55 +0200 Subject: [PATCH 32/35] Update 10/umbraco-cms/reference/routing/surface-controllers/README.md --- 10/umbraco-cms/reference/routing/surface-controllers/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/10/umbraco-cms/reference/routing/surface-controllers/README.md b/10/umbraco-cms/reference/routing/surface-controllers/README.md index 1b8ee181613..2d0b611dcd0 100644 --- a/10/umbraco-cms/reference/routing/surface-controllers/README.md +++ b/10/umbraco-cms/reference/routing/surface-controllers/README.md @@ -141,7 +141,7 @@ Since they get routed via an MVC area, your views should be placed in the follow * `~/App_Plugins/{areaname}/Views/{controllername}/` * `~/App_Plugins/{areaname}/Views/Shared/` -Since you're only able to place static files in your package's `App_Plugin` folder, it is highly recommended to ensure that the area you use matches your package name. This allows your views to be located easily. +Since you can only place static files in your package's `App_Plugin` folder, it is highly recommended to use a name that matches your package. This helps ensure your views can be found. The controller itself should not be placed in the App_Plugins folder, the App_Plugins folder is for static files only, compiled files like the controller will be included in the dlls used by the nuget package. From ec6b60daa8c1826d9769a6cbf17a10ebf1f9f61a Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 10:05:06 +0200 Subject: [PATCH 33/35] Update 13/umbraco-cms/reference/routing/surface-controllers/README.md --- 13/umbraco-cms/reference/routing/surface-controllers/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/13/umbraco-cms/reference/routing/surface-controllers/README.md b/13/umbraco-cms/reference/routing/surface-controllers/README.md index 3860e129c26..31838b28252 100644 --- a/13/umbraco-cms/reference/routing/surface-controllers/README.md +++ b/13/umbraco-cms/reference/routing/surface-controllers/README.md @@ -136,7 +136,7 @@ Since they get routed via an MVC area, your views should be placed in the follow * `~/App_Plugins/{areaname}/Views/{controllername}/` * `~/App_Plugins/{areaname}/Views/Shared/` -Since you're only able to place static files in your package's `App_Plugin` folder, it is highly recommended to ensure that the area you use matches your package name. This allows your views to be located easily. +Since you can only place static files in your package's `App_Plugin` folder, it is highly recommended to use a name that matches your package. This helps ensure your views can be found. The controller itself should not be placed in the App_Plugins folder, the App_Plugins folder is for static files only, compiled files like the controller will be included in the dlls used by the nuget package. From db58d9aec2dc70820a7b8b4da8c7fb93af13ee4d Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 10:05:15 +0200 Subject: [PATCH 34/35] Update 15/umbraco-cms/reference/routing/surface-controllers/README.md --- 15/umbraco-cms/reference/routing/surface-controllers/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/15/umbraco-cms/reference/routing/surface-controllers/README.md b/15/umbraco-cms/reference/routing/surface-controllers/README.md index 3860e129c26..31838b28252 100644 --- a/15/umbraco-cms/reference/routing/surface-controllers/README.md +++ b/15/umbraco-cms/reference/routing/surface-controllers/README.md @@ -136,7 +136,7 @@ Since they get routed via an MVC area, your views should be placed in the follow * `~/App_Plugins/{areaname}/Views/{controllername}/` * `~/App_Plugins/{areaname}/Views/Shared/` -Since you're only able to place static files in your package's `App_Plugin` folder, it is highly recommended to ensure that the area you use matches your package name. This allows your views to be located easily. +Since you can only place static files in your package's `App_Plugin` folder, it is highly recommended to use a name that matches your package. This helps ensure your views can be found. The controller itself should not be placed in the App_Plugins folder, the App_Plugins folder is for static files only, compiled files like the controller will be included in the dlls used by the nuget package. From 106d9f6b304053fe2aec6e043af25e183777ec82 Mon Sep 17 00:00:00 2001 From: Esha Noronha <82437098+eshanrnh@users.noreply.github.com> Date: Thu, 4 Sep 2025 10:05:25 +0200 Subject: [PATCH 35/35] Update 16/umbraco-cms/reference/routing/surface-controllers/README.md --- 16/umbraco-cms/reference/routing/surface-controllers/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/16/umbraco-cms/reference/routing/surface-controllers/README.md b/16/umbraco-cms/reference/routing/surface-controllers/README.md index 3860e129c26..31838b28252 100644 --- a/16/umbraco-cms/reference/routing/surface-controllers/README.md +++ b/16/umbraco-cms/reference/routing/surface-controllers/README.md @@ -136,7 +136,7 @@ Since they get routed via an MVC area, your views should be placed in the follow * `~/App_Plugins/{areaname}/Views/{controllername}/` * `~/App_Plugins/{areaname}/Views/Shared/` -Since you're only able to place static files in your package's `App_Plugin` folder, it is highly recommended to ensure that the area you use matches your package name. This allows your views to be located easily. +Since you can only place static files in your package's `App_Plugin` folder, it is highly recommended to use a name that matches your package. This helps ensure your views can be found. The controller itself should not be placed in the App_Plugins folder, the App_Plugins folder is for static files only, compiled files like the controller will be included in the dlls used by the nuget package.