Get a Value from ActionResult<object> in a ASP.Net Core API Method
16,043
Solution 1
If you're sure that it is a type of OkObjectResult
then cast before using it like below:
var result3 = (OkObjectResult)result.Result; // <-- Cast is before using it.
var result4 = result3.Value; //<-- Then you'll get no error here.
Solution 2
Suppose you have example function in Repository.cs
:
public async Task<IEnumerable<Todo>> GetTodosAsync() =>
await _context.Todos.ToListAsync();
And function in Controller.cs
looks like below:
public async Task<ActionResult<IEnumerable<Todo>>> GetTodosAsync() =>
Ok(await _repository.GetTodosAsync());
Then in your UnitTest.cs
you can get results by doing this:
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
Comments
-
Localbug almost 2 years
I try to get a value from
ActionResult<object>
in an ASP.NET Core API method.The API has a different controller. I try to use a method from controller B in controller A to return the result value. I get an
ActionResult
object from controller B. I can see the value with the debugger in theResultObject
but how can I get access to the result value in it?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 }
-
Michael Freidgeim almost 4 yearsDoes this answer your question? How to Unit Test with ActionResult<T>?
-
-
dragos over 3 yearsHow to handle this when instead of
OkObjectResult
, we have 4 different types, can we do this without cast? -
Rokit over 3 yearsYou can also just cast to
ObjectResult
and still getValue
, which can handle multiple result types, egOkObjectResult
,UnauthorizedObjectResult
, etc. -
Kris over 2 yearsUnderrated comment!