我在写一个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