Есть ли у вас опыт работы с ASP.NET MVC?

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

Ответ

Да, есть опыт разработки веб-приложений на ASP.NET MVC (как .NET Framework, так и Core версий). Работал с полным стеком паттерна Model-View-Controller.

Пример типичного контроллера с внедрением зависимостей:

public class ProductController : Controller
{
    private readonly IProductService _productService;
    private readonly ILogger<ProductController> _logger;

    public ProductController(IProductService productService, ILogger<ProductController> logger)
    {
        _productService = productService;
        _logger = logger;
    }

    // GET: Product/Index
    public async Task<IActionResult> Index()
    {
        var products = await _productService.GetAllActiveProductsAsync();
        return View(products);
    }

    // POST: Product/Create
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create(ProductViewModel model)
    {
        if (!ModelState.IsValid)
            return View(model);

        try
        {
            await _productService.CreateProductAsync(model);
            return RedirectToAction(nameof(Index));
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Ошибка создания продукта");
            ModelState.AddModelError("", "Не удалось создать продукт.");
            return View(model);
        }
    }
}

С чем работал:

  • Razor Views: Создание строго типизированных представлений, частичных представлений (PartialView), Layout-страниц.
  • Маршрутизация: Настройка кастомных маршрутов в Startup.cs/Program.cs.
  • Фильтры: Использование встроенных ([Authorize], [ValidateAntiForgeryToken]) и создание кастомных фильтров действий.
  • Привязка моделей (Model Binding) и валидация с помощью Data Annotations.
  • AJAX и JSON: Возврат JsonResult и работа с JavaScript для динамического обновления интерфейса.