Introduction
In this article, we’ll discuss Controllers in the MVC .NET framework. If you choose the MVC framework then everything is a result of an action and actions are categorizing in controllers. Let’s see it in our application. Please, read our previous article before proceeding to this article where we learn Dependency Injection in ASP.NET Core.
So, we open the solution explorer we have the controllers for it. we have one default controller here which is called HomeController.
![controller in asp.net core](https://i0.wp.com/monkelite.com/wp-content/uploads/2020/03/controller.png?resize=332%2C442&ssl=1)
The first thing, we can see the default Home controller is the class in the controller class that means an action inside a controller. And as you can see this default Test controller And the index is the default action.
Add Controllers
Let’s right-click on controllers for their Then select Add controller.
![add Controller in asp.net core](https://i0.wp.com/monkelite.com/wp-content/uploads/2020/03/addController.png?resize=800%2C434&ssl=1)
Now, we have this dialog box to define which kind of controllers we would like to create.
![ap.net mvc controller template](https://i0.wp.com/monkelite.com/wp-content/uploads/2020/03/chooseTemplate.png?resize=800%2C538&ssl=1)
Let’s create an empty one. Now we are asked to give it a name. In .NET MVC and we see all controllers must-have controller at the end of the name. we chose this controller.
![Name To Controller in asp.net mvc](https://i0.wp.com/monkelite.com/wp-content/uploads/2020/03/NameToController.png?resize=614%2C124&ssl=1)
This is an index action that is created by default when we created the controller. then, we delete this one to create another action.
we create a new public method here.
The name of our action is a string out the output is a simple string and as so it returns a string value.
![return String controller in asp.net mvc](https://i0.wp.com/monkelite.com/wp-content/uploads/2020/03/returnString.png?resize=597%2C341&ssl=1)
So, then save and test it in the browser to test our new action.
![asp.net core mvc output](https://i0.wp.com/monkelite.com/wp-content/uploads/2020/03/output.png?resize=777%2C260&ssl=1)
So when there are a new request and the source code is changed it automatically gets compiled back to our ID.
Let’s remember something we have in our out in Startup.cs. we have an option on that segment which is called ID.
![maproute in asp.net core mvc](https://i0.wp.com/monkelite.com/wp-content/uploads/2020/03/maproute.png?resize=800%2C418&ssl=1)
So, let’s use it in our actions.
We can add a parameter called ID which is not case sensitive.
![params in asp.net core](https://i0.wp.com/monkelite.com/wp-content/uploads/2020/03/sensitive.png?resize=800%2C407&ssl=1)
That type can be anything for here we chose in and we also changed the return value to include ID.
![return values from controller](https://i0.wp.com/monkelite.com/wp-content/uploads/2020/03/returnNumber1.png?resize=582%2C376&ssl=1)
Let’s see, we were tested in the browser.
So, now in browse there, if we add a number and then pressing enter, We will have these result
![pass queryparams in asp.net mvc](https://i0.wp.com/monkelite.com/wp-content/uploads/2020/03/returnNumber2.png?resize=800%2C301&ssl=1)
The controller returns JSON data
The following example returns JSON data. Notice, the return type of the UserInfo() method is set to JsonResult as we are explicitly returning JSON data. In this case, UserInfo() method always returns JSON data. It does not respect content negotiation and ignores the Accept Header.
public class TestController : Controller
{
private readonly IUserRepository _UserRepository;
public TestController(IUserRepository UserRepository)
{
_UserRepository = UserRepository;
}
public JsonResult UserInfo()
{
User model = _UserRepository.GetUser(1);
return Json(model);
}
}
Controller returns ObjectResult
The following example respects content negotiation. It shows the Request Accept Header and if it is set to application/xml, then XML data is returned. If the Accept header is set to application/JSON, then JSON daThe following example respects content negotiation. It shows at the Request Accept Header and if it is set to application/XML, then XML data is returned. If the Accept header is set to application/JSON, then JSON data is returned.
public class TestController : Controller
{
private IUserRepository _UserRepository;
public TestController(IUserRepository UserRepository)
{
_UserRepository = UserRepository;
}
public ObjectResult UserInfo()
{
User model = _UserRepository.GetUser(1);
return new ObjectResult(model);
}
}
Configure XML format Service
So, it returns the data in XML format and we have to add Xml Serializer Formatter by calling AddXmlSerializerFormatters() method in ConfigureServices() method in Startup.cs file.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddXmlSerializerFormatters();
}
Controller returns View
The below example returns a View. Notice we have set ViewResult as the return type for the UserInfo method as we are returning a view.
public class TestController : Controller
{
private IUserRepository _UserRepository;
public TestController(IUserRepository UserRepository)
{
_UserRepository = UserRepository;
}
public ViewResult UserInfo()
{
User model = _UserRepository.GetUser(1);
return View(model);
}
}
At this point, if we run the application and navigate to http://localhost:49119/Test/UserInfo, we get the following error. This is because we do not have the required View file created yet. We will discuss Views in MVC in our next article.
InvalidOperationException: The view ‘UserInfo’ was not found. The following locations were searched: /Views/Test/UserInfo.cshtml /Views/Shared/UserInfo.cshtml /Pages/Shared/UserInfo.cshtml data is returned.
Thank you for reading this article, I hope you will understand the Controllers in ASP.NET Core MVC. We’ll get into more details about this when we’ll learn Views in ASP.NET Core MVC in the next article.
Thanks for the purpose of giving like amazing subject material.