Как получить динамические свойства из OkObjectResult - PullRequest
0 голосов
/ 16 апреля 2019

Я возвращаю IActionResult со значением анонимного объекта из метода контроллера.
Как мне снова получить данные?

Вот метод контроллера, сведенный к самой проблеме:

[HttpPost]
public async Task<IActionResult> UploadFile(IFormFile file)
{
    long size = file.Length;
    return Ok(new { count = 1, size });
}

Тогда я получаю свойство .Value, которое является object, и сделаю его dynamic.
Но нет, это не признается.

[Fact]
public async Task UploadFileTest()
{
    //  #   Given.
    var formFile = new Mock<IFormFile>();
    var sut = new HomeController(null);

    //  #   When.
    IActionResult result = await sut.UploadFile(formFile.Object);

    //  #   Then.
    OkObjectResult okResult = (OkObjectResult)result; // Ok.
    dynamic dynValue = okResult.Value; // Ok.
    var count = dynValue.count; // Not ok.
}

Ожидаемый результат:

count должно быть 1.

Фактический результат:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: «объект» не содержит определения для «счетчика»

1 Ответ

2 голосов
/ 16 апреля 2019

Попробуйте отражение:

var count = (int)okResult.Value.GetType().GetProperty("count").GetValue(okResult.Value);
...