Глядя на код для ActionMethodSelector, выясняется, что все атрибуты метода действия должны возвращать true для IsValidForRequest, прежде чем это действие будет добавлено в набор возможных подходящих методов. Поскольку HttpPost и HttpDelete не могут возвратить IsValidForRequest для одного и того же запроса, я ожидаю, что использование обоих этих методов не позволит этому действию когда-либо соответствовать любому запросу.
Вот заметный комментарий из кода:
приватный статический список RunSelectionFilters (...) {
// удаляем все методы, которые отказываются от этого запроса
// чтобы отказаться, хотя бы один атрибут, определенный в методе, должен вернуть false
(акцент мой)
Обратите внимание, что вы все равно можете использовать AcceptVerbs и явно ИЛИ глаголы, если вам нужно совпадать с любым из них.
РЕДАКТИРОВАТЬ - вот вам атрибут HttpPostOrDelete.
[AttributeUsage( AttributeTargets.Method, AllowMultiple = false, Inherited = false )]
public class HttpPostOrDeleteAttribute : ActionMethodSelectorAttribute
{
private static readonly AcceptVerbsAttribute _innerPostAttribute = new AcceptVerbsAttribute( HttpVerbs.Post );
private static readonly AcceptVerbsAttribute _innerDeleteAttribute = new AcceptVerbsAttribute( HttpVerbs.Delete );
public override bool IsValidForRequest( ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo )
{
return _innerDeleteAttribute.IsValidForRequest( controllerContext, methodInfo )
|| _innerPostAttribute.IsValidForRequest( controllerContext, methodInfo );
}
}