Tom*_*han 6 c# http-method action-filter asp.net-mvc-2
在ASP.NET MVC 2中,引入了一些新的动作过滤器属性,作为ASP.NET MVC 1中属性的"简写"; 例如,应用与HttpPostAttribute执行[AcceptVerbs(HttpVerbs.Post)]操作方法相同的操作.
此外,使用更详细的语法,可以组合不同的方法,以便例如允许Post和Delete.
现在我想知道:新属性如何工作?如果我申请两个[HttpPost]和[HttpDelete],将ASP.NET MVC 2 允许两个或需要两者(从而使没有)?
查看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 );
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10297 次 |
| 最近记录: |