-
-
Notifications
You must be signed in to change notification settings - Fork 9
Controllers basics
Alexanderius edited this page Jun 6, 2024
·
5 revisions
Simplify.Web has 6 types of controllers base classes:
-
Controller2
- general controller, processes HTTP request; -
Controller2<T>
- the same asController2
class, but can get view model from HTTP request (T
- is a type of view model);
-
Controller
- general controller, processes HTTP request; -
AsyncController
- the same asController
class, but can process request asynchronously (can contain await operations and return Task); -
Controller<T>
- the same asController
class, but can get view model from HTTP request (T
- is a type of view model); -
AsyncController<T>
- the same asController<T>
but can process request asynchronously.
- User created controller must be derived from one of the controller base classes specified above;
- Should contain
Invoke
method (executes on request process); - Classes derived from
ControllerResponse
can do some actions, for example:- Put template data to DataCollector (main class for page HTML data collection);
- Return some JSON data using
Json
response; - Redirect client to another page.
- If a controller does not have any attributes, then it will run on each HTTP request;
- To set controller for handling only specific action and request type you can use controller attributes from Simplify.Web.Attributes namespace.
Here is the list, description and examples of available controller responses.
Here is the list, description and examples of available controller attributes.
- Should return instance of any class derived from ControllerResponse class or return null if there is no controller response to return;
- Can have return type of
void
,Task
,ControllerResponse
orTask<ControllerResponse>
; - If it has
void
return type, then it means that controller is synchronous and don't need to return controller response; - If it has
Task
return type, then it means that controller is asynchronous and don't need to return controller response; - If it has
ControllerResponse
return type, then it means that controller wants to return controller response and it is synchronous; - If it has
Task<ControllerResponse>
return type, then it means that controller wants to return controller response and it is asynchronous;
Example of the controller which serializes collection to a JSON string thereby skipping backend page generation
[Get("api/weatherTypes")]
public class SampleDataController : Controller2
{
private static readonly string[] Summaries =
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
public ControllerResponse Invoke()
{
try
{
return Json(items);
}
catch (Exception e)
{
Console.WriteLine(e);
return StatusCode(500);
}
}
}
[Delete("api/v1/users/{id}")]
public class SampleDataController(IUsersService service) : Controller2
{
public async Task<ControllerResponse> Invoke(int id)
{
await service.DeleteAsync(id);
return StatusCode(204);
}
}
Example of the controller which loads a Navbar.tpl
template file and puts it to the DataCollector
Navbar
variable
public class NavbarController :Controller2
{
public ControllerResponse Invoke() =>
return InlineTpl("Navbar", TemplateFactory.Load("Navbar"));
}
Example of the controller which serializes collection to a JSON string thereby skipping backend page generation
[Get("api/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 Json(items);
}
catch (Exception e)
{
Console.WriteLine(e);
return StatusCode(500);
}
}
}
Example of the controller which loads a Navbar.tpl
template file and puts it to the DataCollector
Navbar
variable
public class NavbarController :Controller
{
public override ControllerResponse Invoke() =>
return InlineTpl("Navbar", TemplateFactory.Load("Navbar"));
}
Example of the v1 controller which loads an About.tpl
template file and puts it to the DataCollector
MainContent
variable
This controller runs only on HTTP GET request with about
action like: http://mysite.com/about
[Get("about")]
public class AboutController : Controller
{
public override ControllerResponse Invoke() =>
return StaticTpl("Static/About");
}
Async controllers must return Task<ControllerResponse>
instead of just ControllerResponse
public class NavbarController : AsyncController
{
public async override Task<ControllerResponse> Invoke() =>
return InlineTpl("Navbar", await TemplateFactory.LoadAsync("Navbar"));
}
To access a view from a controller you should use GetView<T>()
method.
public class MyController : Controller
{
public override ControllerResponse Invoke()
{
var view = GetView<LoginView>();
...
}
}
- Getting Started
- Main Simplify.Web principles
- Simplify.Web controllers
- Simplify.Web views
- Simplify.Web templates
- Simplify.Web configuration
- Templates variables
- Static content
- Template factory
- Data collector
- String table
- File reader
- Web context
- Environment
- Dynamic environment
- Language manager
- Redirector
- HTML