使用Get动词的Web Api Odata操作方法返回404

我正在尝试将文档流公开为特定类型的操作方法.它看起来像这样:

/ odata / MyType(123)/ stream<-返回二进制数据流. 使用GET访问上述端点时,即使端点在Controller上显示为[HttpGet],我也只会得到404. 从语义上讲,使用Get动词访问此资源是有意义的,因为这只是用于检索数据的操作,而没有副作用. 到目前为止,我只是通过在POST动词下公开action方法来使它起作用. 动作方法控制器实现当前如下所示:

[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?

解决方法:

OData具有更好的语义,可以公开实体的流.您可以使用命名流或媒体链接条目(MLE).阅读有关herehere的信息.

命名流似乎更适合您的情况.我有一个样本here,该样本显示了如何使用Web API OData中的可扩展性点来执行命名流.

上一篇:字段明明存在,用Web API使用该字段进行查询报错?


下一篇:SAP OData service的执行是如何从Gateway系统转交到backend系统