假设您有一个 ASP.NET MVC 4 Web API 项目。当您通过 URL 调用其中一个资源时,它会等待获取指定时间段的性能监控数据,然后在完成后以 JSON 形式返回所有数据。但是,在输入 URL 和过程完成之间,是否有一种方法可以动态返回数据,即每秒检索性能数据并将其显示在浏览器中。
问题是这样的:
据我所知以及任何人似乎都知道,通过 URL 调用 API 资源是静态的。这意味着,在资源检索到其所有信息之前,JSON 不会出现,这不是我想要的。我希望能够在 API 资源检索数据时不断更新浏览器中的 JSON。
由于我正在存储库类和控制器类中工作,因此 Javascript 不是一个选项。我尝试过使用 SignalR,但显然这在这种情况下不起作用,特别是因为我无法使用 Javascript。
有没有可能通过 URL 调用 API 来获取实时数据?
例证:
谷歌地图。
通过 URL 调用 Google Maps API 的唯一方法是如果您想要一个“静态”地图,该地图显示特定位置的单个图像。没有任何形式的互动。如果您想要一个动态的“实时”地图,您需要构建一个 Web 应用程序,并在视图页面中使用 Javascript 来使用应用程序中的 API 资源。无法通过 URL 调用它。
无论 MVC 控制器和路由管道如何,您都可以组合一个老式的 ASP.Net IHttpHandler 实现。http://support.microsoft.com/kb/308001 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/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 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 http://aspnetwebstack.codeplex.com/SourceControl/list/changesets
YMMV-祝你好运!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)