gpt4 book ai didi

c# - 了解 ActionFilterAttribute 检查是否为空

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:13 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com