使用文件和JSON进行POST响应

时间:2014-11-27 21:15:21

标签: asp.net json http post http-post

我有POST方法响应文件。文件下载后我还想在UI上显示消息,这是在代码中创建文件期间生成的消息(如果有任何错误,文件中包含所有项目等)。

我的问题是如何以最恰当的方式实施这种行为?

现在我有2个想法:

  1. 下载后立即发送另一个POST方法,将返回 带有消息内容的JSON。这似乎很复杂 因为我应该在服务器对象上存储消息 每个创建的文件
  2. 发送包含相同响应的Cookie,其中包含消息 内容

1 个答案:

答案 0 :(得分:0)

我认为你的两个解决方案都应该在理论上运作。我在这里假设通过八位字节流响应发回的cookie标头将被尊重并且可以通过javascript立即访问。我自己没试过这个。

我还有两个想法可能会给你一些灵感:

<强>简单

在将文件输出给用户之前的POST处理程序中,您可以设置包含要显示的消息的会话变量。然后在下载文件后,发出第二个请求以从会话中获取该消息。由于每次都会被覆盖,如果用户一次发出大量的POST,可能会有点不可靠。

更复杂

对于完全异步的解决方案,过去我以这种方式使用服务:

POST /process_this -> "{'status':'ok', 'id':123}"
GET /status?id=123 -> "{'status':'processing', 'progress':'45%'}"
GET /status?id=123 -> "{'status':'processing', 'progress':'85%'}"
GET /status?id=123 -> "{'status':'ready', 'meta':{'data':'message'}}"
GET /download?id=123 -> Binary file stream

它使您能够始终立即响应,并在前端做一些很酷的进度条。如果处理密集,您也可以拥有一个队列系统。但在缺点方面,您需要将处理器编写为单独的模块,并将其与数据库或节省状态的内容进行通信。

其他

我包括的其他一些想法:

  • 将元数据存储在文件本身中。 (响应文件格式是什么?)
  • 使用多部分响应(不确定浏览器的兼容性)
  • 如果Cookie不足以容纳所有信息,请结合使用您的两个想法。