Akram Samir
Akram Samir

Reputation: 11

how to create method takes task lambda expression async

public async Task<HttpResponseMessage> getOne(HttpRequestMessage request, int id)
{ 

   return CreateResponse(async () =>
    {
        var category = await _unitOfWork.Categories.GetSingleAsync(id);
        var categoryVm = Mapper.Map<Category, CategoryViewModel>(category);

        HttpResponseMessage response = request.CreateResponse<CategoryViewModel>(HttpStatusCode.OK, categoryVm);

        return response;
    });
}

Base Class

protected Task<IHttpActionResult> CreateResponse(Func<IHttpActionResult, Task> function)
{
    IHttpActionResult response = null;
    try
    {
        response = function.Invoke();

    }
}

Upvotes: 1

Views: 484

Answers (1)

Nkosi
Nkosi

Reputation: 247591

Read up on Cross cutting concerns.

You are giving yourself unnecessary trouble. Your example can be reduced to :

public async Task<IHttpActionResult> getOne(int id) {
    var category = await _unitOfWork.Categories.GetSingleAsync(id);
    var categoryVm = Mapper.Map<Category, CategoryViewModel>(category);
    return Ok(categoryVm);
}

Try to keep controller lean.

Check this answer

Upvotes: 1

Related Questions