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) {}
Более подробную информацию о маршрутизации можно найти по этой ссылке.
Если вы не изменили маршрут по умолчанию с:
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.