0

按照此处的声明http://blogs.msdn.com/b/odatateam/archive/2014/07/03/odatalib-6-5-0-release.aspx

修复枚举的错误 1) ODataUriParser 应支持可空枚举作为函数参数。

我从 odata 3 和 webapi 2 升级(由于删除日期时间支持而导致大量时间成本!以及升级的各种其他问题)

果然,我可以正确地将 null 传递给我的函数。但是-无论我传递什么,都会以 null 的形式到达函数!

IE

要求

http://visits.backend/odata/Test(PastState=Data.Entities.PastVisitState '完成')

WebApiConfig

var functionTest = builder.Function("Test")
       .Returns<bool>();
        functionTest.Parameter<PastVisitState?>("PastState");

WebApp.Controller

[HttpGet]
    [ODataRoute("Test(PastState={pastState})")]
    [EnableQuery]
    public bool Test([FromODataUri] PastVisitState? pastState)
    {
        if (pastState != null)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

如果它不可为空,则该值通过就好了。

NB

我刚刚将 nuget 包 odataLib 升级到 6.8.1 以确保(以前与 6.5.0 上的每个链接帖子一样)相同的行为。

我已经用可为空的 int 进行了测试,一切正常

我也尝试过 Nullable - 不高兴。

似乎是 Microsoft.OData.Core.dll 的错误?

4

1 回答 1

1

这是 Web API 中的一个错误。

ODataModelBinderProvider.cs中,代码如下:

Type enumType = TypeHelper.GetUnderlyingTypeOrSelf(type);
object[] parameters = new[] { valueString, Enum.ToObject(**type**, 0) };

应改为:

Type enumType = TypeHelper.GetUnderlyingTypeOrSelf(type);
object[] parameters = new[] { valueString, Enum.ToObject(**enumType**, 0) };

我们已经修复了它,修复将在即将到来的夜间版本中提供。

于 2014-10-21T06:05:28.673 回答