首頁  >  文章  >  後端開發  >  我們如何在 Asp.Net WebAPI C# 中指定 MIME 類型?

我們如何在 Asp.Net WebAPI C# 中指定 MIME 類型?

WBOY
WBOY轉載
2023-09-20 20:37:15603瀏覽

媒體類型,也稱為 MIME 類型,標識一段資料的格式。在 HTTP 中,媒體類型描述了訊息正文的格式。媒體類型由兩個字串組成:類型和子類型。例如-

  • text/html
  • image/png
  • #application/json
當HTTP 訊息包含實體主體時,Content -Type 標頭指定訊息主體的格式。這告訴接收者如何解析訊息體的內容。

當客戶端傳送請求訊息時,可以包含 Accept 標頭。 Accept 標頭告訴伺服器客戶端希望從伺服器取得哪種媒體類型。

接受:text/html,application/xhtml xml,application/xml p>

媒體類型決定 Web API 如何序列化和反序列化 HTTP 訊息正文。 Web API 內建了對 XML、JSON、BSON 和 formurlencoded 資料的支持,您可以透過撰寫媒體格式化程式來支援其他媒體類型。

MediaTypeFormatter 是一個抽象類,JsonMediaTypeFormatter 和 XmlMediaTypeFormatter 類別繼承自該抽象類別從。 JsonMediaTypeFormatter 處理 JSON,XmlMediaTypeFormatter 處理 XML。媒體類型在 WebApiConfig 類別的 Register 方法中指定。讓我們來看看一些可以使用媒體類型的範例。

學生控制器

範例

using DemoWebApplication.Models;
using DemoWebApplication.Models;
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"
         }
      };
      public IEnumerable <Student> Get(){
         return students;
      }
   }
}

僅從 ASP.NET Web API 服務傳回 JSON 的範例,無論 Accept 標頭值 -

public static class WebApiConfig{
   public static void Register(HttpConfiguration config){
      config.MapHttpAttributeRoutes();
      config.Formatters.Remove(config.Formatters.XmlFormatter);
      config.Routes.MapHttpRoute(
         name: "DefaultApi",
         routeTemplate: "api/{controller}/{id}",
         defaults: new { id = RouteParameter.Optional }
      );
   }
}

使用上面的程式碼,我們刪除了 XmlFormatter,它強制 ASP.NET Web API 始終傳回 JSON,無論客戶端請求中的 Accept 標頭值為何。當您希望服務僅支援 JSON 而不是 XML 時,請使用此技術。

我们如何在 Asp.Net WebAPI C# 中指定 MIME 类型?

從上面的輸出我們可以看到,無論 Accept 標頭值 application/xml 是什麼,Web API 服務總是會傳回 JSON。

從 ASP.NET Web API 服務只傳回 XML 的範例,無論 Accept 標頭值-

public static class WebApiConfig{
   public static void Register(HttpConfiguration config){
      config.MapHttpAttributeRoutes();
      config.Formatters.Remove(config.Formatters.JsonFormatter);
      config.Routes.MapHttpRoute(
         name: "DefaultApi",
         routeTemplate: "api/{controller}/{id}",
         defaults: new { id = RouteParameter.Optional }
      );
   }
}

我们如何在 Asp.Net WebAPI C# 中指定 MIME 类型?

從上面的輸出我們可以看到,無論Accept 標頭值application/json 是什麼,Web API 服務都會傳回XML。

在下列情況下從 ASP.NET Web API 服務傳回 JSON 而不是 XML 的範例 瀏覽器發出請求 -

當瀏覽器向我們的 StudentController 發出請求時,回應將採用 XML 格式。這是因為瀏覽器預設以 text/html 形式發送接受標頭。

我们如何在 Asp.Net WebAPI C# 中指定 MIME 类型?

現在讓我們看看當從瀏覽器發出請求時如何發送 JSON 回應而不是 XML。

public static class WebApiConfig{
   public static void Register(HttpConfiguration config){
      config.MapHttpAttributeRoutes();
      config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new
      MediaTypeHeaderValue("text/html"));
      config.Routes.MapHttpRoute(
         name: "DefaultApi",
         routeTemplate: "api/{controller}/{id}",
         defaults: new { id = RouteParameter.Optional }
      );
   }
}

下面的輸出顯示,當從瀏覽器觸發請求時,無論接受標頭文字/html如何,回應都是 JSON 類型。

我們如何在 Asp.Net WebAPI C# 中指定 MIME 類型?

以上是我們如何在 Asp.Net WebAPI C# 中指定 MIME 類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除