PineBlog is a light-weight blogging engine written in ASP.NET Core MVC Razor Pages, using Entity Framework Core. It is highly extendable, customizable and easy to integrate in an existing web application.
- Markdown post editor
- File management
- Light-weight using Razor Pages
- SEO optimized
- Open Graph protocol
- Clean Architecture (youtube: Clean Architecture with ASP.NET Core)
- Entity Framework Core, SQL database
- Azure Blob Storage, for file storage
- ..only a blogging engine, nothing else..
Because PineBlog is very light-weight it is not a complete web application, it needs to be integrated in an existing web application or you need to create a basic web application for it. There are a few things PineBlog depends on, but that it does not provide.
- Authentication and authorization
Note: The admin pages require that authentication/authorization has been setup in your website, the admin area has a
AuthorizeFilter
with the default policy set to all pages in that area folder.
You can install the Opw.PineBlog metapackage from the console.
> dotnet add package Opw.PineBlog
The Opw.PineBlog metapackage includes the following packages.
-
Opw.PineBlog.EntityFrameworkCore package
The PineBlog data provider that uses Entity Framework Core.
-
Opw.PineBlog.RazorPages package
The PineBlog UI using ASP.NET Core MVC Razor Pages.
-
Opw.PineBlog.Core package
The PineBlog core package. This package is a dependency forOpw.PineBlog.RazorPages
andOpw.PineBlog.EntityFrameworkCore
.
You add the PineBlog services and the Razor Pages UI in the Startup.cs of your application.
public void ConfigureServices(IServiceCollection services)
{
...
services.AddPineBlog(Configuration);
services.AddRazorPages().AddPineBlogRazorPages();
// or services.AddMvcCore().AddPineBlogRazorPages();
// or services.AddMvc().AddPineBlogRazorPages();
...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseEndpoints(endpoints =>
{
// make sure to add the endpoint mapping for both RazorPages and Controllers
endpoints.MapRazorPages();
endpoints.MapControllers();
});
...
}
And a few properties need to be configured before you can run your web application with PineBlog.
{
"ConnectionStrings": {
"DefaultConnection": "Server=inMemory; Database=pineblog-db;"
},
"PineBlogOptions": {
"Title": "PineBlog",
"Description": "A blogging engine based on ASP.NET Core MVC Razor Pages and Entity Framework Core",
"ItemsPerPage": 5,
"CreateAndSeedDatabases": true,
"ConnectionStringName": "DefaultConnection",
"AzureStorageConnectionString": "UseDevelopmentStorage=true",
"AzureStorageBlobContainerName": "pineblog",
"FileBaseUrl": "http://127.0.0.1:10000/devstoreaccount1"
}
}
To be able to update the blog settings from the admin pages, you need to add the PineBlog IConfigurationProvider
s to the
IConfigurationBuilder
in the Program.cs
. Add config.AddPineBlogConfiguration(reloadOnChange: true);
to ConfigureAppConfiguration(..)
on the IWebHostBuilder
.
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureAppConfiguration((hostingContext, config) => {
config.AddPineBlogConfiguration(reloadOnChange: true);
});
For more information, please check the documentation.
For technical background information, check the blog: ofpinewood.com.
The sample project contains an example web application with PineBlog.
Please see the code :nerd_face
The demo site is a playground to check out PineBlog. You can write and publish posts, upload files and test application before install. And no worries, it is just a sandbox and will clean itself.
Url: pineblog.azurewebsites.net
Username: pineblog@example.com
Password: demo
PineBlog is used on the following website:
We accept fixes and features! Here are some resources to help you get started on how to contribute code or new content.
Copyright © 2019, Of Pine Wood. Created by Peter van den Hout. Released under the terms of the MIT license.