Я пытаюсь добавить поддержку запросов OData v4 к методу на контроллере, который наследуется от ApiController, а не ODataController. Хотя у меня есть рабочая модель OData в решении, есть некоторые конечные точки, которые на самом деле не принадлежат модели, но полезность запроса будет полезна.Включить запрос OData v4 на WebApi ApiController
Я видел некоторые статьи, предлагающие мне просто вернуть IQueryable и использовать EnableQuery.
Вот мой пример код:
public class TestController : ApiController
{
[HttpGet]
[EnableQuery]
public IQueryable<TestObject> Events()
{
var result = new[] { new TestObject { Id = "1" } }.AsQueryable();
return result;
}
}
public class TestObject
{
public string Id { get; set; }
}
Все, что я вернусь, когда вызов/Test/Событие является 406 не приемлем, то, что я столкнулся много дела с OData, что обычно означает, что я «Вернуть то, что не нравится в OData framework. Я никогда не мог получить больше информации из фреймворка (что, по большому счету, я думаю) о том, почему это ему не нравится, и только решает их в результате проб и ошибок в прошлом.
У кого-нибудь есть эта настройка, и если да, то как?
Или любые предложения по отладке ответа 406?
EDIT:
ИТАК оказалось, что преступник был так код в запуске, который регистрировал пользовательский ODataMediaTypeFormatter и в процессе убирала все остальные форматтеры.
После устранения оскорбительного кода он сработал.
Действительно, желательно, чтобы WebApi записывал где-то то, что вызвало ошибку 406, когда она выплевывает один из них.
Как вы объявили маршрут? – nlips
У меня нет, я только что использовал соглашения Controller/Action. Он отлично работает, когда я удаляю EnableQuery. – Mant101
Изменяет ли название действия события() на Get()? – eoghank