Vb.net 如何显示字节流响应
我的RESTAPI返回一个以字节为单位的PDF文档,我需要调用该API并在ASP页面上显示PDF文档以供用户预览 我试过了Vb.net 如何显示字节流响应,vb.net,asp.net-web-api,vbscript,asp-classic,Vb.net,Asp.net Web Api,Vbscript,Asp Classic,我的RESTAPI返回一个以字节为单位的PDF文档,我需要调用该API并在ASP页面上显示PDF文档以供用户预览 我试过了 Response.Write HttpReq.responseBody 但是它在页面上写了一些不可读的文本。httpReq是我调用restapi的对象 REST API的响应: Request.CreateResponse(HttpStatusCode.OK、pdfStream、MediaTypeHeaderValue.Parse(“应用程序/pdf”)) 在经典ASP中
Response.Write HttpReq.responseBody
但是它在页面上写了一些不可读的文本。httpReq
是我调用restapi的对象
REST API的响应:
Request.CreateResponse(HttpStatusCode.OK、pdfStream、MediaTypeHeaderValue.Parse(“应用程序/pdf”))
在经典ASP中,Response.Write()
用于使用code页面
和Response
对象上定义的字符集
属性将文本数据发送回浏览器(默认情况下,这是从当前会话继承的,扩展为IIS服务器配置)
要将二进制数据发送回浏览器,请使用Response.BinaryWrite()
下面是一个快速示例(基于您已经拥有来自httpReq.ResponseBody
的二进制文件的代码片段)
您必须将响应的内容类型定义为PDF:
Response.ContentType = "application/pdf"
然后将二进制数据写入响应:
Response.BinaryWrite(httpReq.ResponseBody)
完整示例:
url = "http://yourURL"
Set httpReq = Server.CreateObject("MSXML2.ServerXMLHTTP")
httpReq.Open "GET", url, False
httpReq.Send
If httpReq.Status = "200" Then
Response.ContentType = "application/pdf"
Response.BinaryWrite(httpReq.ResponseBody)
Else
' Display an error message
Response.Write("Error")
End If
这是因为Response.Write()
将当前CodePage
中的文本写回浏览器,如果要发回二进制数据,请使用Response.BinaryWrite()
。在使用Response.BinaryWrite()时,它会在浏览器中写入一些奇怪的字符,你有没有办法把这个二进制流转换成pdf文件,然后写在浏览器上?谢谢。@PrateekMishra“奇怪的字符”是二进制文件的文本表示形式。出于某种原因,二进制文件不被视为有效的PDF。这里有几件事需要尝试,请确保在响应之前调用响应.Clear()
。BinaryWrite()
,以避免在二进制文件之前将恶意字符传递到浏览器,并确保响应.ContentType
属性设置为适当的PDF mime类型。@Pratekmishra你是怎么做到的?已经注意到这个问题还没有得到一个公认的答案,请考虑投票/接受一个答案,所以这个问题并没有得到回答。在整个例子中,我将检查<代码>如果HTTPRQ.STATE=200,那么返回二进制,这样任何错误都可以独立处理,甚至可以切换内容类型。谢谢,关于响应状态的好建议。对于内容类型,我认为如果REST API调用应该返回二进制文件,则不需要这样做。从技术上讲,不需要内容类型
,因为浏览器可以推断它,但这并不意味着您不应该显式设置它。如果您在服务器头中有:X-content-type-Options=nosniff
,浏览器将不会进行MIME类型嗅探。为True,但不是IIS上的默认值。但是,更需要明确设置内容类型
标题。
url = "http://yourURL"
Set httpReq = Server.CreateObject("MSXML2.ServerXMLHTTP")
httpReq.Open "GET", url, False
httpReq.Send
If httpReq.Status = "200" Then
Response.ContentType = "application/pdf"
Response.BinaryWrite(httpReq.ResponseBody)
Else
' Display an error message
Response.Write("Error")
End If