【问题标题】:How to set contentType in angularjs $http.get如何在 angularjs $http.get 中设置 contentType
【发布时间】:2015-05-28 22:43:36
【问题描述】:

我有以下代码用于调用返回字节数组的 Web API。 我想将 ContentType 设置为 'application/pdf',这在 jQuery ajax 调用中非常简单,但在 angularjs 中找不到方法。

问题:我将如何在 angularjs 中对以下代码执行此操作?

  return $http.get('/api/v1/alarms/exportsummarytopdf?start=2011-03-
     30T05:00:00.000Z&end=2015-04-14T05:00:00.000Z')
    .then(getSummaryPdfExportComplete)
           .catch(function (message) {
               exception.catcher('XHR failed for getSummaryPdfExport')(message);
           });

        function getSummaryPdfExportComplete(response) {
            logger.info('getSummaryPdfExport: complete');
            return response.data;
        }

更新 1

当我直接访问类似的 URL 时,Chrome 清楚地将内容类型显示为“应用程序/pdf”。在调用返回字节数组的 web api 时,我可能需要使用其他东西。

Chrome 中显示的错误如下。

当我使用 responseType: 'arraybuffer' 时,此失败请求的标头如下。

【问题讨论】:

  • Content-Type 是一个响应头。为什么要在请求中设置它?
  • 您在请求中传递了一个标头对象:docs.angularjs.org/api/ng/service/$http 但实际上您的服务器应该是设置内容类型的服务器,而不是客户端。
  • 您能否发布实际 URL 的标题,而不是“相似”的 URL?
  • 看起来您遇到了服务器错误。问题不在于内容类型。 Status code: 400 Bad Request 您发送的参数不是 api 所期望的,或者 api 存在导致其抛出异常的错误。
  • @HankScorpio 几个 cmets(来自 OP)~stackoverflow.com/questions/30518266/…。鉴于这不是请求参数,我会说这绝对是 API 的内部错误。我还要说它返回了错误的状态码;应该是 500

标签: angularjs content-type


【解决方案1】:

对基本问题的简短回答是,如果您想在 $http.get() 调用中设置标头,请将其作为“config”(第二个可选参数)的一部分发送。

例如:

$http.get('/api/v1/alarms/exportsummarytopdf?start=2011-03-
  30T05:00:00.000Z&end=2015-04-14T05:00:00.000Z',
  {headers: { 'Accept': 'application/pdf' });

对于您的具体问题,您似乎想要“接受”而不是“内容类型”。

请参阅HTTP headers 了解更多信息。

【讨论】:

  • 会拒绝不是'application/pdf'的内容类型吗?
  • 某事告诉我无论Accept 标头说什么,服务器都会返回二进制数据
  • 一切都取决于服务器的配置方式......虽然这里的示例 URL 是“exportsummarytopdf”,所以我猜无论如何都会出现这种情况。
  • 发布的响应标头来自“类似的 url” - 我怀疑 API 响应仍未返回响应标头。
  • 它会继续这样做,直到您解决 API 的问题。
猜你喜欢
  • 1970-01-01
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
  • 2018-07-11
  • 2011-06-29
  • 1970-01-01
相关资源
最近更新 更多