В недавнем question атрибутах MVC кто-то спросил, могут ли использование атрибутов HttpPost и HttpDelete в методе действий разрешать либо тип запроса, либо запросы (поскольку он не может одновременно быть как Почтой, так и Удалить). Я заметил, что ActionMethodSelectorAttribute, из которого вызывается HttpPostAttribute и HttpDeleteAttribute, украшен
[AttributeUsage(AttributeTargets.Method,
AllowMultiple = false,
Inherited = true)]
Я ожидал, что из-за этого я не допущу, чтобы оба HttpPost и HttpDelete были на одном и том же методе, но компилятор не жалуется. Мое ограниченное тестирование говорит мне, что использование атрибута в базовом классе просто игнорируется. AllowMultiple, по-видимому, только запрещает применение двух атрибутов одинакового к методу/классу и, похоже, не рассматривает вопрос о том, происходят ли эти атрибуты из того же класса, который настроен так, чтобы не допускать кратных значений. Более того, использование атрибута в базовом классе даже не мешает вам изменить использование атрибута на производном классе. В этом случае, какой смысл даже устанавливать значения в базовом классе атрибутов? Является ли это просто консультативным или я упускаю что-то принципиальное в том, как они работают?
FYI - оказывается, что использование обоих в основном исключает этот метод из когда-либо рассматриваемого. Атрибуты оцениваются независимо, и один из них всегда указывает, что метод недействителен для запроса, поскольку он не может одновременно быть как сообщением, так и удалением.