En una reciente question sobre los atributos MVC, alguien preguntó si el uso de los atributos HttpPost y HttpDelete en un método de acción daría como resultado que se permitiera o no se permitía ninguna solicitud (ya que no puede ser tanto una publicación como una eliminación en el Mismo tiempo). Noté que ActionMethodSelectorAttribute, de la que HttpPostAttribute y HttpDeleteAttribute ambos derivan está decorado con¿Cuál es el punto de indicar AllowMultiple = false en una clase de atributo abstracta?
[AttributeUsage(AttributeTargets.Method,
AllowMultiple = false,
Inherited = true)]
que había esperado que no permite tanto HttpPost y HttpDelete en el mismo método debido a esto, pero el compilador no se queja. Mis pruebas limitadas me dicen que el uso de atributos en la clase base simplemente se ignora. AllowMultiple aparentemente solo permite que dos de los mismos atributos se apliquen a un método/clase y no parece considerar si esos atributos se derivan de la misma clase que está configurada para no permitir múltiplos. Además, el uso de atributos en la clase base ni siquiera le impide cambiar el uso del atributo en una clase derivada. Siendo ese el caso, ¿de qué sirve incluso establecer los valores en la clase de atributo base? ¿Es solo un aviso o me estoy perdiendo algo fundamental en cómo funcionan?
FYI - resulta que usar ambos básicamente impide que ese método sea considerado. Los atributos se evalúan de forma independiente y uno de ellos siempre indicará que el método no es válido para la solicitud, ya que no puede ser simultáneamente tanto una Publicación como una Eliminación.
Su problema es que permite múltiples de la misma MyAttributeBase está permitido cuando AllowMultiple = false. Entonces solo se te permitiría un solo [Foo] O [Bar]. – Rangoric
No hay forma de hacerlo en .NET, ya que el encuestador descubrió y dejó en claro en la pregunta. Estaba abordando la pregunta de "¿por qué alguna vez aplicaría AttributeUsage a un atributo base?" –