在 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
。
在一个 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
。