---
title: Separate Parsing From Controllers
impact: HIGH
impactDescription: keeps controllers thin and focused
tags: controller, parsing, transformation, patterns, quality, csharp
---

## Separate Parsing From Controllers

Controllers should handle HTTP, not data transformation. Use AutoMapper or Mappers.

**Incorrect (mapping in controller):**

```csharp
[HttpGet]
public IActionResult GetUser(int id)
{
    var user = _repo.Get(id);
    // Manual mapping logic cluttering controller
    var dto = new UserDto 
    {
        FullName = user.FirstName + " " + user.LastName,
        Age = DateTime.Now.Year - user.Dob.Year
    };
    return Ok(dto);
}
```

**Correct (AutoMapper or dedicated mapper):**

```csharp
[HttpGet]
public IActionResult GetUser(int id)
{
    var user = _repo.Get(id);
    var dto = _mapper.Map<UserDto>(user);
    return Ok(dto);
}
```

**Tools:** AutoMapper, Mapster
