如何在HttpResponse之后调用方法?

时间:2014-12-17 20:11:10

标签: c# asp.net httpresponse

此刻我有点困惑。我有一个操作文件的Web应用程序,然后将文件返回给用户的浏览器,以便在完成后下载。

下载部分进展顺利,因为我使用Response.AddHeaderReponse.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)

我可能会忽略一些简单的事情,但我仍然想弄明白。

1 个答案:

答案 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--