问题标签 [content-negotiation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1010 浏览

java - ContentNegotiation:如何从接受标头中提供除最高排名类型以外的服务

我有这个带有几个自定义 HttpMessageConverters 的 Spring Java 配置:

如果我使用 Jena 查询此设置,则会收到错误消息:

此请求标识的资源只能生成具有根据请求“接受”标头不可接受的特征的响应

Jena 发送带有此 Accept 标头的请求:

接受:text/turtle,application/n-triples;q=0.9,application/rdf+xml;q=0.8,application/xml;q=0.7, / ;q=0.5

据我了解,application/rdf+xml, 应该由上面的配置返回。只要配置了具有最高值的类型,这就会完美地工作。为什么 Spring 不回退到 0.8-valued application/rdf+xml,因为text/turtleandapplication/n-triples不可用?

有没有激活它的选项?

0 投票
2 回答
8954 浏览

c# - 如何获得南希谈判代表的回应?

我有一个NancyContext,我需要Response根据请求的正确内容谈判者来获得一个正文。我想我可以使用 Nancy 的Negotiator类来添加模型、设置状态和其他事情。但是,我需要返回一个Response. 那么,我可以使用什么来构建响应Negotiator

这是我的方法:

0 投票
1 回答
64 浏览

apache - 如何用apache写一个简单的内容协商

我想写一条规则说,每当请求该资源时,如果内容类型是 X,则返回 file_x,如果是 Y,则返回 file_Y

任何人都可以在这里帮忙吗?

非常感谢,

-D-

0 投票
1 回答
599 浏览

apache - 与 apache 的链接数据 (RDF) 内容协商

我想知道是否有人可以为我提供典型规则,以便在请求资源时根据所需的内容类型提供适当的文件。更具体地说,这里是我的情况:

我有一个 purl URL,我重定向到我的 apache 服务器上的 URL。我希望资源 URL 类似于资源的通用 URL,然后根据内容类型提供适当的文档:RDF、TTL 或 HTML。

因此,我想知道如何在 .htaccess 文件中执行此操作。任何人都可以在这里帮忙吗?

非常感谢

0 投票
4 回答
3263 浏览

c# - ASP.NET Web API 中的内容协商

我正在将 Web 服务迁移到 ASP.NET Web Api 2,并且几乎在第一个障碍中遇到了麻烦。

我想做这个:

并且能够向服务询问“application/json”或“application/xml”(或实际上任何其他潜在格式,例如 Message Pack),并获得序列化响应。但它似乎只适用于 JSON。

我已经阅读了这篇文章并看到了文档,其中明确指出该框架无法将匿名类型序列化为 XML(严重),并且解决方案是不使用 XML(严重)。

当我尝试调用它并请求 XML 作为响应类型时,我得到

我不会取消对想要请求 XML 的客户的支持——但我真的找不到解决这个问题的方法——我能做什么?

编辑

我已经添加了这些:

根据Dalorzo的回答,但这没有什么区别。

为澄清起见,当我application/json使用application/xml.

0 投票
0 回答
258 浏览

apache - 具有自定义内容协商响应正文的 Apache DirectorySlash 301

当 Apachemod_dirDirectorySlash机制 301 请求映射到目录但缺少尾部斜杠时,它会生成类型的响应正文text/html,无论Accept:请求的标头如何。虽然我知道几乎每个客户端都会使用Location:响应中的标头来确定去哪里,但我想知道是否可以自定义响应主体以生成text/html. 在我的具体情况下,我正在获取application/rdf+xmltext/turtle请求并返回类似编码的 RDF 响应。我希望能够通过如下响应来处理这些缺失的斜线 301:

我尝试过使用重写规则并ErrorDocument在这样的.htaccess文件中:

这工作正常。但是一旦我需要处理其他内容类型的案例,它就会停止工作。虽然我可以毫无问题地添加另一组重写规则,但我不能重复文件ErrorDocument中的指令.htaccess;只有文件中最后一个这样的指令才会实际应用,导致所有 301 响应都获得相同的响应正文。

我想如果我不限于.htaccess我可能能够使用<Location>ErrorDocuments 彼此隔离的指令。

那么有没有办法对错误响应主体进行内容协商?

0 投票
1 回答
1177 浏览

php - 我如何使用 Symfony 2 和 FOSRestBundle 提供来自同一路由的 HTML 和 JSON 请求,除了 _format 之外还使用标头?

我正在尝试使用SymfonyhtmlFOSRestBundle(1.3 版)以两种json格式提供内容(我也希望最终也允许)。我已经成功地使用参数为路线提供不同的内容,例如:xml_format

  • /foo.json将导致 JSON 响应,
  • /foo会产生一个 HTML 响应。

有没有办法使用除 之外的东西来协调(在同一主机上!)上面的相同内容协商_format,例如Content-TypeorAccept标头?

我查看了格式侦听器,但我认为我对如何配置它有一个基本的误解。


给定定义的路线:

...对于以下操作:

...以及以下 FOSRestBundle 配置(片段):

_format如果我想要以默认 ( ) 以外的格式协商内容,我需要在请求中指定参数html,如上所述。

但是,如果我为格式侦听器指定以下规则:

浏览器请求返回我的响应,Content-Type: application/json但实际内容是text/html内容而不是序列化的 JSON。Accept如果我在请求中明确指定标头,因为Accept: text/html我收到的响应的内容类型标头为Content-Type: text/html.

任何帮助将不胜感激!

0 投票
1 回答
162 浏览

node.js - 在 Express4 中,如何强制使用 MIME 类型进行协商

res.format(...)在 Express 4 中,强制在后续调用中使用特定 MIME 类型的最佳方法是什么?

内容协商工作得很好(使用 curl 和手动标题时),但我在一个浏览器中,我想强制下载 PDF,所以我需要按需覆盖它。我真的不想为相同的内容(讨厌的和非 RESTy)创建一个全新的 URL 路由。

文档中仍然有引用req.accepted(在此处:http://expressjs.com/api#req.accepts),但源代码中似乎不存在。似乎 Express 4 中的更改以某种方式改变了 API,而这种方式已经从文档中溜走了。

我已经尝试res.type()了很多其他曾经有效的方法,但无济于事。

0 投票
2 回答
814 浏览

json - 在 REST 中提供 HTML 应用程序页面和 JSON 数据

在 RESTful 应用程序中,使用“资源”URL 来提供 JSON 数据和访问数据的页面是否是个好主意?如果不是,我应该如何区分这两件事?

假设我有一个页面/routes,并且我有一个列出所有路线的页面。我应该这样做:

网页

JSON 响应

这似乎是错误的,因为这两个请求是针对相同的 URL/URI,但返回不同的资源(一个是应用程序页面,而另一个是数据)。为以下内容提供这样的服务似乎更合适Accept: text/html

(我可能不会这样做,因为它不是很有用。)

我想过几个选择:

  1. Accept如上所述使用 HTTP标头
  2. 使用查询参数(例如/routes?type=html
  3. 为页面使用不同的路径(例如/routes用于数据和/pages/routes应用程序)
  4. 使用扩展(例如/routes用于数据和/routes.php应用程序)

1 和 2 似乎不太对。即使页面本身就是资源,我也不太热衷于 3,但它并不完全代表应用程序中的实体。选项 4 看起来很丑陋。

我尝试查看主要站点的功能,它们都提供来自不同主机/子域的数据(例如:facebook.com/ graph.facebook.comtwitter.com/ api.twitter.com),这对我来说不是一个选择。

有任何想法吗?这个问题不应该主要基于意见,因此非常感谢您的参考。

0 投票
3 回答
810 浏览

c# - 通过 web api 使无模式 json 可序列化

我有一个 JSON 字符串,其中包含一个复杂、嵌套的对象,并且将来可能会更改架构。我想将其交给 Web API,以便根据需要在内容协商管道中进行序列化。

有没有直接的方法可以做到这一点?我已经阅读了关于 SO 的其他答案,但它们只讨论了您事先知道所需架构的情况(例如,使用 反序列JsonConvert.DeserializeAnonymousType化)或者您知道要反序列化到的嵌套深度。

例如,假设我有以下字符串:

我不知道它的架构是什么,它可以随时更改,我只想能够通过适当的内容协商通过 web api 发送它。

我可以,JObject.Parse(...)但 web api 无法JObject正确处理 s。它会正确处理字典,但我似乎无法弄清楚如何使用 JSON.Net 反序列化任意嵌套深度的字典。