我正在尝试理解这个ActionFilterAttribute。我试着用一些代码来更好地理解它是如何工作的,但我完全迷失了。
这是有效的ActionFilterAttribute。它应该检查一个空请求体并返回一个错误:
public class CheckModelForNullAttribute : ActionFilterAttribute
{
private readonly Func<Dictionary<string, object>, bool> _validate;
public CheckModelForNullAttribute() : this(arguments => arguments.ContainsValue(null))
{ }
public CheckModelForNullAttribute(Func<Dictionary<string, object>, bool> checkCondition)
{
_validate = checkCondition;
}
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (_validate(actionContext.ActionArguments))
{
var modelState = new ModelStateDictionary();
modelState.AddModelError("Parameter", "The request body cannot be null");
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, modelState);
}
}
}
为什么这不会产生相同的结果:
public class CheckModelForNullAttribute: ActionFilterAttribute
{
private readonly Func<Dictionary<string, object>, bool> _validate = args => args.ContainsValue(null);
public override void OnActionExecuting(HttpActionContext filterContext)
{
if (!_validate(filterContext.ActionArguments))
{
filterContext.ModelState.AddModelError("Parameter", "The request body cannot be null");
filterContext.Response = filterContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, filterContext.ModelState);
}
}
}
答案 0 :(得分:2)
我的愚蠢错误:
if (_validate(actionContext.ActionArguments))
在第一堂课
if (!_validate(filterContext.ActionArguments))
在第二节课。
解决方案,删除!它的工作方式相同。
谢谢haim770的暗示!猜猜我累了,看不到那个