C# 使用Get谓词返回404的Web Api Odata操作方法

C# 使用Get谓词返回404的Web Api Odata操作方法,c#,asp.net,odata,asp.net-web-api,C#,Asp.net,Odata,Asp.net Web Api,我试图将文档流公开为特定类型上的操作方法。它看起来像这样: [HttpPost] // <-- I want this to be [HttpGet] public HttpResponseMessage Test([FromODataUri] int key, ODataActionParameters parameters) { var fileStream = File.OpenRead(@"c:\somefile"); return new HttpRespons

我试图将文档流公开为特定类型上的操作方法。它看起来像这样:

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

/odata/MyType(123)/streamodata对于为实体公开流具有更好的语义。您可以使用命名流或媒体链接条目(MLE)。读一读,然后


命名流似乎更适合您的场景。我有一个示例,演示了如何使用web API OData中的扩展点来执行命名流。

这个问题很老,但我一直在努力解决这个问题,我在本例中找到的解决方案可能对其他人有用:将“Action”GET定义为“函数”而不是“Action”

在问题中提出的情景中,这将是:

var actionConfiguration = entityTypeConfiguration.Function("stream");

“操作和函数的区别在于操作可能有副作用,而函数没有副作用。操作和函数都可以返回数据。”

将属性更改为
[HttpGet]
时会出现什么错误?根据OData规范,操作必须通过POST调用,因为它们可能有副作用。普雷斯科特:我有一辆404。更新了我的问题。迈克·沃森:我相信答案是肯定的。。。你为什么不把它贴出来作为答案呢?
var actionConfiguration = entityTypeConfiguration.Function("stream");