What's the advantage or recommendation on using IActionResult
as the return type of a WebApi controller instead of the actual type you want to return?
Most of the examples I've seen return IActionResult
, but when I build my first site I exclusively use View Model classes as my return types.... now I feel like I did it all wrong!
The IActionResult return type is appropriate when multiple ActionResult return types are possible in an action. The ActionResult types represent various HTTP status codes. Any non-abstract class deriving from ActionResult qualifies as a valid return type.
The IActionResult is an interface and it is used to return multiple types of data. For example, if you want to return NotFound, OK, Redirect, etc. data from your action method then you need to use IActionResult as the return type from your action method.
Returning IActionResult is helpful in scenarios where the web API action is supposed to return multiple types. e.g. if record not found, then action can return NotFoundResult and if Record is found then API can return 200 OK with record to the caller.
IHttpActionResult is for ASP.NET Web Api, while IActionResult is for ASP.NET Core. There's no such thing as "Web Api" in ASP.NET Core. It's all just "Core". However, some people still refer to creating an ASP.NET Core API as a "Web Api", which adds to the confusion.
The main advantage is that you can return error/status codes or redirects/resource urls.
For example:
public IActionResult Get(integer id) { var user = db.Users.Where(u => u.UserId = id).FirstOrDefault(); if(user == null) { // Returns HttpCode 404 return NotFound(); } // returns HttpCode 200 return ObjectOk(user); }
or
public IActionResult Create(User user) { if(!ModelState.IsValid) { // returns HttpCode 400 return BadRequest(ModelState); } db.Users.Add(user); db.SaveChanges(); // returns HttpCode 201 return CreatedAtActionResult("User", "Get", new { id = user.Id} ); }
The main advantage is that you can easily test your code using a mocking framework.
And as you build your controllers, you can easily change your return object as well. IActionResult is a interface and has many implementations like JsonResult, ViewResult, FileResult and so on.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With