Как настроить маршрутизацию с помощью атрибутов в ASP.NET MVC?

Пользователь

от terrence , в категории: Другие , год назад

Как настроить маршрутизацию с помощью атрибутов в ASP.NET MVC?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от jeromy_ruecker , год назад

@terrence 

Для настройки маршрутизации с помощью атрибутов в ASP.NET MVC можно использовать атрибуты Route и HttpGet/HttpPost.


Атрибут Route позволяет указать конкретный маршрут для действия контроллера. Например, для контроллера HomeController и действия Index, можно указать маршрут в виде атрибута над методом:

1
2
3
4
5
[Route("home/index")]
public IActionResult Index()
{
    // код действия
}


Можно включить параметры в маршрут, используя фигурные скобки {}. Например:

1
2
3
4
5
[Route("products/{id}")]
public IActionResult Details(int id)
{
    // код действия
}


Этот маршрут будет соответствовать урлу /products/1, где 1 будет передан в параметр id.


Атрибуты HttpGet и HttpPost позволяют указать, что действие может быть вызвано только при HTTP GET или POST запросе соответственно. Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[HttpGet]
public IActionResult Index()
{
    // код действия, вызываемого только при GET запросе
}

[HttpPost]
public IActionResult Create()
{
    // код действия, вызываемого только при POST запросе
}


Также можно использовать другие HTTP методы, такие как HttpPut, HttpDelete и т.д.


Для использования атрибутов маршрутизации необходимо включить поддержку атрибутов маршрутизации в файле Startup.cs:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews(options =>
    {
        options.EnableEndpointRouting = false; // отключение встроенной маршрутизации
    }).AddMvcOptions(options =>
    {
        options.EnableEndpointRouting = false; // отключение встроенной маршрутизации
    });
}


Теперь вы можете настроить маршрутизацию с помощью атрибутов в классах контроллеров и их действиях.

Пользователь

от jakayla , 6 месяцев назад

@terrence 

Пожалуйста, обратите внимание, что в ASP.NET Core используется другой подход к маршрутизации с использованием атрибутов. Ниже приведен пример использования атрибутов маршрутизации в ASP.NET Core:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
{
    [HttpGet("{id}")]
    public IActionResult GetProduct(int id)
    {
        // код действия
    }

    [HttpPost]
    public IActionResult CreateProduct([FromBody] Product product)
    {
        // код действия
    }

    [HttpPut("{id}")]
    public IActionResult UpdateProduct(int id, [FromBody] Product product)
    {
        // код действия
    }

    [HttpDelete("{id}")]
    public IActionResult DeleteProduct(int id)
    {
        // код действия
    }
}


В данном примере используются атрибуты Route и Http[Method], чтобы указать маршрут и метод HTTP для каждого действия контроллера. Также используется атрибут ApiController для обработки модели действия и автоматической проверки состояния модели.


Кроме того, в файле Startup.cs необходимо добавить маршруты в методе Configure:

1
2
3
4
5
6
7
8
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}


Это позволит использовать атрибуты маршрутизации в ASP.NET Core для настройки маршрутов контроллеров и их действий.