在 ASP.NET MVC 2 中,引入了一些新的操作筛选器属性,作为 ASP.NET MVC 1 中属性的“简写”;例如,应用HttpPostAttribute
与申请做同样的事情[AcceptVerbs(HttpVerbs.Post)]
到一个动作方法。
此外,使用更详细的语法,可以组合不同的方法,以便允许例如Post
and Delete
.
现在我想知道:新属性如何发挥作用?如果我同时应用[HttpPost]
and [HttpDelete]
,将 ASP.NET MVC 2allow两者或require两者(因此不允许任何事情)?
查看 ActionMethodSelector 的代码,似乎所有操作方法属性都必须为 IsValidForRequest 返回 true,然后才能将该操作添加到可能的匹配方法集中。由于 HttpPost 和 HttpDelete 不可能为同一请求返回 IsValidForRequest,因此我希望使用两者将阻止该操作匹配任何请求。
这是代码中的一个有说服力的评论:
私有静态列表 RunSelectionFilters(...) {
// 删除所有选择退出此请求的方法
// 选择退出,方法上定义的至少一个属性必须返回 false
(强调我的)
请注意,您仍然可以使用 AcceptVerbs 并明确OR动词(如果您需要匹配其中任何一个)。
EDIT-- 这是给您的 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 );
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)