C# PushStreamContentWebAPI

C# PushStreamContentWebAPI,c#,asp.net-web-api,C#,Asp.net Web Api,我试图将数据从web API推送到客户端,所以我在web API中使用了PushStreamContent。 我的数据都存在于数据库中 public HttpResponseMessage GetAll() { HttpResponseMessage response = new HttpResponseMessage(); var students = _symboleService.GetAll(); response.Content

我试图将数据从web API推送到客户端,所以我在web API中使用了PushStreamContent。 我的数据都存在于数据库中

public HttpResponseMessage GetAll()
    {
        HttpResponseMessage response = new HttpResponseMessage();
        var students = _symboleService.GetAll();
        response.Content = new PushStreamContent((students, httpContent, context) =>
        {
            OnStreamAvailable(students, httpContent, context);
        }, "text/plain");
        return response;

    }

    private void OnStreamAvailable(Stream stream, HttpContent content,TransportContext context)
    {
        StreamWriter responseStreamWriter = new StreamWriter(stream);
        clients.Add(responseStreamWriter);
    }
但在这一行的“学生”上显示一个错误:

response.Content = new PushStreamContent((students, httpContent, context) =>
无法在此作用域中声明名为“students”的本地或参数 因为该名称在封闭的局部作用域中用于定义 局部或参数

更新我这里的重点是将数据推送到客户端, 经过一些修改,这是我的代码,但它在第行显示了一个错误

var students = _symboleService.GetAll();
非静态字段、方法或对象需要对象引用 属性“SymbolesController.\u symboleService”


您需要重命名
PushStreamContent
构造函数中使用的
students
参数

例如,来自:

response.Content = new PushStreamContent((students, httpContent, context) =>
{
  OnStreamAvailable(students, httpContent, context);
}, "text/plain");
致:

无法使用
学生
的原因是,它已在前一行中声明为变量:

var students = _symboleService.GetAll();

这里有几个问题会阻碍你的进步

首先,PushStreamContent构造函数中的操作不能重用变量名“students”。看起来您认为您正在传递对操作的引用,但这不是它的工作方式

你可以试试这个:

response.Content = new PushStreamContent(OnStreamAvailable, "text/plain");
但还有另一个问题。PushStreamContent构造函数操作中的流是一个输出流

public PushStreamContent(Action<Stream, HttpContent, TransportContext> onStreamAvailable);
公共推流内容(可在流上操作);
您需要从OnStreamAvailable处理程序中写入该流

由于不清楚_symbolService.GetAll()方法是什么,我只能推测从该方法生成的字节[]应该写入操作本身中的输出流


假设您的学生数据不是真正的流或固有的流,这可能是对PushStreamContent类的误用。

@Juste3alfaz我的答案解释了错误发生的原因。如果这不是您要问的,请更具体地回答您的问题。这是_symbolService.GetAll()方法的定义:public IQueryable GetAll(){var sortBy=sortBy.astinging(_id”);mongocursorsor cursor=_collection.FindAll().setortorder(sortBy);return cursor.AsQueryable();}那么请原谅我举的例子。这是不正确的。您可能正在谈论将可查询内容转换为某种数组,然后对序列化数组进行流式处理,但我仍然不确定您通过这种方式流式处理数据想要实现什么。在整个流完成之前,它不会对消费者有用。对不起,我的错误,我需要将数据推送到消费者,请参阅我的上一次更新PLZDA。您认为SignalR实现了您的目标吗?听起来您正在尝试实现推送消息传递范例。你们可能想调查一下信号员。我看到它晚了,我的代码几乎完成了,也许我以后会看到它,thnx
var students = _symboleService.GetAll();
response.Content = new PushStreamContent(OnStreamAvailable, "text/plain");
public PushStreamContent(Action<Stream, HttpContent, TransportContext> onStreamAvailable);