Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何显示字节流响应_Vb.net_Asp.net Web Api_Vbscript_Asp Classic - Fatal编程技术网

Vb.net 如何显示字节流响应

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中

我的RESTAPI返回一个以字节为单位的PDF文档,我需要调用该API并在ASP页面上显示PDF文档以供用户预览

我试过了

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