簡體   English   中英

如何從 OkObjectResult 獲取動態屬性

[英]How do I get dynamic properties from OkObjectResult

我從控制器方法返回帶有匿名對象值的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:“對象”不包含“計數”的定義

嘗試反射:

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

如果您的測試和原始代碼不在同一個項目中,如果是這樣,您需要在原始代碼項目中創建AssemblyInfo.cs以使其(原始)共享動態對象結構。

您可以在https://sodocumentation.net/csharp/topic/4264/assemblyinfo-cs-examples#-internalsvisibleto-看到更多信息-

它應具有如下代碼(將字符串替換為您的測試名稱)

[assembly: InternalsVisibleTo("MyAssembly.UnitTests")]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM