2013-01-25 149 views
8

我创造了这样的一个ASP.net的Web API控制器:如何确保ASP.net Web API控制器的参数不为空?

public class UsersController : ApiController 
{ 
    //... 
    public void Put([FromBody]User_API user, long UpdateTicks) 
    { 
     user.UpdateTicks = UpdateTicks; 
     //... 
    } 
} 

“用户”参数将是空如果客户不能提供正确的参数。我可以使用全局过滤器来检查每个参数,如果发生任何错误,它将返回400条消息。

+0

退房这个http://stackoverflow.com/questions/11686690/handling-modelstate-validation-with -asp-net-web-api/11724405#11724405 –

回答

9

最后,我得到了解决:

public class ModelValidateFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     if (actionContext.ActionArguments.Any(v => v.Value==null)) 
     { 
      actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.BadRequest); 
     } 
    } 
} 

而且......

//In Application_Start() 
GlobalConfiguration.Configuration.Filters.Add(new ModelValidateFilterAttribute()); 
+0

当您的操作不使用FromUri参数属性时,此解决方案将正常工作。我发现如果你使用(例如):'FromUri(Name =“request”)'并且你的参数名是myRequest,那么期望的ActionArguments将是空的 - 返回一个BadResponse。我还没有找到一个干净的方法。 – dubs

+0

@dubs你可以为每一个做一个类型检查对象吗? 'argument.GetType()。IsClass' – Thomas

+0

实际上,如果参数为null,则不起作用 – Thomas

相关问题