Как присвоить атрибуты методам классов по соглашению? - PullRequest
1 голос
/ 20 апреля 2020

Я хотел, чтобы мои методы контроллера регистрировались как [HttpGet], если у них есть «get» в имени метода, то же самое относится и к [HttpPost], если у них есть «create» et c.

Как я могу создать "attributeAssigner", который будет go поверх сборки и выполнять работу?

1 Ответ

0 голосов
/ 23 апреля 2020

На самом деле вы не можете. Упомянутый пример Ygalbel является решением, которое, на мой взгляд, является своего рода обманом.

Код в примере создает другой класс (прокси), который наследуется от класса, к которому вы хотите применить атрибут (ы). Фактически, если вы используете отражение для извлечения пользовательских атрибутов, украшающих ваш класс (его свойства и методы), вы не найдете ни одного из них. Экземпляр класса в предлагаемом решении - это экземпляр другого класса, а не ваш!

Я не уверен на 100%, но могу догадаться ASP. NET ( Core) делает именно это, поэтому он не найдет атрибутов, украшающих действия вашего контроллера.

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

  1. Проверьте ваш класс контроллера и выясните, куда добавить атрибуты, как вы хотите,
  2. Используйте решение, описанное в примере,
  3. Отмените регистрацию исходного контроллера в детали,
  4. Зарегистрируйте прокси-сервер, созданный в примере кода, в качестве замены оригинала у провайдера.

Возможно этот текст может быть хорошей отправной точкой, но, тем не менее, ваш Идея требует уточнения.

В любом случае, если вы настаиваете на ее реализации, я sh удачи вам. Это часть расширенных тем в ASP. NET Core.

HTH

...