查看 ActionMethodSelector 的代码,似乎所有操作方法属性都必须为 IsValidForRequest 返回 true,然后才能将该操作添加到可能的匹配方法集中。由于 HttpPost 和 HttpDelete 不可能为同一个请求返回 IsValidForRequest,因此我希望同时使用两者会阻止该操作匹配任何请求。
这是代码中的一条有说服力的评论:
private static List RunSelectionFilters(...) {
// 移除所有选择退出此请求的方法
// 要退出,方法上定义的至少一个属性必须返回 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 );
}
}