我正在尝试了解这个 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/

10-13 08:09