是否可以在Web API中定義可選參數或傳入空值作爲OData v4函數中的參數?OData v4 web api中的可選函數參數
鑑於此函數的定義:
ODataConventionModelBuilder builder
var config = builder.EntityType<model.MyType>()
.Collection
.Function("Myfunction")
.ReturnsCollectionFromEntitySet<model.MyType>("MyType");
config.Parameter<int>("Id");
config.Parameter<string>("SomeString");
與此控制器操作:
[HttpGet]
public System.Web.OData.PageResult<model.MyType> MyFunction(int id, string someString)
{
return ...;
}
我試圖調用此函數以下方式:
odata/MyType/Namespace.MyFunction(Id=123,SomeString='lalal')
做工精細 odata/MyType/Namespace.MyFunction(Id=123)
給了我一個404 odata/MyType/Namespace.MyFunction(Id=123,SomeString='')
給了我一個400的錯誤'A值是必需的,但沒有出現在請求中。 odata/MyType/Namespace.MyFunction(Id=123,SomeString=null)
成功,但將字符串值'Microsoft.OData.Core.ODataNullValue'發送到控制器操作中的SomeString-paramater。我希望得到一個正常的空值,而不是。
測試在版本:
- Microsoft.AspNet.OData V5.4.0
升級到Microsoft.AspNet.OData V5.5.0-β證明解決問題(部分)。
進一步挖掘證明ModelState對象是無效的。 modelstate對象抱怨說,在第三個(?)參數中使用'someString.String'鍵存在錯誤。錯誤是'需要一個值,但不存在於請求中。'
在歐陽凡提供的代碼示例中,https://github.com/VikingsFan/SampleForOData/tree/master/ODataFunctionSample可以輕鬆地重現該問題。只需運行該示例並在'CustomersController'中檢查ModelState繼承的ModelState屬性。
這似乎是在asp.net web api中的一個錯誤。我改變了我的ModelState邏輯以忽略任何包含'。'的模型狀態鍵,但這只是解決底層問題的一種解決方法。
嘗試了您的建議,但效果並不理想。請看我更新的問題。 – 2015-03-26 10:47:02
我在[github](https://github.com/VikingsFan/SampleForOData/tree/master/ODataFunctionSample)上傳了我的示例,你可以看到SomeString =''和SomeString = null正在工作,而我的示例版本是V5.5 bate。 – 2015-03-27 04:13:00
將檢查出 – 2015-03-27 05:52:58