问题标签 [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.
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/turtle
andapplication/n-triples
不可用?
有没有激活它的选项?
c# - 如何获得南希谈判代表的回应?
我有一个NancyContext
,我需要Response
根据请求的正确内容谈判者来获得一个正文。我想我可以使用 Nancy 的Negotiator
类来添加模型、设置状态和其他事情。但是,我需要返回一个Response
. 那么,我可以使用什么来构建响应Negotiator
?
这是我的方法:
apache - 如何用apache写一个简单的内容协商
我想写一条规则说,每当请求该资源时,如果内容类型是 X,则返回 file_x,如果是 Y,则返回 file_Y
任何人都可以在这里帮忙吗?
非常感谢,
-D-
apache - 与 apache 的链接数据 (RDF) 内容协商
我想知道是否有人可以为我提供典型规则,以便在请求资源时根据所需的内容类型提供适当的文件。更具体地说,这里是我的情况:
我有一个 purl URL,我重定向到我的 apache 服务器上的 URL。我希望资源 URL 类似于资源的通用 URL,然后根据内容类型提供适当的文档:RDF、TTL 或 HTML。
因此,我想知道如何在 .htaccess 文件中执行此操作。任何人都可以在这里帮忙吗?
非常感谢
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
.
apache - 具有自定义内容协商响应正文的 Apache DirectorySlash 301
当 Apachemod_dir
的DirectorySlash
机制 301 请求映射到目录但缺少尾部斜杠时,它会生成类型的响应正文text/html
,无论Accept:
请求的标头如何。虽然我知道几乎每个客户端都会使用Location:
响应中的标头来确定去哪里,但我想知道是否可以自定义响应主体以生成text/html
. 在我的具体情况下,我正在获取application/rdf+xml
或text/turtle
请求并返回类似编码的 RDF 响应。我希望能够通过如下响应来处理这些缺失的斜线 301:
我尝试过使用重写规则并ErrorDocument
在这样的.htaccess
文件中:
这工作正常。但是一旦我需要处理其他内容类型的案例,它就会停止工作。虽然我可以毫无问题地添加另一组重写规则,但我不能重复文件ErrorDocument
中的指令.htaccess
;只有文件中最后一个这样的指令才会实际应用,导致所有 301 响应都获得相同的响应正文。
我想如果我不限于.htaccess
我可能能够使用<Location>
将ErrorDocument
s 彼此隔离的指令。
那么有没有办法对错误响应主体进行内容协商?
php - 我如何使用 Symfony 2 和 FOSRestBundle 提供来自同一路由的 HTML 和 JSON 请求,除了 _format 之外还使用标头?
我正在尝试使用Symfonyhtml
和FOSRestBundle(1.3 版)以两种json
格式提供内容(我也希望最终也允许)。我已经成功地使用参数为路线提供不同的内容,例如:xml
_format
/foo.json
将导致 JSON 响应,- 并
/foo
会产生一个 HTML 响应。
有没有办法使用除 之外的东西来协调(在同一主机上!)上面的相同内容协商_format
,例如Content-Type
orAccept
标头?
我查看了格式侦听器,但我认为我对如何配置它有一个基本的误解。
给定定义的路线:
...对于以下操作:
...以及以下 FOSRestBundle 配置(片段):
_format
如果我想要以默认 ( ) 以外的格式协商内容,我需要在请求中指定参数html
,如上所述。
但是,如果我为格式侦听器指定以下规则:
浏览器请求返回我的响应,Content-Type: application/json
但实际内容是text/html
内容而不是序列化的 JSON。Accept
如果我在请求中明确指定标头,因为Accept: text/html
我收到的响应的内容类型标头为Content-Type: text/html
.
任何帮助将不胜感激!
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()
了很多其他曾经有效的方法,但无济于事。
json - 在 REST 中提供 HTML 应用程序页面和 JSON 数据
在 RESTful 应用程序中,使用“资源”URL 来提供 JSON 数据和访问数据的页面是否是个好主意?如果不是,我应该如何区分这两件事?
假设我有一个页面/routes
,并且我有一个列出所有路线的页面。我应该这样做:
网页
JSON 响应
这似乎是错误的,因为这两个请求是针对相同的 URL/URI,但返回不同的资源(一个是应用程序页面,而另一个是数据)。为以下内容提供这样的服务似乎更合适Accept: text/html
:
(我可能不会这样做,因为它不是很有用。)
我想过几个选择:
Accept
如上所述使用 HTTP标头- 使用查询参数(例如
/routes?type=html
) - 为页面使用不同的路径(例如
/routes
用于数据和/pages/routes
应用程序) - 使用扩展(例如
/routes
用于数据和/routes.php
应用程序)
1 和 2 似乎不太对。即使页面本身就是资源,我也不太热衷于 3,但它并不完全代表应用程序中的实体。选项 4 看起来很丑陋。
我尝试查看主要站点的功能,它们都提供来自不同主机/子域的数据(例如:facebook.com
/ graph.facebook.com
,twitter.com
/ api.twitter.com
),这对我来说不是一个选择。
有任何想法吗?这个问题不应该主要基于意见,因此非常感谢您的参考。
c# - 通过 web api 使无模式 json 可序列化
我有一个 JSON 字符串,其中包含一个复杂、嵌套的对象,并且将来可能会更改架构。我想将其交给 Web API,以便根据需要在内容协商管道中进行序列化。
有没有直接的方法可以做到这一点?我已经阅读了关于 SO 的其他答案,但它们只讨论了您事先知道所需架构的情况(例如,使用 反序列JsonConvert.DeserializeAnonymousType
化)或者您知道要反序列化到的嵌套深度。
例如,假设我有以下字符串:
我不知道它的架构是什么,它可以随时更改,我只想能够通过适当的内容协商通过 web api 发送它。
我可以,JObject.Parse(...)
但 web api 无法JObject
正确处理 s。它会正确处理字典,但我似乎无法弄清楚如何使用 JSON.Net 反序列化任意嵌套深度的字典。