.NET - Content-Disposition Header 未在 WebAPI 中显示
.NET - Content-Disposition Header Not Showing in WebAPI
我正在尝试创建一个 WebAPI,它将向另一台服务器(企业 Oracle Agile PLM)和 return 文档发出 GET 请求。我正在使用 .NET 4.5.1。我已经能够获得实际的文件数据,但是很难获得它的原始文件名。我读到响应的 Content-Disposition header 是寻找它的最佳位置,因为它不包含在 URI 中。
这是我目前正在尝试但失败的原因。这是不完整的,因为我纯粹专注于尝试让 header 显示:
public string GetDocsForDocNumber()
{
var docUrlString = "https://agprd.myDomain.com/Agile/link/Information%20Systems/1044698/files/ALL";
var username = "user";
var password = "pass";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(docUrlString);
try
{
string authKey = Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(username + ":" + password));
request.Headers.Add("Authorization", "Basic " + authKey);
//DEBUG - Printing out all request headers...
WebHeaderCollection whCollection2 = request.Headers;
for (int i = 0; i < whCollection2.Count; i++)
{
System.Diagnostics.Debug.WriteLine("\n REQUEST header key: " + whCollection2.GetKey(i) + " value: " + whCollection2.Get(i));
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (Stream rstream = response.GetResponseStream())
{
//DEBUG -- Printing out all response headers...
WebHeaderCollection whCollection = res.Headers;
for (int i = 0; i < whCollection.Count; i++)
{
System.Diagnostics.Debug.WriteLine("header key: " + whCollection.GetKey(i) + " value: " + whCollection.Get(i) + "\n");
}
}
res.Close();
}
catch { }
return "blah";
}
这是在 VS 中打印的 header:
REQUEST header key: Authorization value: Basic eWFAKeJaSEHnef2jk9hasE= (this is fudged FYI)
RESPONSE header key: Transfer-Encoding value: chunked
RESPONSE header key: Cache-Control value: private
RESPONSE header key: Content-Type value: application/octet-stream
RESPONSE header key: Date value: Fri, 28 Sep 2018 18:38:15 GMT
RESPONSE header key: Set-Cookie value: JSESSIONID=GTF8bn1XvKPw1mQ1HJaejfejjaE3fNb0pTG5T15VVbwGlQ!331878993!-1921346355; path=/; HttpOnly,NSC_WTWS-BHQSE-443=ffffffffaf1cef7b419874afe8455e445a4a422d69;Version=1;path=/;secure
RESPONSE header key: X-Powered-By value: Servlet/3.0 JSP/2.2
我已经使用 WebClient、HTTPClient 等尝试过类似的操作,但无法显示。如果我获取该 URI 并将其插入我的浏览器,响应 header 显示如下:
Browser response header pic
我不明白为什么当我从 WebAPI 发出请求时它不存在。我可以从 iOS 应用程序发出相同的请求并且它工作正常。同样,我可以很好地获取实际文档数据,但我无法获取文件名,因为 header 是 MIA。
有什么想法吗?我对此还很陌生,所以我希望它是一些简单易懂的东西。
谢谢
Oracle 服务器仅在存在有效 user-agent
时才发送 content-disposition
(浏览器会自动发送 user-agent header)。 oracle 服务器可能会这样做,因为它假定您不希望 content-disposition
header 除非您是浏览器(浏览器使用 content-disposition
header 来知道如何处理返回某些数据。即下载此文件、显示此图像等)。
因此请自己添加 user-agent
header 以获得 content-disposition
header。
我正在尝试创建一个 WebAPI,它将向另一台服务器(企业 Oracle Agile PLM)和 return 文档发出 GET 请求。我正在使用 .NET 4.5.1。我已经能够获得实际的文件数据,但是很难获得它的原始文件名。我读到响应的 Content-Disposition header 是寻找它的最佳位置,因为它不包含在 URI 中。
这是我目前正在尝试但失败的原因。这是不完整的,因为我纯粹专注于尝试让 header 显示:
public string GetDocsForDocNumber()
{
var docUrlString = "https://agprd.myDomain.com/Agile/link/Information%20Systems/1044698/files/ALL";
var username = "user";
var password = "pass";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(docUrlString);
try
{
string authKey = Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(username + ":" + password));
request.Headers.Add("Authorization", "Basic " + authKey);
//DEBUG - Printing out all request headers...
WebHeaderCollection whCollection2 = request.Headers;
for (int i = 0; i < whCollection2.Count; i++)
{
System.Diagnostics.Debug.WriteLine("\n REQUEST header key: " + whCollection2.GetKey(i) + " value: " + whCollection2.Get(i));
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (Stream rstream = response.GetResponseStream())
{
//DEBUG -- Printing out all response headers...
WebHeaderCollection whCollection = res.Headers;
for (int i = 0; i < whCollection.Count; i++)
{
System.Diagnostics.Debug.WriteLine("header key: " + whCollection.GetKey(i) + " value: " + whCollection.Get(i) + "\n");
}
}
res.Close();
}
catch { }
return "blah";
}
这是在 VS 中打印的 header:
REQUEST header key: Authorization value: Basic eWFAKeJaSEHnef2jk9hasE= (this is fudged FYI)
RESPONSE header key: Transfer-Encoding value: chunked
RESPONSE header key: Cache-Control value: private
RESPONSE header key: Content-Type value: application/octet-stream
RESPONSE header key: Date value: Fri, 28 Sep 2018 18:38:15 GMT
RESPONSE header key: Set-Cookie value: JSESSIONID=GTF8bn1XvKPw1mQ1HJaejfejjaE3fNb0pTG5T15VVbwGlQ!331878993!-1921346355; path=/; HttpOnly,NSC_WTWS-BHQSE-443=ffffffffaf1cef7b419874afe8455e445a4a422d69;Version=1;path=/;secure
RESPONSE header key: X-Powered-By value: Servlet/3.0 JSP/2.2
我已经使用 WebClient、HTTPClient 等尝试过类似的操作,但无法显示。如果我获取该 URI 并将其插入我的浏览器,响应 header 显示如下:
Browser response header pic
我不明白为什么当我从 WebAPI 发出请求时它不存在。我可以从 iOS 应用程序发出相同的请求并且它工作正常。同样,我可以很好地获取实际文档数据,但我无法获取文件名,因为 header 是 MIA。
有什么想法吗?我对此还很陌生,所以我希望它是一些简单易懂的东西。
谢谢
Oracle 服务器仅在存在有效 user-agent
时才发送 content-disposition
(浏览器会自动发送 user-agent header)。 oracle 服务器可能会这样做,因为它假定您不希望 content-disposition
header 除非您是浏览器(浏览器使用 content-disposition
header 来知道如何处理返回某些数据。即下载此文件、显示此图像等)。
因此请自己添加 user-agent
header 以获得 content-disposition
header。