2015-08-08 90 views
3

的代码是这样的:必需属性不起作用

[HttpPost] 
public ResultEntityVM Register([FromBody,Required] RegisterParam createAssessorParam) 
{ 
    if (ModelState.IsValid == false) 
    { 
     return null; 
    } 

    //other code 
    ResultEntityVM vm = new ResultEntityVM(); 
    return vm; 
} 

当参数createAssessorParamnullModelState.IsValidtrue。为什么?

如果我想自动判断参数是否为null,我该怎么办? 不要我只能写代码:

if(RegisterParam != null) 
{ 
    //other 
} 
+0

''属性'上的'必需'属性更有效。但是当然,你也遇到了麻烦。请参见http://stackoverflow.com/questions/12305784/dataannotation-for-required-property –

+0

因为属性是值类型。 – Json

回答

0

在的WebAPI,动作参数永远不会为空。它总是由框架实例化。因此,如果要确保它们存在,则宁愿在视图模型的属性上使用Required属性。

+2

如果您发布任何内容,则参数必须为空。 我认为该属性可用于properties.But,如果您看到Required属性定义,则它可以在参数上使用。 – Json

+0

如果您设计您的Web API,以便它只接受JSON,则不能发布任何内容。您的请求将比您的方法早得多。所以基本上你需要POST一些有效的JSON。 –

+0

我设计的动作只接受JSON。但是如果我没有发布任何东西,参数会被.net初始化为null,并且动作也会执行。 – Json

2

我遇到了同样的问题,并通过实现一个自定义操作筛选器属性来评估操作方法参数的所有验证属性。

我在this blog post中描述了使用ASP.NET Core 1.0的方法,但同样的方法也适用于ASP.NET 4。