#c# #asp.net-core #asp.net-core-mvc
#c# #asp.net-ядро #asp.net-core-mvc
Вопрос:
У меня есть контроллер, который имеет действие, которое выглядит следующим образом:
public IActionResult Edit(long? page)
Я определил следующую маршрутизацию UseEndpoints
в своем Startup
классе
endpoints.MapControllerRoute(
name: "Area",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{page?}");
Однако маршрут не подбирается и не сопоставляется с действием контроллера.
Когда я меняю маршрутизацию на эту
endpoints.MapControllerRoute(
name: "Area",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
Маршрутизация работает, но, очевидно page
, параметр метода есть null
, потому что маршрутизация будет ожидать id
параметра.
есть ли какой-либо особый случай для id
параметра, который я пропустил, который мне нужно добавить, чтобы моя маршрутизация с page
помощью параметра работала?
Ответ №1:
Существуют зарезервированные слова, которые нельзя использовать в качестве сегментов маршрута или имен параметров.
Использование page
в качестве параметра маршрута является распространенной ошибкой.
Комментарии:
1. В этом-то и заключалась настоящая проблема. Поскольку мы внедрили Microsoft identity, нам понадобился конструктор MVC, и мы попытались добавить его через
AddRazorPages()
orAddMvc()
. Раньше этого не было в нашей кодовой базе. ИспользованиеAddControllersWithViews()
вместо этого устранило проблему и дало нам необходимыеMvcBuilder
дляAddMicrosoftIdentityUI()
Ответ №2:
Разницы нет
between pattern "{area:exists}/{controller=Home}/{action=Index}/{id?}"); and
pattern: "{area:exists}/{controller=Home}/{action=Index}/{page?}");
поскольку ваш URL-адрес будет выглядеть как `…area / controller / edit / 12345
, и он будет работать так же
for action public IActionResult Edit(long? page)
and for public IActionResult Edit(int? id)
Но, как упоминалось @FeiHan, не используйте слово «страница» для маршрутизации, лучше оставьте просто «{area:exists} / {controller=Home} / {action=Index} / {id?}») или вы можете выбрать любое другое имя вместо «id».