Для обработки запроса каждая страница может использовать методы OnGet/OnPost/OnPut и так далее, то есть такие методы, которые предназначены для определенного вида запросов. Однако что если нам необходимо определить на странице для разных ситуаций несколько методов для обработки запроса одного и того же типа запросов (GET или POST)? В этом случае мы можем добавить в код страницы дополнительные обработчики запросов.
Например, пусть в проекте определен класс Person, который представляет данные:
И пусть в проекте есть страница Razor Person.cshtml и связанный с ней файл кода Person.cshtml.cs .

Пусть Person.cshtml.cs содержит следующее определение класса PersonModel:
Класс содержит некоторые начальные данные в переменной people — список объектов Person. При стандартном get-запросе в свойство DisplayedPeople передается весь этот список.
И также определены два метода — обработчики для фильтрации списка по имени и возрасту объекта Person. Так как оба этих обработчики будут также обрабатывать запросы get, то их название начинается с префикса OnGet .
На странице Person.cshtml выводится переданный из PersonModel список:
И при обычном запросе к странице сработает метод OnGet, поэтому на страницу будет выведен полный список:

Теперь обратимся к конкретному обработчику. Для этого в строку запроса передается параметр «handler» с указанием имени обработчика. Причем именем обработчика считается та часть названия метода, которая идет после префикса OnGet :

В данном случае обращение идет к обработчику OnGetByName. Поскольку он принимает параметр name, то через строку запроса для этого параметра передается значение: http://localhost:56288/Person?handler=ByName&name=Tom .
Передача обработчика через параметр маршрута
Не всегда может устроить добавление названия обработчика через строку запроса, наподобие ?handler=ByName . В этом случае можно передать название обработчика через параметр маршрута. Для этого изменим код страницы Person.cshtml:
Вопросительный знак после названия параметра «

Обработка форм и запросов POST
Подобным образом мы можем использовать обработчики для для обработки запросов POST. Но кроме того тег-хелперов форм мы можем задавать явным образом нужный обработчик с помощью параметра asp-page-handler . Например, изменим код PersonModel:
Обработчик OnPostGreaterThan находит пользователей, у которых возраст больше определенного, а обработчик OnPostLessThan, наоборот, находит пользователей, у которых возраст меньше, чем определенный.
Изменим код страницы Person.cshtml:
На странице определена форма, но в зависимости от того, на какую кнопку мы нажмем, введенное значение будет улетать тому или иному обработчику.
Введение в Razor Pages
В версии 2.0 в ASP.NET Core была добавлена такая функциональность, как Razor Pages . Она позволяет создавать страницы с кодом Razor, которые могут обрабатывать запросы. В некоторой степени эта функциональности напоминает работу веб-форм, которые представляли страницу с расширением aspx и имели файл логики на C#, связанный с данной страницей. В этом плане Razor Pages представляют альтернативу стандартной модели MVC для построения приложения.
Больше всего Razor Pages подходят для создания небольших приложений.
Для начала работы с Razor Pages создадим новый проект ASP.NET Core. При создании проекта укажем шаблон Web Application и версию 2.0 для ASP,NET Core:

После создания проект будет иметь следующую структуру:

Также стоит отметить, что Razor Pages работают поверх фреймворка MVC, поэтому в файле Startup должны быть добавлены сервисы MVC и должен вызываться соответствующий компонент middleware:
Главным же отличием данного проекта от других типов проектов будет наличие папки Pages . Эта папка содержит все страницы Razor, которые есть в проекте по умолчанию. Каждая страница Razor представляет файл с расширением .cshtml и содержит смесь кода html и конструкций C#. По сути это те же самые представления, что используются в MVC.
По умолчанию в папке Pages имеются следующие файлы:
_Layout.cshtml : мастер-страница, в которую вставляются страницы Razor
_ViewStart.cshtml : задает мастер-страницу
_ViewImports.cshtml : определяет директивы Razor, которые добавляются на каждую страницу Razor
_ValidationScriptsPartial.cshtml : частичное представление, которое подключает js-скрипты валидации на стороне клиента
About.cshtml , Contact.cshtml , Error.cshtml и Index.cshtml : собственно страницы Razor, которые определяют визуальную часть страницы и логику обработки запроса.
К каждой странице Razor прикреплен файл с кодом модели, которая участвует в обработке запроса. Например, возьмем стандартную страницу About.cshtml :
В начале идет директива @page , которая по сути и делает обычное представление страницей Razor. Эта директива позволяет страницам обрабатывать запросы напрямую без контроллеров.
Следующая директива — @model определяет модель представления — в данном случае класс AboutModel.
С этой страницей связан файл кода About.cshtml.cs :
Модель страницы наследуется от класса PageModel. Данная модель определяет свойство Message. И ко всем доступным свойствам модели мы можем обращаться на странице через объект Model . Например, обращение к свойству Message:
Кроме того, в классе модели определен метод OnGet . Этот метод обрабатывает GET-запросы. В данном случае он просто устанавливает свойство Message.
Запустим проект на выполнение. Фактически страницы Razor могут обрабатывать запросы так же, как и контроллеры. Например, обратимся к About.cshtml и для этого введем адрес /About :

Подобным образом для обращения к странице Index надо перейти по адресу /Index , а для обращения к странице Contact — по адресу /Contact .
Маршрутизация в Razor Pages
Строка запроса URL сопоставляется с определенной страницей Razor на основании ее расположения в проекте в папке Pages. Примеры строк URL и сопоставленных с ними страниц:
This site is dedicated to helping developers who want to use the ASP.NET Core Razor Pages web development framework to build web applications.
What Is Razor Pages?
ASP.NET Core Razor Pages is a page-focused framework for building dynamic, data-driven web sites with clean separation of concerns. Based on the latest version of ASP.NET from Microsoft — ASP.NET Core, Razor Pages supports cross platform development and can be deployed to Windows, Unix and Mac operating systems.
The Razor Pages framework is lightweight and very flexible. It provides the developer with full control over rendered HTML. The framework is built on top of ASP.NET Core MVC, and is enabled by default when MVC is enabled in a .NET Core application. Razor Pages is the recommended framework for cross-platform server-side HTML generation on .NET Core. You do not need to have any knowledge or understanding of MVC to work with Razor Pages.
Razor Pages makes use of the popular C# programming language for server-side programming, and the easy-to-learn Razor templating syntax for embedding C# in HTML markup to generate content for browsers dynamically.
Who should use Razor Pages?
Razor Pages is suitable for all kinds of developers from beginners to enterprise level. It is based on a page-centric development model, offering a familiarity to web developers with experience of other page-centric frameworks such as PHP, Classic ASP, Java Server Pages, ASP.NET Web Pages and ASP.NET Web Forms. It is also relatively easy for the beginner to learn, and it includes all of the advanced features of ASP.NET Core making it just as suitable for large, scalable, team-based projects.
How to get Razor Pages
Razor Pages is included within .NET Core from version 2.0 onwards, which is available as a free download as either an SDK (Software Development Kit) or a Runtime. The SDK includes the runtime and command line tools for creating .NET Core applications. The SDK is installed for you when you install Visual Studio 2017 Update 3 or later. The runtime is used to run .NET Core applications. The Runtime-only installation is intended for use on machines where no development takes place.
Why should you use Razor Pages?
If you want a dynamic web site, that is one where the content is regularly being added to, you have a number of options available to you. You can use a Content Management System (CMS), of which there are many to choose from including WordPress, Joomla!, Drupal, Orchard CMS and so on. Or you can hire someone to build a suitable site for you. Or you can build your own if you have an interest in, and an aptitude for programming.