c# - 是否可以通过 URL 调用 Web API 获取实时数据?

标签 c# asp.net-mvc json asp.net-web-api

假设您有一个 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/

相关文章:

c# - PrivateKey 引发了 System.Security.Cryptography.CryptographicException 类型的异常

c# - 如何将此 SQL 查询转换为 LINQ (OVER (PARTITION BY Date))

c# - 使用 MVC AccountController 登录 Android App

php - json_decode 返回 NULL , UTF-8 BOM

javascript - 高效查询连接三张表

c# - 如何将一个对象隐藏在另一个对象后面?

c# - 使用 Dot 语法 c# 时 Unity 程序集引用错误

c# - 有没有办法在没有泛型约束的情况下强制执行无参数构造函数

asp.net - 使用 Asp.net MVC 6 和 Web Api 进行身份验证

database - 使用 JSON 的离线数据库文件系统。使用一个或多个文件