2016-11-07 41 views
1
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; 
    }); 
} 

基类如何创建方法接受任务lambda表达式异步

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

    } 
} 

回答

1

跨领域阅读起来关注

你给自己不必要的麻烦。您的示例可以简化为:

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

尽量保持控制器精益。

检查this答案