2014-10-08 27 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

相关问题