OData v4的函数字符串参数中的字符“E”导致404错误

时间:2014-10-08 05:51:54

标签: asp.net-web-api http-status-code-404 action odata

当我编写OData函数时,我遇到了一个奇怪的问题。此函数接受一个字符串参数,并返回一组DTO。只要字符串参数不包含字符“E”,此函数就可以正常工作。我想知道它是UrlRoutingModule中的错误还是什么?

方法声明是:

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

在Edm Model中注册此功能的代码是:

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

如果我用

调用此函数
http://hostname/odata/GetMaintainingLogByIdNumber(IdNumber='0001100110124221929')

该函数返回正确的结果。这个包含“E”的网址会导致404

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

所有其他角色都正常运作。

1 个答案:

答案 0 :(得分:0)

这确实是我们的ODataLib实现的URL解析器的一个错误,我们的问题跟踪器https://github.com/OData/odata.net/issues/3中已经打开了一个Github问题,它已在我们的内部代码库中修复。您应该能够在我们的下一个Nuget版本中看到修复,并在下一个Github源代码更新中看到相应的修复代码。