首頁  >  文章  >  後端開發  >  什麼是 Asp.Net webAPI C# 中的內容協商?

什麼是 Asp.Net webAPI C# 中的內容協商?

王林
王林轉載
2023-09-11 17:13:01584瀏覽

內容協商是為給定的內容選擇最佳表示的過程 當有多個表示可用時的回應。意味著,取決於 接受請求中的標頭值,伺服器發送回應。首要的 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刪除