我正在尝试了解这个 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);
}
}
}
最佳答案
我的愚蠢错误:
if (_validate(actionContext.ActionArguments))
在第一个类
if (!_validate(filterContext.ActionArguments))
在第二堂课。
解决办法,删除!它的工作原理相同。
感谢 haim770 的提示!我猜我累了,看不到那个
关于c# - 了解 ActionFilterAttribute 检查空值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24927416/