Включать параметры в URL-адреса REST ASP.NET Core

У меня есть проект, в котором есть отчеты. Читая передовые практики Rest, похоже, у меня должен быть URL-адрес, подобный приведенному ниже, на страницу, на которой перечислены все отчеты:

http://../Projects/23/Reports

Чтобы просмотреть конкретный отчет, я бы использовал ссылку, подобную следующей:

http://../Projects/23/Reports/2

Я пробовал несколько способов построить эти ссылки с помощью помощников тегов asp, но безуспешно. Например:

<a asp-page="/Projects/{pid}/Reports/{rid}" asp-route-pid="@item.ID" asp-route-rid="@report.ID" >View Report</a>

По умолчанию похоже, что asp-route- * добавит эти элементы в качестве параметров (например,? Pid = 23 & rid = 2), и это может сработать, но это не похоже на рекомендуемые URL-адреса.


person Brad Patton    schedule 10.11.2017    source источник
comment
Проблема в том, что вы используете Razor Pages. Среди прочего, вы не можете достичь этого стиля маршрутизации, потому что маршруты основаны на файловой системе. Это лишь одна из многих, многих, многих причин, по которым Razor Pages - отстой. Используйте Core MVC и не оглядывайтесь назад.   -  person Chris Pratt    schedule 11.11.2017


Ответы (1)


Вы можете определить свою настраиваемую маршрутизацию страниц Razor рядом с директивой @page в вашем файле * .cshtml.

@page "{pid}/{rid}"

В результате у вас будет следующий URL-адрес, когда ваша страница для бритвы - Projects.cshtml.

/Projects/23/2

Вы также можете добавить статическую информацию в свой URL.

@page "{pid}/Reports/{rid}"

Теперь ваш URL будет

/Projects/23/Reports/2

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

Локализация ядра Asp.net всегда возвращает английскую культуру

Я надеюсь, что это помогает.

person pitaridis    schedule 23.11.2017
comment
Я думаю, что это правильное направление и, вероятно, сработает, если файлы находятся в одном каталоге. У меня есть отчеты / индекс в подпапках, и маршрутизация папок с бритвой, кажется, имеет приоритет. Например, этот вспомогательный тег тега asp-page =. / Reports / Index [email protected] и эта директива страницы @page {pid} / Reports генерируют этот URL: ... / Projects / Reports / 130 / Reports - person Brad Patton; 23.11.2017
comment
Попробуйте убрать точку. Используйте / Reports / Index вместо ./Reports/Index - person pitaridis; 24.11.2017