Я пытаюсь выставить поток документа как метод действия для определенного типа. Это выглядело бы примерно так:Web Api Методы действий Odata с использованием Get verb return 404
/odata/MyType (123)/stream < - это возвращает двоичный поток данных.
При доступе к вышеуказанной конечной точке с использованием GET я получаю только 404, хотя конечная точка отображается как [HttpGet] на контроллере.
С помощью Sematic было бы разумно получить доступ к этому ресурсу с помощью Get-глагола, поскольку это просто операция для извлечения данных, а не побочных действий.
До сих пор я только получил это, чтобы разоблачить метод действия под POST-глаголом.
Действие реализации контроллера метода в настоящее время выглядит следующим образом:
[HttpPost] // <-- I want this to be [HttpGet]
public HttpResponseMessage Test([FromODataUri] int key, ODataActionParameters parameters)
{
var fileStream = File.OpenRead(@"c:\somefile");
return new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StreamContent(fileStream)
};
}
Код для регистрации методы действия на «MyType»
var entityTypeConfiguration = mapper.Builder.Entity<MyType>();
var actionConfiguration = entityTypeConfiguration.Action("stream");
actionConfiguration.Returns<HttpResponseMessage>();
Реализация вдохновлена эта статья: http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-actions
Кто-нибудь знает, как я могу разоблачить этот метод действий как Get?
Какая ошибка возникает при изменении атрибута на '[HttpGet]'? – Prescott
В спецификации OData действия должны вызываться с помощью POST, потому что они могут иметь побочные эффекты. http://www.odata.org/documentation/odata-v3-documentation/odata-core/#10413_Invoking_an_Action –
Прескотт: я получаю 404. Обновлен мой вопрос. –