# Controllers

Umbraco contains different types of controllers to perform different tasks:

* [Render MVC Controllers](#render-mvc-controllers)
* [Surface Controllers](#surface-controllers)
* [Public API Controllers](#public-api-controllers)
* [Backoffice API Controllers](#backoffice-api-controllers)

## Render MVC Controllers

When you make a page request to the MVC application, a controller is responsible for returning the response to that request. The controller can perform one or more actions.

By default, all front-end requests to an Umbraco site are auto-routed via the *Index* action of a core Controller: `Umbraco.Cms.Web.Common.Controllers.RenderController`.

For details on using Render MVC Controllers, see the [Controller & Action Selection](https://docs.umbraco.com/umbraco-cms/implementation/default-routing/controller-selection) article.

## Surface Controllers

A SurfaceController is an MVC controller that interacts with the front-end rendering of an UmbracoPage. They can be used for rendering view components and for handling Form data submissions. SurfaceControllers are auto-routed which means you don't have to add/create your own routes for these controllers to work.

All implementations of Surface Controllers inherit from the base class: `Umbraco.Cms.Web.Website.Controllers.SurfaceController`.

For details on using Surface Controllers, see the [Surface Controllers](https://docs.umbraco.com/umbraco-cms/reference/routing/surface-controllers) article.

## Public API Controllers

A public API Controller is an ASP.NET Core API controller that is used for creating publicly available REST services. For details on implementing public API Controllers, see the [Umbraco API Controllers](https://docs.umbraco.com/umbraco-cms/reference/routing/umbraco-api-controllers) article.

## Backoffice API Controllers

For a comprehensive guide to writing APIs for the Management API, read the [Creating a Backoffice API article](https://docs.umbraco.com/umbraco-cms/tutorials/creating-a-backoffice-api).

{% hint style="info" %}
The Umbraco Backoffice API is also known as the Management API. Thus, a Backoffice API Controller is often referred to as a Management API Controller.
{% endhint %}

***

Umbraco HQ offers a training course covering everything you need to know about working with MVC in an Umbraco context. The course targets anyone who's interested in learning how to utilize Umbraco´s built-in features and basic functionality with standard MVC.

[Explore the MVC course](https://umbraco.com/training/course-details/mvc-and-umbraco/) to learn more about the topics covered and how it can enhance your Umbraco development skills.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.umbraco.com/umbraco-cms/implementation/controllers.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
