如何从 OkObjectResult 获取动态属性
How do I get dynamic properties from OkObjectResult
I return 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 : 'object' does not contain a definition for 'count'
尝试反射:
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")]
I return 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 : 'object' does not contain a definition for 'count'
尝试反射:
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")]