9.2 Контроллеры
Пользователь может создавать собственные контроллеры и обращаться к методам этих контроллеров через REST API.
Приведем пример контроллера и рассмотрим его:
|
// Пример контроллераusing Eos.Delo.Platform.Storage.Constants;using Eos.Delo.Platform.Storage.Helpers;
using Eos.Delo.Platform.Storage.Model;
using Eos.Delo.Platform.Storage.Services.Caching;
using Eos.Delo.Samples.ControllersAndCustomQueries.Custom;
using Microsoft.AspNetCore.Mvc;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading;
using System.Threading.Tasks;
namespace Eos.Delo.Samples.ControllersAndCustomQueries.Areas.Sample.Controllers
{
[Authentication]
[Route("sample/simplesample")]
public class SimpleSampleController : ControllerBase
{
private readonly UserCachingService _userService;
private readonly CustomQueriesSample _customQueries;
public SimpleSampleController(UserCachingService userService, CustomQueriesSample customQueries)
{
_userService = userService;
_customQueries = customQueries;
}
[HttpGet("getdepartmentwithparent")]
public async Task<ActionResult> GetDepartmentWithParentAsync([FromServices] IDataContext db, [FromQuery(Name = "isnnode")] long isnNode)
{
var cancellationToken = new CancellationToken();
var user = await _userService.GetUserAsync(User, cancellationToken);
var baseContext = MiddlewareHelper.CreateQueryContext(db, user, null, ExtProtOperationType.None, cancellationToken);
var result = await _customQueries.GetDepartmentWithParentAsync(isnNode, baseContext);
return Ok(result);
}
[HttpPost("createtestdepartment")]
public async Task<ActionResult> CreateTestDepartmentAsync([FromServices] IDataContext db)
{
var cancellationToken = new CancellationToken();
var user = await _userService.GetUserAsync(User, cancellationToken);
var baseContext = MiddlewareHelper.CreateMutationContext(db, user, null, ExtProtOperationType.Mutation, cancellationToken);
await _customQueries.CreateTestDepartmentAsync(baseContext);
return Ok();
}
}
}
|
Контроллер определяется атрибутом Route, где прописывается путь к контроллеру. Класс контроллера наследуется от ControllerBase, но также можно создавать базовые контроллеры, от которых будут наследоваться основные. Сервисы внедряются стандартно через DI в конструкторе, либо через атрибут FromServices прямо в методе. Затем можно определить методы Get и Post с помощью одноименных атрибутов. Для данных методов также можно прописать конкретный путь, например [HttpGet("some-address")]. В дальнейшем работа с методами контроллера идет стандартными средствами через HTTP.
