使用ASP.NET Core 3.x 構建 RESTful API - 3.4 內容協商

来源:https://www.cnblogs.com/cgzl/archive/2019/12/16/12040892.html
-Advertisement-
Play Games

現在,當談論起 RESTful Web API 的時候,人們總會想到 JSON。但是實際上,JSON 和 RESTful API 沒有半毛錢關係,只不過 JSON 恰好是RESTful API 結果的表述格式。也就是說 RESTful API 還可以使用其它的表述格式,例如 xml 或私有的格式。這 ...


現在,當談論起 RESTful Web API 的時候,人們總會想到 JSON。但是實際上,JSON  RESTful API 沒有半毛錢關係,只不過 JSON 恰好是RESTful API 結果的表述格式。也就是說 RESTful API 還可以使用其它的表述格式,例如 xml 或私有的格式。這也就意味著,我們需要讓 RESTful API 知道我們想要返回的格式。而這就是HTTP請求和響應的核心內容之一: 

 

Content Negotiation 內容協商 

內容協商是這樣一個過程:針對一個響應,當有多種表述格式可用的時候,選取最佳的一個表述。 

 

當我們的RESTful API只面向一個API消費者的時候,也許只使用 JSON 一種格式是沒有什麼問題的。但是如果需要面向各種形式的多個API消費者,那麼很有可能少數API消費者無法很好的解析JSON,它們可能更習慣於xml或者其它格式。 

 

那麼如何解決這個問題呢? 

HTTP請求的 Accept Header 就是用來解決這個問題的,API的消費者在發送請求的時候,在Accept Header 裡面填寫好 Media Type(媒體類型),例如 application/json 或者 application/xml等等。 

如果請求里填寫的是 application/json,那麼RESTful API返迴響應的表述格式就應該是 json 

 

而如果請求沒有填寫 Accept Header,那麼 RESTful API 只好使用它的預設格式進行響應了。 

如果在 Accept Header 裡面填寫的格式不被 RESTful API 所支持,那麼倒是也可以返回預設的格式,但還是要儘量避免這種情況的出現,其實針對這種情況最好的辦法是返回 406Not Acceptable 狀態碼,表示 API消費者請求的媒體類型是不可接受的,無法將其作為響應的格式。 

 

綜上,Accept Header 指的是輸出格式。 

 ASP.NET Core 裡面對應的就是 Output Formatters 

 

而用於指定輸入格式的 Header Content-Type,在 ASP.NET Core 裡面對應的就是 Input formatter 

例如 POST 請求的 body 就需要通過指定 Content-Type 來進行標識,這個 Header 可以看作是自描述性這個約束的一部分(每個消息必須包含足夠的信息來知道如何對它進行處理)。 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 時間如流水,只能流去不流回! 點贊再看,養成習慣,這是您給我創作的動力! 本文 Dotnet9 https://dotnet9.com 已收錄,站長樂於分享dotnet相關技術,比如Winform、WPF、ASP.NET Core等,亦有C++桌面相關的Qt Quick和Qt Widgets等,只分 ...
  • 時間如流水,只能流去不流回! 點贊再看,養成習慣,這是您給我創作的動力! 本文 Dotnet9 https://dotnet9.com 已收錄,站長樂於分享dotnet相關技術,比如Winform、WPF、ASP.NET Core等,亦有C++桌面相關的Qt Quick和Qt Widgets等,只分 ...
  • 時間如流水,只能流去不流回! 點贊再看,養成習慣,這是您給我創作的動力! 本文 Dotnet9 https://dotnet9.com 已收錄,站長樂於分享dotnet相關技術,比如Winform、WPF、ASP.NET Core等,亦有C++桌面相關的Qt Quick和Qt Widgets等,只分 ...
  • 時間如流水,只能流去不流回! 點贊再看,養成習慣,這是您給我創作的動力! 本文 Dotnet9 https://dotnet9.com 已收錄,站長樂於分享dotnet相關技術,比如Winform、WPF、ASP.NET Core等,亦有C++桌面相關的Qt Quick和Qt Widgets等,只分 ...
  • 時間如流水,只能流去不流回! 點贊再看,養成習慣,這是您給我創作的動力! 本文 Dotnet9 https://dotnet9.com 已收錄,站長樂於分享dotnet相關技術,比如Winform、WPF、ASP.NET Core等,亦有C++桌面相關的Qt Quick和Qt Widgets等,只分 ...
  • 時間如流水,只能流去不流回! 點贊再看,養成習慣,這是您給我創作的動力! 本文 Dotnet9 https://dotnet9.com 已收錄,站長樂於分享dotnet相關技術,比如Winform、WPF、ASP.NET Core等,亦有C++桌面相關的Qt Quick和Qt Widgets等,只分 ...
  • 時間如流水,只能流去不流回! 點贊再看,養成習慣,這是您給我創作的動力! 本文 Dotnet9 https://dotnet9.com 已收錄,站長樂於分享dotnet相關技術,比如Winform、WPF、ASP.NET Core等,亦有C++桌面相關的Qt Quick和Qt Widgets等,只分 ...
  • 一、非同步方法返回類型 只能返回3種類型(void、Task和Task<T>)。 1.1、void返回類型:調用方法執行非同步方法,但又不需要做進一步的交互。 class Program { static void Main(string[] args) { #region async & await入 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...