Simplify.Web
4.7.1
See the version list below for details.
dotnet add package Simplify.Web --version 4.7.1
NuGet\Install-Package Simplify.Web -Version 4.7.1
<PackageReference Include="Simplify.Web" Version="4.7.1" />
paket add Simplify.Web --version 4.7.1
#r "nuget: Simplify.Web, 4.7.1"
// Install Simplify.Web as a Cake Addin #addin nuget:?package=Simplify.Web&version=4.7.1 // Install Simplify.Web as a Cake Tool #tool nuget:?package=Simplify.Web&version=4.7.1
Simplify.Web
Simplify.Web is an open-source, lightweight, fast and highly customizable server-side .NET web-framework based on MVC and OWIN for building HTTP based web-applications, RESTful APIs etc.
Framework can be used as:
- An API backend framework
- As a mix of API backend + some SPA front end like Angular
- As an old way backend generated web-site
Can be hosted:
- The same way as an ApsNetCore MVC application (On IIS, or as a console application)
- Inside a windows service
Main features
- Comes as Microsoft.AspNetCore middleware
- Can be used as an API backend only with front-end frameworks
- Based on MVC and MVVM patterns
- Lightweight & Fast
- Uses switchable IOC container for itself and controllers, views constructor injection (Simplify.DI)
- Support async controllers
- Supports controllers which can be run on any request
- Localization-friendly (supports templates, strings and data files localization by default)
- Uses fast templates engine (Simplify.Templates)
- Mocking-friendly
- Mono-friendly
Quick start
There is a templates package available at nuget.org for Simplify.Web. It contains a couple of templates which can be a good starting point for your application.
Installing a templates package:
dotnet new -i Simplify.Web.Templates
Template | Short Name |
---|---|
Angular template | sweb.angular |
Api template | sweb.api |
Minimal template | sweb.minimal |
Windows service hosted api template | sweb.api.windowsservice |
Use the short name to create a project based on selected template:
dotnet new sweb.angular -n HelloWorldApplication
Then just run project via F5 (it will download all required nuget and npm packages at first build).
Detailed documentation
API outgoing JSON controller example
[Get("api/v1/weatherTypes")]
public class SampleDataController : Controller
{
private static readonly string[] Summaries =
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
public override ControllerResponse Invoke()
{
try
{
return new Json(items);
}
catch (Exception e)
{
Console.WriteLine(e);
return StatusCode(500);
}
}
}
API ingoing JSON controller example
[Post("api/v1/sendMessage")]
public class SampleDataController : Controller<SampleModel>
{
public override ControllerResponse Invoke()
{
try
{
Trace.WriteLine($"Object with message received: {Model.Message}");
return NoContent();
}
catch (Exception e) when (e is ModelValidationException || e is Newtonsoft.Json.JsonException)
{
return StatusCode(400, e.Message);
}
catch (Exception e)
{
Console.WriteLine(e);
return StatusCode(500, "Site error!");
}
}
}
public class SampleModel
{
[Required]
public string Message { get; set; }
}
Some simple HTML generation controllers example
Static page controller
// Controller will be executed only on HTTP GET request like http://mysite.com/about
[Get("about")]
public class AboutController : Controller
{
public override ControllerResponse Invoke()
{
// About.tpl content will be inserted into {MainContent} in Master.tpl
return new StaticTpl("Static/About", StringTable.PageTitleAbout);
}
}
Any page controller with high run priority example
Runs on any request and adds login panel to a pages
// Controller will be executed on any request and will be launched before other controllers (because they have Priority = 0 by default)
[Priority(-1)]
public class LoginPanelController : AsyncController
{
public override async Task<ControllerResponse> Invoke()
{
return Context.Context.Authentication.User == null
// Data from GuestPanel.tpl will be inserted into {LoginPanel} in Master.tpl
? new InlineTpl("LoginPanel", await TemplateFactory.LoadAsync("Shared/LoginPanel/GuestPanel"))
// Data from LoggedUserPanelView will be inserted into {LoginPanel} in Master.tpl
: new InlineTpl("LoginPanel", await GetView<LoggedUserPanelView>().Get(Context.Context.Authentication.User.Identity.Name));
}
}
View example
public class LoggedUserPanelView : View
{
public async Task<ITemplate> Get(string userName)
{
// Loading template from LoggedUserPanel.tpl asynchronously
var tpl = await TemplateFactory.LoadAsync("Shared/LoginPanel/LoggedUserPanel");
// Setting userName into {UserName} variable in LoggedUserPanel.tpl
tpl.Add("UserName", userName);
return tpl;
}
}
Example applications
Below is the list of sample applications showing different variations of Simplify.Web usage:
- Only as an API backend with Angular + Bootstrap UI SPA
- Simple Kestrel-based Application with backend page
- Kestrel-based Application with backend HTML generation, localization, authentication
- Only as an API backend with Vue.js + Bootstrap UI SPA
- Only as an API backend with Vue.js + Element UI SPA
- Simple Kestrel-based Application hosted as windows-service
Contributing
There are many ways in which you can participate in the project. Like most open-source software projects, contributing code is just one of many outlets where you can help improve. Some of the things that you could help out with are:
- Documentation (both code and features)
- Bug reports
- Bug fixes
- Feature requests
- Feature implementations
- Test coverage
- Code quality
- Sample applications
Related Projects
Additional extensions to Simplify.Web live in their own repositories on GitHub. For example:
- Simplify.Web.Json - JSON serialization/deserialization
- Simplify.Web.Multipart - multipart form model binder
- Simplify.Web.MessageBox - non-interactive server side message box
- Simplify.Web.Templates - Visual studio project templates
License
Licensed under the GNU LESSER GENERAL PUBLIC LICENSE
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 is compatible. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.8
- Microsoft.AspNetCore.Http.Extensions (>= 2.2.0)
- Microsoft.CSharp (>= 4.7.0)
- Microsoft.Extensions.Configuration.Json (>= 3.1.32)
- Simplify.DI (>= 4.2.10)
- Simplify.Templates (>= 2.0.1)
-
.NETStandard 2.0
- Microsoft.AspNetCore.Http.Extensions (>= 2.2.0)
- Microsoft.CSharp (>= 4.7.0)
- Microsoft.Extensions.Configuration.Json (>= 3.1.32)
- Simplify.DI (>= 4.2.10)
- Simplify.Templates (>= 2.0.1)
-
.NETStandard 2.1
- Microsoft.AspNetCore.Http.Extensions (>= 2.2.0)
- Microsoft.CSharp (>= 4.7.0)
- Microsoft.Extensions.Configuration.Json (>= 3.1.32)
- Simplify.DI (>= 4.2.10)
- Simplify.Templates (>= 2.0.1)
-
net6.0
- Microsoft.CSharp (>= 4.7.0)
- Simplify.DI (>= 4.2.10)
- Simplify.Templates (>= 2.0.1)
NuGet packages (5)
Showing the top 5 NuGet packages that depend on Simplify.Web:
Package | Downloads |
---|---|
Simplify.Web.Json
Simplify.Web JSON controller response and model binder |
|
Simplify.Web.MessageBox
Simplify.Web static message box templates and controller response |
|
Simplify.Web.Multipart
Simplify.Web multipart form model binder |
|
Simplify.Web.Postman
Postman collection and environment generation extension for Simplify.Web |
|
Simplify.Web.Swagger
Swagger extensions for Simplify.Web web-framework |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
5.1.0 | 119 | 7/28/2024 |
5.0.0 | 526 | 6/5/2024 |
5.0.0-pre02 | 100 | 6/5/2024 |
5.0.0-pre01 | 353 | 6/1/2024 |
4.9.1 | 149 | 4/16/2024 |
4.9.0 | 239 | 1/8/2024 |
4.8.1 | 643 | 12/20/2023 |
4.8.0 | 114 | 12/20/2023 |
4.7.1 | 650 | 11/7/2023 |
4.7.0 | 577 | 8/20/2023 |
4.6.0 | 3,052 | 5/17/2022 |
4.5.1 | 1,591 | 4/27/2022 |
4.5.0 | 1,491 | 11/22/2021 |
4.4.3 | 435 | 10/19/2021 |
4.4.2 | 561 | 7/18/2021 |
4.4.1 | 409 | 7/6/2021 |
4.4.0 | 1,164 | 4/25/2021 |
4.3.0 | 422 | 4/22/2021 |
4.3.0-pre01 | 273 | 4/21/2021 |
4.2.3 | 1,795 | 2/27/2021 |
4.2.2 | 1,013 | 12/11/2020 |
4.2.1 | 1,143 | 10/23/2020 |
4.2.0 | 517 | 9/21/2020 |
4.1.2 | 723 | 8/26/2020 |
4.1.1 | 1,429 | 4/29/2020 |
4.1.0 | 535 | 4/1/2020 |
4.0.2 | 1,108 | 1/27/2020 |
4.0.1 | 621 | 1/6/2020 |
4.0.0 | 1,279 | 12/22/2019 |
4.0.0-pre01 | 721 | 12/17/2019 |
3.0.0 | 1,528 | 10/20/2019 |
2.3.0 | 1,269 | 9/28/2019 |
2.2.0 | 1,047 | 9/3/2019 |
2.1.0 | 1,081 | 8/22/2019 |
2.0.1 | 592 | 6/24/2019 |
2.0.0 | 1,238 | 1/1/2019 |
2.0.0-pre02 | 562 | 12/23/2018 |
2.0.0-pre01 | 582 | 12/18/2018 |
1.7.0 | 186 | 4/30/2023 |
1.6.1 | 478 | 4/15/2022 |
1.6.0 | 642 | 9/28/2019 |
1.5.0 | 612 | 9/3/2019 |
1.4.1 | 624 | 6/25/2019 |
1.4.0 | 675 | 5/20/2019 |
1.3.0 | 742 | 12/16/2018 |
1.2.1 | 1,120 | 5/9/2018 |
1.2.0 | 1,826 | 8/23/2017 |
1.1.0 | 1,286 | 2/14/2017 |
1.0.1 | 2,376 | 8/26/2016 |
1.0.0 | 1,452 | 8/26/2016 |