假设您有一个 ASP.NET MVC 4 Web API 项目。您的资源之一,当您通过 URL 调用它时,它会等待指定时间量的性能监控数据,然后在完成后以 JSON 格式返回所有数据。但是,在输入 URL 和过程完成之间,有没有办法动态返回数据,即。每秒检索性能数据并将其显示在浏览器中。
问题来了: 就我所知以及似乎任何人都知道,通过 URL 调用 API 资源是静态的。意思是,在资源检索到它的所有信息之前,JSON 不会出现,这不是我想要的。我希望能够在 API 资源检索数据时不断更新浏览器中的 JSON。
由于我在存储库类和 Controller 类中工作,Javascript 不是一个选项。我试过使用 SignalR,但显然这在这种情况下不起作用,尤其是因为我无法使用 Javascript。
有没有可能通过 URL 调用 API 来获取实时数据的方法?
例子: 谷歌地图。 您可以通过 URL 调用 Google Maps API 的唯一方法是,如果您想要一张显示特定位置的单个图像的“静态” map 。没有任何形式的互动。如果您想要一个动态的“实时” map ,您需要构建一个 Web 应用程序并在 View 页面中使用 Javascript 使用应用程序中的 API 资源。无法通过 URL 调用它。
最佳答案
您可以将老式的 ASP.Net IHttpHandler 实现放在一起,而不管 MVC Controller 和路由管道。 http://support.microsoft.com/kb/308001 。然后,您将可以完全访问响应流,并且可以根据需要缓冲或不缓冲。您必须考虑是否要将工作线程占用那么长时间,如果您计划连续或多或少地进行流式传输,那么您肯定希望在等待存储库的进一步响应时使用 IAsyncHttpHandler。
话虽如此,Web API 也支持异步,但它更复杂一些。如果您计划随时发回数据,那么我强烈建议您再看看 SignalR,如果您最终计划拥有一些 JavaScript 客户端,它可以开箱即用地完成所有这些工作。这要容易得多。
如果您真的想在 Web API 中编写异步内容,这里有一些资源可能会对您有所帮助;
http://blogs.msdn.com/b/henrikn/archive/2012/02/24/async-actions-in-asp-net-web-api.aspx
而这个看起来正是您所需要的; http://blogs.msdn.com/b/henrikn/archive/2012/04/23/using-cookies-with-asp-net-web-api.aspx
不过,为了在示例中使用 PushStreamContent() 类,您不会在 System.Net.Http.dll 中找到它,您需要从 Web API 堆栈获取它,每晚在 http://aspnetwebstack.codeplex.com/SourceControl/list/changesets 构建
YMMV - 祝你好运!
关于c# - 是否可以通过 URL 调用 Web API 获取实时数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12240053/