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

2023年 9月 21日 70.9k 0

媒体类型,也称为 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 students = new List {
new Student{
Id = 1,
Name = "Mark"
},
new Student{
Id = 2,
Name = "John"
}
};
public IEnumerable 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 类型?的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论