[英]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.