2012-12-15 77 views
7

我有一個Web API控制器(TasksController)與get方法,如:WebApi可選參數 - 是必需的嗎?

public IEnumerable<TimeUnitModel> Get(DateTime startDate, DateTime endDate, string projectCode = "") 

如果我打電話

/api/tasks?startDate=2012%2F12%2F08&endDate=2012%2F12%2F15 

返回正確的結果。

如果我打電話

/api/tasks?startDate=2012%2F12%2F08&endDate=2012%2F12%2F15&projectCode= 

然後我得到:

{"projectCode.String":"A value is required but was not present in the request."} 

任何想法,爲什麼出現這種情況? 謝謝。

編輯: 下面是我在路由配置:

config.Routes.MapHttpRoute(
      name: "tasks_get", 
      routeTemplate: "api/tasks", 
      defaults: new { controller = "tasks", projectCode = RouteParameter.Optional} 
     ); 
+0

有你在RouteConfig爲projectCode參數設置UrlParameter.Optional? – dinukadev

+0

我想這並不能看到你所看到的。我甚至從操作中刪除了默認值,並且這一切都沒有問題。 – Aliostad

+1

@sirrocco我見過類似的行爲之前,在這個問題上http://stackoverflow.com/questions/12006524/why-does-modelstate-isvalid-fail-for-my-apicontroller-method-that-has-nullable -p/12622152#12622152 –

回答

2

你的第一個電話: /api/tasks?startDate=2012%2F12%2F08&endDate=2012%2F12%2F15 你如何調用該方法帶有可選參數(即該參數可選,所以你沒有指定它)。當您指定「& projectCode =」查詢字符串,你指定參數,而你將其指定爲。由於字符串是空的,則API假定您在空送價值。如果你想方法與空字符串運行,只是把它你沒有在參數發送所有之前做的方式。