2014-10-08 52 views
1

我在寫一個OData函數時遇到了一個奇怪的問題。該函數接受一個字符串參數,並返回一組DTO。只要字符串參數不包含字符'E',該函數就可以正常工作。我想知道這是UrlRoutingModule中的錯誤還是什麼?OData v4的函數字符串參數中的字符'E'導致404錯誤

的方法聲明爲:

[EnableQuery] 
[ODataRoute("GetMaintainingLogByIdNumber(IdNumber={IdNumber})")] 
public IEnumerable<MaintainingLogDto> GetMaintainingLogByIdNumber([FromODataUri]string IdNumber) 

和代碼在EDM模型註冊此功能是:

modelBuilder 
.Function("GetMaintainingLogByIdNumber") 
.ReturnsCollectionFromEntitySet<MaintainingLogDto>("MaintainingLog") 
.Parameter<string>("IdNumber"); 

如果我打電話與

http://hostname/odata/GetMaintainingLogByIdNumber(IdNumber='0001100110124221929') 

的功能,此功能返回正確的結果。而這個包含'E'的網址將會導致404

http://hostname/odata/GetMaintainingLogByIdNumber(IdNumber='000110011E0124221929') 

所有其他字符都正常工作。

+0

+1,我承認我發現你的錯誤不太可能,所以我必須自己檢查一下。我可以證實它,我也設法重現它。我相信這是因爲WebAPI認爲參數是一個數字而不是一個字符串,如果第一個字符不是一個數字,它確實有效。另外,如果參數值是'123.0',我也會得到404錯誤。我會在郵件列表中向Microsoft報告該錯誤。 – gdoron 2014-10-08 09:53:56

回答

0

這確實是我們的ODataLib實現的URL解析器的一個bug,我們的問題跟蹤器中已經打開了一個Github問題:https://github.com/OData/odata.net/issues/3它已在我們的內部代碼庫中修復。您應該能夠在我們的下一個Github源更新中看到我們下一個Nuget版本中的修復和相應的修復代碼。

+0

謝謝你的回答。 – RyanQCao 2014-10-21 07:16:55

+0

剛剛遇到同樣的問題。我可以確認這個問題在最新的Nuget包中得到解決。在你的包管理器窗口中運行這個命令:'Update-Package Microsoft.AspNet.OData -Version 5.4.0' – 2015-02-09 02:39:40