Как мне избавиться от этого шаблона ASP.NET?C#

Место общения программистов C#
Anonymous
Как мне избавиться от этого шаблона ASP.NET?

Сообщение Anonymous »

Я создаю REST API в ASP.NET Core. Многие конечные точки работают по одному и тому же шаблону:
  • Загрузить рабочую область
  • Включить участников и пользователей
  • Проверить, принадлежит ли текущий пользователь рабочей области
  • Вернуть 404/403 соответственно
Пример:

Код: Выделить всё

var workspace = await db.Workspaces
.Include(w => w.Members)
.ThenInclude(m => m.User)
.FirstOrDefaultAsync(w => w.Id == workspaceId);

if (workspace is null)
return NotFound();

if (!workspace.Members.Any(m => m.User.Email == User.Identity!.Name))
return Forbid();
Этот шаблон повторяется на нескольких контроллерах (не только с сущностями Workspace) и начинает становиться шаблонным.
Я пробовал использовать политики авторизации, но для моего текущего масштаба это похоже на перепроектирование.
Мне бы очень хотелось от этого избавиться. Что бы вы сделали в этом случае?
Полный пример кода конечной точки:

Код: Выделить всё

[HttpPost("{workspaceId}")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task Create(Guid workspaceId, [FromBody] AppointmentCreateModel model)
{
var workspace = await db.Workspaces
.Include(w => w.Members)
.ThenInclude(m => m.User)
.FirstOrDefaultAsync(w => w.Id == workspaceId);

if (workspace is null)
return NotFound();

if (!workspace.Members.Any(m => m.User.Email == User.Identity!.Name))
return Forbid();

var appointment = new Appointment
{
WorkspaceId = workspaceId,
ContactName = model.ContactName,
OriginalName = model.ContactName,
AppointmentTime = model.AppointmentTime,
Source = AppointmentSource.Dashboard,
CreatedAt = DateTime.UtcNow,
};

db.Appointments.Add(appointment);

await db.SaveChangesAsync();

return Ok(new AppointmentDto(appointment));
}
Спасибо!

Вернуться в «C#»