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