Click here to Skip to main content
15,844,477 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
Why use IActionResult and not ActionResult in ASP.NET Core MVC?

In ASP.NET Web App, when we Create Project, then by default, one Home Controller will be added there, and here used ActionResult. But for ASP.NET Core Web App, when we create Project, then in default Home Cotroller, IActionresult will be used.

So why use IActionResult in core web app and not ActionResult?
Is it possible to use ActionResult in core web app?

What I have tried:

In ASP.NET MVC:
C#
public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }
    }


In ASP.NET Core MVC:
C#
public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;

        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }

        public IActionResult Index()
        {
            //ViewBag. = System.Diagnostics.Process.GetCurrentProcess().ProcessName;
            return View();
        }

        public IActionResult Privacy()
        {
            return View();
        }

        [ResponseCache(Duration = 0, 
         Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel 
            { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
Posted
Updated 12-Oct-23 12:00pm
v2
Comments
Gerry Schmitz 11-Oct-23 14:55pm    
The implication is that an "interface" "never" changes; a class that implements that interface, can implement other interfaces if it needs to "change".

You can use whatever "is in scope" for that platform; taking into consideration who is "interfacing" with what (eg. through common / shared namespaces)

1 solution

In an ASP.NET Core Web App, the use of IActionResult instead of ActionResult is part of the framework's design to provide greater flexibility and compatibility with various result types such as ViewResult, JsonResult, ContentResult, and more. This design allows for a more modular and extensible approach, enabling developers to choose the specific result type that suits the needs of a particular action method.

In traditional ASP.NET Web Apps (non-Core), the ActionResult is used, which is a specific class that derives from IActionResult. It's more rigid in the sense that it's a concrete class, and it's tied to a specific result type.

Using IActionResult is the recommended and more flexible approach in ASP.NET Core Web Apps, but using ActionResult is possible and may be appropriate in certain situations where you don't need the additional flexibility provided by IActionResult.
 
Share this answer
 
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
Top Experts
Last 24hrsThis month


CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900