在 ActionFilterAttribute 中排除 "The value 'null' is not valid for ..."

Exclude "The value 'null' is not valid for ..." in ActionFilterAttribute

在一个 webapi 项目中,我们有一个像这样的模型:

public class Person
{
    public string Name { get; set; }

    public Guid? Id { get; set; }
}

我们已经配置了参数验证,并使用 ActionFilterAttribute 进行了一些检查:

public class ModelActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        (...)
        var modelState = actionContext.ModelState;
        if (modelState.IsValid == false)
        {
            actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, modelState);
        }

        base.OnActionExecuting(actionContext);
    }
}

问题是,进行如下调用:https://localhost/person?Id=null&name='John',会产生如下错误:

The value 'null' is not valid for Id.

我们首先让 Id 字段可以为空,因为我们希望允许像上面那样的调用。验证器仍然抱怨。有什么干净的方法可以排除此错误吗?

我可以遍历错误列表并排除这个错误,但感觉真的不对。

您可以定义一个特定于目的的模型。例如:

public class PersonSearchParameters
{
    public string Name { get; set; }

    public string Id { get; set; }
}

然后允许您的方法以您喜欢的方式处理解析 Id

我真的认为这会更容易,不过,如果您只是说如果您希望结果为空,则应从结果中省略 id