In einem aktuellen question über MVC-Attribute fragte jemand, ob die Verwendung von HttpPost- und HttpDelete-Attributen für eine Aktionsmethode dazu führen würde, dass entweder Anfragetyp erlaubt ist oder keine Anfragen erlaubt sind (da es nicht gleichzeitig Post und Delete sein kann) gleiche Zeit). Ich bemerkte, dass ActionMethodSelectorAttribute, von dem HttpPostAttribute und HttpDeleteAttribute beide herleiten mitWas bedeutet AllowMultiple = false für eine abstrakte Attributklasse?
[AttributeUsage(AttributeTargets.Method,
AllowMultiple = false,
Inherited = true)]
verziert ich erwartet hatte es nicht zuzulassen, dass sowohl Httppost und HttpDelete auf dem gleichen Verfahren aus diesem Grund, aber der Compiler beschwert sich nicht. Meine begrenzten Tests zeigen mir, dass die Verwendung des Attributs in der Basisklasse einfach ignoriert wird. AllowMultiple lässt scheinbar nur zwei der selben Attribute auf eine Methode/Klasse zu und scheint nicht zu berücksichtigen, ob diese Attribute von der gleichen Klasse abgeleitet sind, die so konfiguriert ist, dass sie keine Vielfachen erlaubt. Darüber hinaus schließt die Verwendung des Attributs für die Basisklasse nicht einmal aus, dass Sie die Attributverwendung für eine abgeleitete Klasse ändern. Was ist der Grund dafür, die Werte für die Basisattributklasse zu setzen? Ist es nur beratend oder fehlt mir etwas Grundlegendes in ihrer Arbeitsweise?
FYI - es stellt sich heraus, dass beide grundsätzlich verhindert, dass diese Methode überhaupt in Betracht gezogen wird. Die Attribute werden unabhängig voneinander ausgewertet, und eine davon zeigt immer an, dass die Methode für die Anforderung nicht gültig ist, da sie nicht gleichzeitig Post und Delete sein kann.
Sein Problem ist, dass mehrere derselben erlauben MyAttributeBase ist zulässig, wenn AllowMultiple = false ist. Du hättest also nur einen einzigen [Foo] OR [Bar]. – Rangoric
Es gibt keine Möglichkeit, das in .NET zu tun, wie der Fragesteller entdeckt und in der Frage deutlich gemacht hat. Ich ging auf die Frage ein, "warum sollten wir AttributUsage jemals auf ein Basisattribut anwenden?" –