Вы разрабатывали веб-приложение с нуля на ASP.NET Core?

«Вы разрабатывали веб-приложение с нуля на ASP.NET Core?» — вопрос из категории ASP.NET Core, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, неоднократно. Типичный стек для нового проекта включает:

  • Backend: ASP.NET Core Web API для RESTful-сервисов или MVC для серверного рендеринга.
  • Аутентификация/Авторизация: JWT-токены или Identity Server.
  • Доступ к данным: Entity Framework Core (Code-First или Database-First) с репозиториями и Unit of Work.
  • Документация API: Интеграция Swagger (Swashbuckle) с XML-комментариями.
  • Фронтенд: Для SPA — отдельное приложение на React/Angular/Vue, взаимодействующее с API. Для более простых случаев — Razor Pages или Blazor Server/WASM.
  • Инфраструктура: Docker-контейнеризация, развертывание в облаке (Azure/AWS), настройка CI/CD пайплайнов (GitHub Actions, GitLab CI).

Пример контроллера для Web API:

[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    private readonly IProductService _productService;

    public ProductsController(IProductService productService)
    {
        _productService = productService;
    }

    [HttpGet]
    [ProducesResponseType(typeof(IEnumerable<ProductDto>), StatusCodes.Status200OK)]
    public async Task<IActionResult> GetAll()
    {
        var products = await _productService.GetAllAsync();
        return Ok(products);
    }

    [HttpPost]
    [ProducesResponseType(typeof(ProductDto), StatusCodes.Status201Created)]
    [ProducesResponseType(StatusCodes.Status400BadRequest)]
    public async Task<IActionResult> Create([FromBody] CreateProductRequest request)
    {
        if (!ModelState.IsValid)
            return BadRequest(ModelState);

        var createdProduct = await _productService.CreateAsync(request);
        return CreatedAtAction(nameof(GetById), new { id = createdProduct.Id }, createdProduct);
    }
}

Ключевые практики: разделение ответственности (Controllers -> Services -> Repositories), использование DTO, валидация запросов, корректные HTTP-статусы и обработка ошибок глобально через middleware.