ActionMethodSelector のコードを見ると、すべてのアクション メソッド属性が IsValidForRequest に対して true を返さなければ、そのアクションが可能な一致メソッドのセットに追加されないように見えます。HttpPost と HttpDelete が同じリクエストに対して IsValidForRequest を返すことはできないため、両方を使用すると、そのアクションがどのリクエストとも一致しなくなります。
コードからのわかりやすいコメントは次のとおりです。
private static List RunSelectionFilters(...) { // このリクエスト
からオプトアウトして
いるすべてのメソッドを削除します// オプトアウトするには、メソッドで定義された少なくとも 1 つの属性が false を返す必要があります
(私のものを強調)
いずれかを一致させる必要がある場合は、引き続き AcceptVerbs を使用し、動詞の明示的なORを使用できることに注意してください。
編集- ここに 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 );
}
}