Обнуляемый параметр enum всегда null odata 4 web api 2.2

После претензии здесь http://blogs.msdn.com/b/odatateam/archive/2014/07/03/odatalib-6-5-0-release.aspx

Исправление ошибок для enum 1) ODataUriParser должен поддерживать Enum с нулевым значением в качестве параметра функции.

Я обновил odata 3 и webapi 2 (огромные затраты времени из-за удаления поддержки datetime! И других проблем с обновлением)

И, конечно же, я могу передать null правильно в моей функции. Однако - что бы я ни пропустил, функция получает нулевое значение!

т.е.

Запрос

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

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;
        }
    }

Если это не обнуляемое значение, это просто замечательно.

НБС

Я просто обновил пакет nuget odataLib до 6.8.1, чтобы удостовериться (ранее было так же, как в предыдущем сообщении на 6.5.0) То же поведение.

Я проверил с Nullable INT и все работает нормально

Я тоже пытался с Nullable - без радости.

Похоже, ошибка с Microsoft.OData.Core.dll?

1 ответ

Это ошибка в веб-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) };

Мы исправили это, и исправление будет доступно в следующей ночной сборке.

Другие вопросы по тегам