В этой главе мы изучим другой подход к маршрутизации, а именно маршрутизацию на основе атрибутов. При маршрутизации на основе атрибутов мы можем использовать атрибуты C # в наших классах контроллеров и в методах внутри этих классов. Эти атрибуты имеют метаданные, которые сообщают ASP.NET Core, когда вызывать определенный контроллер.
-
Это альтернатива обычной маршрутизации.
-
Маршруты оцениваются в том порядке, в котором они появляются, в порядке, в котором вы их регистрируете, но довольно часто можно сопоставить несколько маршрутов, особенно если вы хотите, чтобы в URL были разные параметры или если вы хотите, чтобы в URL были разные литералы.
Это альтернатива обычной маршрутизации.
Маршруты оцениваются в том порядке, в котором они появляются, в порядке, в котором вы их регистрируете, но довольно часто можно сопоставить несколько маршрутов, особенно если вы хотите, чтобы в URL были разные параметры или если вы хотите, чтобы в URL были разные литералы.
пример
Давайте возьмем простой пример. Откройте проект FirstAppDemo и запустите приложение в браузере. Когда вы укажете / about , он выдаст следующий вывод:
Здесь мы хотим, чтобы при указании / about приложение должно вызывать действие Phone в AboutController. Здесь мы можем применить некоторые явные маршруты для этого контроллера, используя атрибут Route. Этот атрибут находится в пространстве имен Microsoft.AspNet.Mvc .
Ниже приведена реализация AboutController, в которой добавляются атрибуты маршрутов.
using Microsoft.AspNet.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace FirstAppDemo.Controllers { [Route("about")] public class AboutController { [Route ("")] public string Phone() { return "+49-333-3333333"; } [Route("country")] public string Country() { return "Germany"; } } }
Здесь мы хотим, чтобы этот маршрут выглядел примерно так, и для действия Phone мы указали пустую строку, что означает, что нам не нужно указывать действие, чтобы получить этот метод. Пользователь просто должен прийти к / о. Для действия Страна мы указали «страну» в атрибуте маршрута. Давайте сохраним AboutController, обновим ваш браузер и перейдем к / about, и он должен дать вам действие Phone.
Давайте уточним / о / страна . Это позволит вам перейти к этой стране действий.
Если вы хотите, чтобы сегмент URL-адреса содержал имя вашего контроллера, вы можете вместо использования имени контроллера явно использовать контроллер токена в квадратных скобках. Это говорит ASP.NET MVC использовать имя этого контроллера в этом положении, как показано в следующей программе.
using Microsoft.AspNet.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace FirstAppDemo.Controllers { [Route("[controller]")] public class AboutController { [Route ("")] public string Phone() { return "+49-333-3333333"; } [Route("[action]")] public string Country() { return "Germany"; } } }
Таким образом, если вы когда-нибудь переименуете контроллер, вам не нужно будет помнить, чтобы изменить маршрут. То же самое касается действия, и неявно существует косая черта (/) между контроллером и действием. Это иерархическая связь между контроллером и действием, точно так же, как внутри URL. Давайте снова сохраним этот контроллер. Скорее всего, вы увидите те же результаты.
Давайте уточним / о / страна. Это позволит вам перейти к этой стране действий.