内容协商是为给定的内容选择最佳表示的过程当有多个表示可用时的响应。意味着,取决于接受请求中的标头值,服务器发送响应。首要的HTTP 中内容协商的机制是这些请求标头 –
accept – 响应可以接受哪些媒体类型,例如“application/json”、“application/xml”或自定义媒体类型,例如“application/vnd.example+xml”
Accept-Charset – 可接受哪些字符集,例如 UTF-8 或 ISO 8859-1 .
Accept-Encoding – 哪些内容编码是可接受的,例如 gzip。
Accept-Language – 首选自然编码语言,例如“en-us”。
服务器还可以查看 HTTP 请求的其他部分。例如,如果请求中包含 X-Requested-With 标头,表示 AJAX 请求,服务器如果没有 Accept 标头,则可能默认为 JSON。
在内容协商中,管道从HttpConfiguration 对象。它还从以下位置获取媒体格式化程序列表HttpConfiguration.Formatters 集合。
接下来,管道调用 IContentNegotiator.Negotiate,传入 –
要序列化的对象类型媒体格式化程序的集合HTTP 请求
Negotiate 方法返回两条信息 –
使用哪个格式化程序响应的媒体类型
如果没有找到格式化程序,则 Negotiate 方法返回 null,客户端接收HTTP 错误 406(不可接受)。
让我们考虑如下的 StudentController。
using DemoWebApplication.Models;using System;using System.Collections.Generic;using System.Linq;using System.Web.Http;namespace DemoWebApplication.Controllers{ public class StudentController : ApiController{ List students = new List{ new Student{ Id = 1, Name = "Mark" }, new Student{ Id = 2, Name = "John" } }; }}
RESTful服务的标准之一是,客户端应该有能力决定他们想要哪种格式的响应 – XML、JSON 等。发送到服务器包含 Accept 标头。使用 Accept 标头,客户端可以指定响应的格式。例如
Accept: application/xml returns XMLAccept: application/json returns JSON
下面的输出显示当我们将 Accept 标头传递为 XML 时,响应为 XML应用程序/XML。

下面的输出显示,当我们将 Accept 标头传递为 JSON 时,响应为 JSONapplication/JSON。

当响应以请求的格式发送到客户端时,请注意响应的 Content-Type 标头设置为适当的值。例如,如果客户端请求application/xml,服务器以XML格式发送数据,还设置 Content-Type=application/xml。

我们还可以指定品质因数。在下面的示例中,xml 具有更高的质量Factor 比 json 更重要,因此服务器使用 XML 格式化程序并将数据格式化为 XML。application/xml;q=0.8,application/json;q=0.5

以上就是什么是 Asp.Net webAPI C# 中的内容协商?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1435362.html
微信扫一扫
支付宝扫一扫