如何在 Asp.Net WebAPI C# 中指定 MIME 类型?
媒体类型,也称为 MIME 类型,用于标识一段数据的格式。在 HTTP 中,媒体类型描述消息主体的格式。媒体类型由两个字符串组成,一个类型和一个子类型。例如 −
- text/html
- image/png
- application/json
当 HTTP 消息包含实体主体时,Content-Type 标头指定消息主体的格式。这会告诉接收方如何解析消息主体的内容。
当客户端发送请求消息时,它可以包含一个 Accept 标头。 Accept 标头告诉服务器客户端希望从服务器获取哪种媒体类型。
Accept: text/html,application/xhtml+xml,application/xml
媒体类型决定了 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; } } }
示例:无论 Accept 标头值 − 如何,仅从 ASP.NET Web API 服务返回 JSON
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,请使用此技术。
从上面的输出中我们可以看到,无论 Accept 标头值 application/xml 如何,Web API 服务始终都会返回 JSON。
示例:无论 Accept 标头值如何,仅从 ASP.NET Web API 服务返回 XML −
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 } ); } }
从上面的输出中我们可以看到,无论 Accept 标头值 application/json 如何,Web API 服务都会返回 XML。
当从浏览器发出请求时,从 ASP.NET Web API 服务返回 JSON 而不是 XML 的示例 −
当从浏览器向我们的 StudentController 发出请求时,响应将采用 XML 格式。这是因为浏览器默认以 text/html 形式发送接受标头。
现在让我们看看当从浏览器发出请求时如何发送 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 类型。