当我编写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')
所有其他角色都正常运作。
答案 0 :(得分:0)
这确实是我们的ODataLib实现的URL解析器的一个错误,我们的问题跟踪器https://github.com/OData/odata.net/issues/3中已经打开了一个Github问题,它已在我们的内部代码库中修复。您应该能够在我们的下一个Nuget版本中看到修复,并在下一个Github源代码更新中看到相应的修复代码。