首页 >后端开发 >C#.Net教程 >什么是 Asp.Net webAPI C# 中的内容协商?

什么是 Asp.Net webAPI C# 中的内容协商?

王林
王林转载
2023-09-11 17:13:01651浏览

内容协商是为给定的内容选择最佳表示的过程 当有多个表示可用时的响应。意味着,取决于 接受请求中的标头值,服务器发送响应。首要的 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<Student> students = new List<Student>{
         new Student{
            Id = 1,
            Name = "Mark"
         },
         new Student{
            Id = 2,
            Name = "John"
         }
      };
   }
}

RESTful服务的标准之一是,客户端应该有能力 决定他们想要哪种格式的响应 - XML、JSON 等。 发送到服务器包含 Accept 标头。使用 Accept 标头,客户端可以 指定响应的格式。例如

Accept: application/xml returns XML
Accept: application/json returns JSON

下面的输出显示当我们将 Accept 标头传递为 XML 时,响应为 XML 应用程序/XML。

什么是 Asp.Net webAPI C# 中的内容协商?

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

什么是 Asp.Net webAPI C# 中的内容协商?

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

什么是 Asp.Net webAPI C# 中的内容协商?

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

什么是 Asp.Net webAPI C# 中的内容协商?

以上是什么是 Asp.Net webAPI C# 中的内容协商?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:tutorialspoint.com。如有侵权,请联系admin@php.cn删除