2013-01-25 23 views
8

Tôi tạo ra một bộ điều khiển Web API ASP.net như thế:Làm thế nào để đảm bảo tham số của bộ điều khiển ASP.net Web API không phải là null?

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

Các "người sử dụng" tham số sẽ được null nếu khách hàng không cung cấp lý luận chính xác. Tôi có thể làm cho một bộ lọc toàn cầu để kiểm tra mọi tham số như thế này, và sẽ trả về một tin nhắn 400 nếu có lỗi xảy ra.

+0

check out này http://stackoverflow.com/questions/11686690/handling-modelstate-validation-with -asp-net-web-api/11724405 # 11724405 –

Trả lời

9

Cuối cùng, tôi nhận được các giải pháp:

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); 
     } 
    } 
} 

Và ...

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

Giải pháp này sẽ hoạt động tốt khi hành động của bạn không sử dụng thuộc tính tham số FromUri. Tôi đã thấy rằng nếu bạn sử dụng (ví dụ): 'FromUri (Name =" request ")' và tên tham số của bạn là myRequest, thì ActionArguments dự kiến ​​sẽ là null - trả về BadResponse. Tôi đã không tìm thấy một cách sạch sẽ xung quanh này được nêu ra. – dubs

+0

@dubs bạn có thể thực hiện kiểm tra từng loại đối tượng không? 'argument.GetType(). IsClass' – Thomas

+0

Thực ra, nó không hoạt động nếu đối số là null – Thomas

Các vấn đề liên quan