2013-01-25 119 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

相關問題