Как вызвать контроллер, который является асинхронным, и вернуть Task <IHttpActionResult>непосредственно в C # - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь получить результаты действия непосредственно от контроллера, не выполняя http-запрос

, прямо сейчас создаю экземпляр контроллера и вызываю метод, пытающийся добавить результаты к некоторому элементу, который находится вДругой тип

// other file 
_params.Id = item.Id;
var Presponse = new ProductsController().GetProducts(_params);
item.p = Presponse;

//controller file
public class ProductsController : ApiController
{
    [HttpPost]
    [Route("products")]
    [Compress]
    // controller method signature
    public async Task<IHttpActionResult> GetProducts(TheParams model){ 
       .... some logic ....
       Ok(results) 
    }
}

Он говорит, что я не могу неявно преобразовать тип, в моем случае, в класс DTO, который я имею, я ожидаю получить значение ответа (объекта), как HTTPЗапрос, но прямо и разыграть его.

1 Ответ

0 голосов
/ 18 февраля 2019
// You could use await if your method is async, for simplicity just Result.
  IHttpActionResult actionResult = new ProductsController().GetProducts(_params).Result;

// if your result is a Product Type
  var contentResult = actionResult as OkNegotiatedContentResult<Product>;
  Product product = contentResult.Content;

// Map to your DTO class for example
   ProductDto dto = new ProductDto()
   {
        Id = product.Id,
        Name = product.Name
    };
...