HttpContext.Current.Response.AddHeader() not setting Content-Type header

纵饮孤独 提交于 2020-01-01 19:06:52

问题


I'm using third-party software to render PDFs from html documents. I created a small test project and using the OnClick event of an <asp:Button> I was able to read a html document from a directory and render it as a PDF with no problems.

The response is created as follows:

HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("Content-Type", "application/pdf");
HttpContext.Current.Response.AddHeader("Content-Disposition", 
    String.Format("{0}; filename=Test.pdf;", "inline" ));
HttpContext.Current.Response.BinaryWrite(pdfBuffer);
HttpContext.Current.ApplicationInstance.CompleteRequest();

When I look at the response in Chrome, I can see that Content-Type is being set correctly:

Content-Disposition:inline; filename=HtmlToPdf.pdf;

Content-Length:101482

Content-Type:application/pdf

I've tried to transfer the above to my current project. The only difference being that instead of one <asp:Button> I'm using a custom button inside a DevExpress grid view. I Initially handled the custom button click in a callback panel, but Content-Type was not being set. Viewing the response in Chrome proved this:

Content-Disposition:inline; filename=5.pdf;

Content-Encoding:gzip

Content-Length:149015

Content-Type:text/plain; charset=utf-8

I've also tried using the gvDocuments.CustomButtonCallback += new ASPxGridViewCustomButtonCallbackEventHandler(gvDocuments_CustomButtonCallback); event but Content-Type is still not being set.

Anyone have any ideas as to why I cannot set Content-Type in the above scenario?


回答1:


You can try

HttpResponse response = HttpContext.Current.Response;
response.ClearContent();
response.Clear();

response.ContentType = "application/pdf";

response.AddHeader("Content-Disposition", "attachment; filename=" + yourFileName + ".pdf");
stream.WriteTo(response.OutputStream);
response.Flush();
response.End();

hope it works :)




回答2:


Dim Resp As HttpResponse = HttpContext.Current.Response
Resp.Headers.Remove("X-Frame-Options")
Resp.AppendHeader("X-Frame-Options", "SAMEORIGIN")

By adding the above lines in the page load/init method will add http response header.



来源:https://stackoverflow.com/questions/20196405/httpcontext-current-response-addheader-not-setting-content-type-header

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!