此刻我有点困惑。我有一个操作文件的Web应用程序,然后将文件返回给用户的浏览器,以便在完成后下载。
下载部分进展顺利,因为我使用Response.AddHeader
和Reponse.BinaryWrite
将文件推送回浏览器,但在使用Response方法后我无法调用任何其他方法。
我想我没有使用HttpReponse足以知道这个的诀窍。也许我会更好地使用另一个类或通用处理程序来处理下载?
我的代码就像......
// Methods to be called first
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}.pdf", "New_Merged_PDF_" + DateTime.Now.ToString("MMMM-dd-yyyy")));
Response.ContentType = "application/pdf";
Response.BinaryWrite(output.ToArray());
Response.End();
// Methods to be called last (these wont work)
我可能会忽略一些简单的事情,但我仍然想弄明白。
答案 0 :(得分:0)
为Servy的解释添加一点颜色; HTTP协议规范中有一个操作顺序。其中之一是Headers需要在Body之前发送给客户端。这允许响应的接收者正确处理基于任何标头发送的Body。
请求中存在消息正文 包含Content-Length或Transfer-Encoding标头字段 请求的消息标题。
IETF RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1
少数(如果唯一,我不确定)例外之一是Content-Type: multipart/mixed;
IETF RFC 1867 - Form-based File Upload in HTML (although Obsolete, examples are still relevant)
Content-type: multipart/form-data, boundary=AaB03x
--AaB03x
content-disposition: form-data; name="field1"
Joe Blow
--AaB03x
content-disposition: form-data; name="pics"; filename="file1.txt"
Content-Type: text/plain
... contents of file1.txt ...
--AaB03x--