Я попытался сделать простую вещь. Я хотел иметь другое имя действия и другое имя метода:
public class SuperController: Controller
{
[HttpGet("dosth")]
public IActionResult DoSomethingWithThoseParameters(int id, string token)
{
}
}
Посмотрите, что на контроллере нет атрибута Route
.
В этом случае помощник тега asp-action
работает отлично. Но я думал, что мое действие dosth
будет помещено в: localhost/Super/dosth
Но этого не было. Итак, я понял, что мне, вероятно, следует установить маршрут для всего контроллера, например:
[Route("[controller]")]
public class SuperController: Controller
{
[HttpGet("dosth")]
public IActionResult DoSomethingWithThoseParameters(int id, string token)
{
}
public IActionResult Register()
{
return View();
}
}
Но теперь asp-action
перестал работать. Например:
<a asp-controller="Super" asp-action="Register">
создает привязку к: localhost/Super
, а не к: localhost/Super/Register
Когда я удаляю тег Route из контроллера, он снова работает.
Мои сопоставления настроены стандартно:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
Итак, почему asp-action
не работает, когда есть атрибут Route
на всем контроллере