ASP сетчатое ядро

Я хотел бы знать, как указать маршруты в ядре dot net. Например, у меня есть метод get, который получает 1 аргумент (id) и возвращает пользователя. Этот метод доступен по этой ссылке (api/user/1). Итак, вопрос в том, как создать метод для этой ссылки -"api/user/1/profile", чтобы он получал идентификатор и возвращал что-то, относящееся к этому идентификатору. Нужно ли делать 2 метода get или просто разделять их и указывать маршруты?

2 ответа

Используя атрибутную маршрутизацию, это можно сделать следующим образом.

[HttpGet("{id:int}")]
public async Task<IActionResult> GetUserById(int id) {}

[HttpGet("{id:int}/profile")]
public async Task<IActionResult> GetUserProfileById(int id) {}

Более подробную информацию о маршрутизации можно найти по этой ссылке.

https://docs.asp.net/en/latest/fundamentals/routing.html

Если вы не изменили маршрут по умолчанию с:

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

Вы можете создать пользовательский контроллер с чем-то вроде:

public async Task<IActionResult> Profile(int? id)
{
    if (id == null)
    {
        // Get the id
    }

    var profile = await _context.Profile
        .SingleOrDefaultAsync(m => m.Id == id);
    if (profile == null)
    {
        return NotFound();
    }

    return View(profile);
}

Тогда он будет сопоставлен с "/User/Profile/{id}"

Очевидно, вы можете получить данные для профиля, как вы хотите, я просто использовал пример EFCore.

Другие вопросы по тегам