【问题标题】:Custom header is not visible on client side自定义标头在客户端不可见
【发布时间】:2016-06-03 12:33:21
【问题描述】:

我的 C# web api 中有以下代码

HttpResponseMessage result = null;
var stream = new MemoryStream(File.ReadAllBytes(tempFileName));
result = Request.CreateResponse(HttpStatusCode.OK);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.add("fileName", Path.GetFileName(tempFileName ));
File.Delete(tempFileName);
return result;

并在客户端跟随

var deferred = this.$q.defer();
this.$http({
              method: 'GET',
              url: someURL,
              responseType: 'arraybuffer'
}).then(function (response: any) {
     var blob = new Blob([response.data], { type: "application/octet-stream" });
     var link = document.createElement('a');
     var url = URL.createObjectURL(blob);
     link.setAttribute('href', url);
     link.setAttribute("download", "demo.doc");
     link.click();
     deferred.resolve();
   });
   return deferred.promise;

但是当我在客户端 javascript 上添加 watch for response.headers() 时,它只显示我关注

{content-type: "application/octet-stream", cache-control: "private"}

谁能帮我找到文件名标头在哪里?

【问题讨论】:

标签: javascript http-headers asp.net-web-api2 httpresponse


【解决方案1】:

我注意到的第一件事是您的“添加”应该是“添加”,我想这可能是您最后的错字,但想指出。

result.Content.Headers.Add("fileName", Path.GetFileName(tempFileName ));

我可以看到您正在使用 Angular 的 $http 服务来进行服务器 ajax 调用,您可以使用响应对象的“标头”属性,如下所示。

response.headers('fileName')

如果您使用的是 jQuery,那么您可以简单地使用以下内容,其中 jqXHR 是 jQuery 的 jqXHR 对象,它是 XMLHTTPRequest 对象的超集。

jqXHR.getResponseHeader('filename')

【讨论】:

  • 感谢您的回答,但没有一个解决方案有效,因为您可以看到只有两个标头暴露给客户端。我不确定在哪里进行更改服务器端或客户端
  • 我会尝试拦截网络流量(您可以使用 Chrome 的开发者工具或 Fiddler 等来执行此操作),然后查看 http 响应标头。如果您在那里没有看到您的自定义标头“文件名”,那么很可能它不是从服务器传递的。
猜你喜欢
  • 2023-04-01
  • 2017-01-19
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 2020-01-18
  • 2021-06-12
  • 1970-01-01
  • 2017-12-20
相关资源
最近更新 更多