Kentico Kontent Boilerplate for ASP.NET Core MVC
This boilerplate includes a set of features and best practices to kick off your website development with Kentico Kontent smoothly.
- Kentico Delivery SDK
- HTTP Status codes handling (404, 500, ...)
- Adjustable images
- Sitemap.xml generator
- URL Rewriting examples
- 301 URL Rewriting
- www -> non-www redirection
- Configs for Dev and Production environment
- Unit tests (xUnit)
- .NET Core 3
You can check your .NET Core version via
Optional: The most seamless way to get all prerequisities is to install
Installation from NuGet
- Open Developer Command Prompt
dotnet new --install "Kentico.Kontent.Boilerplate::*"to install the boilerplate to your machine
- Wait for the command to finish (it may take a minute or two)
dotnet new kentico-kontent-mvc --name "MyWebsite" [-pid|project-id "<projectid>"] [-d|domain "<domain_name>"] [--output "<path>"].
- Open in the IDE of your choice and Run
Installation from source
git clone https://github.com/Kentico/kontent-boilerplate-net.git
dotnet new -i artifacts/*.nupkg
How to debug the app
In Windows, there are basically two ways to run the app:
- via IIS
- as a standalone command-line app
You can read more about the differences on Rick Strahl's blog.
We recommend choosing the second option - as a standalone app. In Visual Studio, you can switch to it in the toolbar:
How to change Kentico Kontent Project ID and Delivery Preview API key
Kentico Kontent Project ID is stored inside
appsettings.json file. This setting is automatically loaded using Options and configuration objects. You can also provide additional environment-specific configuration in
You can also set the Project ID during the template instantiation by applying the
For security reasons, Delivery Preview API key should be stored outside of the project tree. It's recommended to use Secret Manager to store sensitive data.
How to generate Strongly Typed Models for Content Types
With the new Delivery SDK, you can take advantage of code-first approach. To do that you have to instruct the SDK to use strongly-typed models. These models can be generated automatically by model generator utility. By convention, all Content Type Models are stored within the
Models/ContentTypes folder. All generated classes are marked as
partial which means that they can be extended in separate files. This should prevent losing custom code in case the models get regenerated. When generating models, be sure to set the
-n command line parameter to
If you want to use Display Templates (MVC), make sure you generate also a custom type provider (add the
--withtypeprovider parameter when running the generator utility).
You can regenerate the models using the included PowerShell script that utilizes the model generator utility. The script is located at
How to resolve links
Rich text elements in Kentico Kontent can contain links to other content items. It's up to a developer to decide how the links should be represented on a live site. Resolution logic can be adjusted in the
CustomContentLinkUrlResolver. See the documentation for detailed info.
How to set up webhook-enabled caching
All content retrieved from Kentico Kontent is by default cached for 10 minutes in a MemoryCache singleton object. When content is stale (newer version exists) it is cached for 2 seconds. You can change the expiration times in Startup.
If displaying outdated content for a limited time is not an option, you need to use another caching strategy and invalidate cached content when a webhook notification about content change is received. To enable this caching strategy just switch to another caching client by using
IServiceCollection.AddWebhookInvalidatedCachingClient extension in Startup.
Also, you need to create a webhook. When entering a webhook URL, append a
/Webhooks/Webhooks path to a publicly available URL address of the application, e.g.
https://myapp.azurewebsites.net/Webhooks/Webhooks. Finally, copy the API secret and put it into the app settings (usually the appsettings.json) as the
KenticoKontentWebhookSecret environment variable.
Note: During local development, you can use the ngrok service to route to your workstation. Simply start your application locally and run command
ngrok http [port] localhost:[port] and set the webhook URL to the displayed HTTPS address.
Note: Speed of the Delivery/Preview API service is already tuned up because the service uses a geo-distributed CDN network for most of the types of requests. Therefore, the main advantage of caching in Kentico Kontent applications is not speed but lowering the amount of requests needed (See pricing for details).
How to resize images based on window width
The boilerplate contains a sample implementation of the
HtmlHelperExtensions. Using the
AssetImage() extension method, you can easily create an
img tag with
How to adjust the sitemap.xml
The boilerplate contains a sample implementation of the
SiteMapController. Make sure you specify desired content types in the
Index() action method. Also, you can adjust the URL resolution logic in the
How to handle 404 errors or any other error
Error handling is setup by default. Any server exception or error response within 400-600 status code range is handled by ErrorController. By default, it's configured to display Not Found error page for 404 error and General Error for anything else.
How to adjust URL rewriting
The Boilerplate is configured to load all URL Rewriting rules from IISUrlRewrite.xml file. Add or modify existing rules to match your expected behavior. This is a good way to set up 301 Permanent redirects or www<->non-www redirects.
You can adjust the domain name in the default rewriting rules during the template instantiation by applying the
Feedback & Contributing
Any feedback is much appreciated. Check out the contributing to see the best places to file issues, start discussions and begin contributing.
Wall of Fame
We would like to express our thanks to the following people who contributed and made the project possible:
- Emmanuel Tissera - GetStarted
- Andy Thompson- GetStarted
- Sayed Ibrahim Hashimi - Microsoft
- Charith Sooriyaarachchi - 99X Technology
- Lex Li
- Kashif Jamal Soofi
Would you like to become a hero too? Pick an issue and send us a pull request!