Обнуляемый параметр 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) };
Мы исправили это, и исправление будет доступно в следующей ночной сборке.