【问题标题】:How can I choose my ajax response content type dynamically?如何动态选择我的 ajax 响应内容类型?
【发布时间】:2017-11-11 04:46:35
【问题描述】:
由于某些原因,我需要根据客户请求选择我的回复content-type。我想知道如何实现可以管理它的动态请求。我需要这样的东西:
e.g. /api/xml/values or /api/json/values
甚至:
e.g. /api/values?type=xml or /api/values?type=json
可以将ASP.net Web API 配置为动态处理内容类型。
【问题讨论】:
标签:
javascript
ajax
asp.net-mvc
asp.net-web-api
【解决方案1】:
在ASP.NET Web API 中,媒体类型格式化程序是一个可以:
- 从 HTTP 消息体中读取 CLR 对象
- 将 CLR 对象写入 HTTP 消息正文
Web API 为JSON 和XML 提供媒体类型格式化程序。这
默认情况下,框架将这些格式化程序插入到管道中。
客户端可以在 Accept 标头中请求 JSON 或 XML
HTTP 请求。
因此,您无需更改或设置任何配置即可实现这一目标。如果要确定响应内容类型,则需要向服务器发送正确的标头。
例如本节提供JSON:
$.ajax({
headers: {
Accept: "text/json; charset=utf-8",
"Content-Type": "text/json; charset=utf-8"
},
url: '/api/Values',
method: 'get'
}).then(console.log);
例如本节提供XML:
$.ajax({
headers: {
Accept: "text/xml; charset=utf-8",
"Content-Type": "text/xml; charset=utf-8"
},
url: '/api/Values',
method: 'get'
}).then(console.log);
结果
对于第一个代码(JSON 内容类型):
["value1","value2"]
对于第二个(XML 内容类型):
<ArrayOfstring xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays"><string>value1</string><string>value2</string></ArrayOfstring>