在ASP.Net MVC 5

时间:2018-02-16 16:29:05

标签: asp.net pipeline

我非常不寻常(从MVC的角度看是不寻常的)要求。我想将一个HTTP Post(通过内容,我的意思是附加文件)的内容复制到另一个HTTP Get请求。这是应该发生的事情:

1-第一个请求(GET)来自控制器的用户浏览器,我需要保持此请求打开并等待下一个请求。

2-之后,来自包含文件的IoT设备的第二个请求(POST)。

3-我需要回复第二个请求到第一个请求的附件内容,然后关闭这两个请求。

请注意,我无法从服务器向IoT设备发出第二个请求并等待响应,我必须等待该IoT设备连接服务器(您可以想象为什么!)。

一种方法是在应用程序级别为每个GET请求创建一个服务器实例列表(事件委托类),每当第二个请求(POST)到来时,我用我已经保留的令牌检查该请求的ID(或令牌)这个全局列表,如果它们中的任何一个匹配,我可以从POST请求开始读取并在该服务器实例中引发事件以将字节发送回事件处理程序。

但是听起来很糟糕,并且不知怎么反对MVC管道的设计方式。

有人可以建议更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您不知道在初始GET和后续POST之间需要多长时间;它可能永远不会到来。我不认为你想保持GET开放。相反,在服务器端(HTTPCache或某处)创建get,存储令牌,并响应GET。您在服务器端存储的内容必须足以将后续POST映射到GET(用户ID或其他内容)。

然后,在客户端上,在计时器上设置轮询GET(每秒一次,持续20秒,或其他)。回复"处理"消息或类似消息,直到收到POST。

然后IoT发出POST请求,控制器捕获它,更新HTTPCache对象以更改状态来自"处理"到"完成"或者其他什么,并将所需的有效负载填充到缓存对象中。

在下一次轮询GET时,缓存对象可以响应"完成"和有效载荷。