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/10/umbraco-cms/reference/routing/custom-routes.md b/10/umbraco-cms/reference/routing/custom-routes.md index 62462bf77c9..80d0f00130f 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. +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: @@ -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. +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: @@ -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`. +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: 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/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..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 infite 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 diff --git a/10/umbraco-cms/reference/routing/surface-controllers/README.md b/10/umbraco-cms/reference/routing/surface-controllers/README.md index e326a91ca5f..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 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 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. 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/13/umbraco-cms/reference/routing/custom-routes.md b/13/umbraco-cms/reference/routing/custom-routes.md index 9f2350e35e2..2688f337785 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. +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: @@ -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. +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: @@ -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`. +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: @@ -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/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/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..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 infite 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 diff --git a/13/umbraco-cms/reference/routing/surface-controllers/README.md b/13/umbraco-cms/reference/routing/surface-controllers/README.md index 0479149cbcc..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 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 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. 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. 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/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/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/15/umbraco-cms/reference/routing/custom-routes.md b/15/umbraco-cms/reference/routing/custom-routes.md index 22e717586d2..5b4fdbacf59 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. +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: @@ -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. +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: @@ -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`. +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: @@ -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/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/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..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 infite 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 diff --git a/15/umbraco-cms/reference/routing/surface-controllers/README.md b/15/umbraco-cms/reference/routing/surface-controllers/README.md index 0479149cbcc..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 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 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. 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/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/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 diff --git a/16/umbraco-cms/reference/routing/custom-routes.md b/16/umbraco-cms/reference/routing/custom-routes.md index 22e717586d2..5b4fdbacf59 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. +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: @@ -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. +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: @@ -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`. +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: @@ -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/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 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..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 infite 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 diff --git a/16/umbraco-cms/reference/routing/surface-controllers/README.md b/16/umbraco-cms/reference/routing/surface-controllers/README.md index 0479149cbcc..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 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 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. 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 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" %}