Computer >> Máy Tính >  >> Lập trình >> C#

Làm cách nào để chỉ định kiểu MIME trong Asp.Net WebAPI C #?

Loại phương tiện, còn được gọi là kiểu MIME, xác định định dạng của một phần dữ liệu. Trong HTTP, các loại phương tiện mô tả định dạng của nội dung thư. Một loại phương tiện bao gồm hai chuỗi, một kiểu và một kiểu con. Ví dụ -

  • text / html
  • hình ảnh / png
  • ứng dụng / json

Khi thông báo HTTP chứa phần thân thực thể, tiêu đề Loại-Nội dung chỉ định định dạng của phần nội dung thư. Điều này cho người nhận biết cách phân tích cú pháp nội dung của nội dung thư.

Khi máy khách gửi một thông báo yêu cầu, nó có thể bao gồm một tiêu đề Chấp nhận. Tiêu đề Chấp nhận cho máy chủ biết (các) loại phương tiện mà máy khách muốn từ máy chủ.

Chấp nhận:text / html, application / xhtml + xml, application / xml

Loại phương tiện xác định cách Web API tuần tự hóa và giải mã hóa nội dung thông báo HTTP. Web API có hỗ trợ tích hợp cho dữ liệu XML, JSON, BSON và dữ liệu được mã hóa định dạng và bạn có thể hỗ trợ các loại phương tiện bổ sung bằng cách viết một trình định dạng phương tiện.

MediaTypeFormatter là một lớp trừu tượng mà từ đó các lớp JsonMediaTypeFormatter và XmlMediaTypeFormatter kế thừa. JsonMediaTypeFormatter xử lý JSON và XmlMediaTypeFormatter xử lý XML. Các loại phương tiện được chỉ định trong phương thức Đăng ký của lớp WebApiConfig. Hãy để chúng tôi xem một số ví dụ mà chúng tôi có thể thử nghiệm với các loại phương tiện.

Kiểm soát sinh viên

Ví dụ

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;
      }
   }
}

Ví dụ để chỉ trả lại JSON từ Dịch vụ API Web ASP.NET bất kể giá trị tiêu đề Chấp nhận -

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 }
      );
   }
}

Bằng cách sử dụng mã trên, chúng tôi đã loại bỏ XmlFormatter buộc ASP.NET Web API luôn trả về JSON bất kể giá trị tiêu đề Chấp nhận trong yêu cầu của khách hàng. Sử dụng kỹ thuật này khi bạn muốn dịch vụ của mình chỉ hỗ trợ JSON chứ không phải XML.

Làm cách nào để chỉ định kiểu MIME trong Asp.Net WebAPI C #?

Từ đầu ra ở trên, chúng ta có thể thấy bất kể ứng dụng giá trị tiêu đề Chấp nhận / xml, dịch vụ API Web sẽ luôn trả về JSON.

Ví dụ để chỉ trả lại XML từ Dịch vụ API Web ASP.NET bất kể giá trị tiêu đề Chấp nhận -

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 }
      );
   }
}

Làm cách nào để chỉ định kiểu MIME trong Asp.Net WebAPI C #?

Từ đầu ra ở trên, chúng tôi có thể thấy bất kể ứng dụng / json giá trị tiêu đề Chấp nhận, dịch vụ API Web đang trả về XML.

Ví dụ để trả về JSON thay vì XML từ Dịch vụ API Web ASP.NET khi yêu cầu được thực hiện từ trình duyệt -

Khi một yêu cầu được thực hiện từ trình duyệt tới StudentController của chúng tôi, phản hồi sẽ ở định dạng XML. Điều này là do trình duyệt gửi tiêu đề chấp nhận dưới dạng văn bản / html theo mặc định.

Làm cách nào để chỉ định kiểu MIME trong Asp.Net WebAPI C #?

Bây giờ chúng ta hãy xem cách gửi phản hồi JSON thay vì XML khi yêu cầu được đưa ra từ trình duyệt.

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 }
      );
   }
}

Kết quả bên dưới cho thấy phản hồi thuộc loại JSON khi yêu cầu được kích hoạt từ trình duyệt bất kể văn bản tiêu đề chấp nhận / html.

Làm cách nào để chỉ định kiểu MIME trong Asp.Net WebAPI C #?