从 ASP.Net Core API 方法中的 ActionResult<object> 获取值

Loc*_*bug 7 c# actionresult asp.net-core asp.net-core-webapi

我尝试从ActionResult<object>ASP.NET Core API 方法中获取值。

API 有一个不同的控制器。我尝试使用控制器 A 中控制器 B 的方法返回结果值。我ActionResult从控制器 B获得了一个对象。我可以在调试器中看到该值,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
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

mik*_*ajs 23

假设您有示例函数Repository.cs
public async Task<IEnumerable<Todo>> GetTodosAsync() =>
   await _context.Todos.ToListAsync();
Run Code Online (Sandbox Code Playgroud)
函数Controller.cs如下所示:
public async Task<ActionResult<IEnumerable<Todo>>> GetTodosAsync() =>
    Ok(await _repository.GetTodosAsync());
Run Code Online (Sandbox Code Playgroud)
然后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
Run Code Online (Sandbox Code Playgroud)


Cod*_*und 10

如果您确定它是一种OkObjectResultthen类型,请在使用它之前进行转换,如下所示:

var result3 = (OkObjectResult)result.Result; // <-- Cast is before using it.
var result4 = result3.Value; //<-- Then you'll get no error here.
Run Code Online (Sandbox Code Playgroud)

  • 您还可以只转换为“ObjectResult”并仍然获得“Value”,它可以处理多种结果类型,例如“OkObjectResult”、“UnauthorizedObjectResult”等。 (4认同)