在 ASP.Net 核心 API 方法中从 ActionResult<object> 获取值
Get a Value from ActionResult<object> in a ASP.Net Core API Method
我尝试在 ASP.NET 核心 API 方法中从 ActionResult<object>
获取值。
API 有不同的控制器。我尝试在控制器 A 中使用控制器 B 的方法来 return 结果值。我从控制器 B 得到一个 ActionResult
对象。我可以在 ResultObject
中看到调试器的值,但是我怎样才能访问其中的结果值?
public ActionResult<object> getSourceRowCounter(string sourcePath) //Method from Controller A
{
var result = ControllerB.GetValue($"{sourcePath}.{rowCounterVariableName}");
var result2 = result.Value; //null
var result3 = result.Result; //typ: {Microsoft.AspNetCore.Mvc.OkObjectResult} <-see Value=4 in it with Debugger
//var result4 = result3.Value; //Error?!
//var result5 = result3.Content; //Error?!
//var result6 = result3.?????; //How can i get the Value = 4?
return Ok(result); //should only return value 4 and not the whole object
}
如果您确定它是 OkObjectResult
的类型,那么在使用它之前进行转换,如下所示:
var result3 = (OkObjectResult)result.Result; // <-- Cast is before using it.
var result4 = result3.Value; //<-- Then you'll get no error here.
如果您从操作中调用 API 并且您希望在操作中访问 API returns 确定(结果),那么以下代码可以帮助您:
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
return Ok(response.Content); // returns API result
}
假设您在 Repository.cs
中有示例函数:
public async Task<IEnumerable<Todo>> GetTodosAsync() =>
await _context.Todos.ToListAsync();
Controller.cs
中的函数如下所示:
public async Task<ActionResult<IEnumerable<Todo>>> GetTodosAsync() =>
Ok(await _repository.GetTodosAsync());
然后在你的 UnitTest.cs
中你可以通过这样做得到结果:
var result = await controller.GetTodosAsync();
// list of todos is in `actual` variable
var actual = (result.Result as OkObjectResult).Value as IEnumerable<Todo>;
// or use `ObjectResult` instead of `OkObjectResult` for multiple types
我尝试在 ASP.NET 核心 API 方法中从 ActionResult<object>
获取值。
API 有不同的控制器。我尝试在控制器 A 中使用控制器 B 的方法来 return 结果值。我从控制器 B 得到一个 ActionResult
对象。我可以在 ResultObject
中看到调试器的值,但是我怎样才能访问其中的结果值?
public ActionResult<object> getSourceRowCounter(string sourcePath) //Method from Controller A
{
var result = ControllerB.GetValue($"{sourcePath}.{rowCounterVariableName}");
var result2 = result.Value; //null
var result3 = result.Result; //typ: {Microsoft.AspNetCore.Mvc.OkObjectResult} <-see Value=4 in it with Debugger
//var result4 = result3.Value; //Error?!
//var result5 = result3.Content; //Error?!
//var result6 = result3.?????; //How can i get the Value = 4?
return Ok(result); //should only return value 4 and not the whole object
}
如果您确定它是 OkObjectResult
的类型,那么在使用它之前进行转换,如下所示:
var result3 = (OkObjectResult)result.Result; // <-- Cast is before using it.
var result4 = result3.Value; //<-- Then you'll get no error here.
如果您从操作中调用 API 并且您希望在操作中访问 API returns 确定(结果),那么以下代码可以帮助您:
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
return Ok(response.Content); // returns API result
}
假设您在 Repository.cs
中有示例函数:
public async Task<IEnumerable<Todo>> GetTodosAsync() =>
await _context.Todos.ToListAsync();
Controller.cs
中的函数如下所示:
public async Task<ActionResult<IEnumerable<Todo>>> GetTodosAsync() =>
Ok(await _repository.GetTodosAsync());
然后在你的 UnitTest.cs
中你可以通过这样做得到结果:
var result = await controller.GetTodosAsync();
// list of todos is in `actual` variable
var actual = (result.Result as OkObjectResult).Value as IEnumerable<Todo>;
// or use `ObjectResult` instead of `OkObjectResult` for multiple types