.NET Core использует Razor - несколько одинаковых маршрутов. - PullRequest
0 голосов
/ 03 декабря 2018

Я создаю .NET Core API для чтения / записи / обновления / удаления информации из базы данных.Я настроил кости, и теперь я пытаюсь объединить взгляды, чтобы все выглядело лучше.Я использовал возможности лесов Visual Studio 2017 для настройки некоторых основных видов.Прямо сейчас работает представление index.cshtml, оно отображает информацию из каждой строки базы данных вместе с возможностью редактировать, просматривать детали или удалять каждую строку.Это добавляется через следующие 3 строки, которые вставляются в теги <td> в операторе foreach для циклического просмотра результатов для базы данных (item - так называется каждая строка в наборе результатов из базы данных)

<a asp-action="Edit" asp-route-id="@item.id">Edit</a> |
<a asp-action="Details" asp-route-id="@item.id">Details</a> |
<a asp-action="Delete" asp-route-id="@item.id">Delete</a>

На данный момент у меня работает только одна ссылка - подробности, которая использует функцию из моего класса контроллера и выводит меня только на одну конкретную строку.Я заметил, что hrefs edit и details не получают идентификатор строки, и в результате эти ссылки просто возвращают меня на страницу индекса, на которой я уже работаю.При наведении на каждую ссылку, вот что я вижу, каждый href установлен на -

Edit: localhost: port / api / results

Подробности: localhost: порт / api / results / 1 (это, как я полагаю, два других должны выглядеть примерно так)

Удалить: localhost: port /api / results

Я уже провел небольшую отладку / исследование, и вот мои вопросы:

  1. Могут ли несколько маршрутов иметь один и тот же URI, если они разныевещи?Например, ссылка подробностей - это HttpGet, тогда как удаление - это HttpDelete.Могут ли они иметь один и тот же URI, если используют разные методы HTTP?

  2. Должен ли быть контроллер, который что-то делает с данным маршрутом, прежде чем Razor правильно соберет маршрут??

  3. Все, что я пропустил, может быть причиной того, что идентификатор не добавляется в гиперссылку?Все 3 маршрута редактирования / детализации / удаления настроены одинаково, но идентификатор добавляется в маршрут только для деталей, а не для редактирования или удаления.

1 Ответ

0 голосов
/ 03 декабря 2018

1) Да, это нормальный случай.Вы можете иметь / результаты / 1 , PUT результаты / 1 , УДАЛИТЬ результаты / 1 , POST результаты / 1

2,3) Конструктивно ссылка может отправлять запрос только в метод GET, поскольку GET в основном используется для получения данных.Однако POST, PUT, DELETE не предназначены для использования в качестве идемпотентных методов, и они обычно изменяют состояние объекта на сервере.Если вы хотите вызвать метод POST и DELETE, вы должны использовать <form>

. Чтобы решить эту проблему, вы должны:

  • Создать GET-методы «Edit» и «Delete», возвращающиевеб-страница с необходимыми данными.Для «Правка» - страница должна состоять из <form> и нескольких входов для изменения вашего ввода.«Удалить» обычно требует только <form> со скрытым вводом (id).
  • После того, как вы закончили работу с веб-страницами, вы можете использовать свой метод через <form>

Посмотрите наэто пример .

...