涵盖的 Web API 内容类型
text/plainapplication/jsonapplication/xmlapplication/octet-stream什么是 Content-Type?
对于 HTTP 调用,有一个名为“Content-Type”的标头值。它显示一个与在进行任何编码之前附加到 HTTP 调用的资源/内容的媒体类型相对应的值。
入门 - 创建 .NET Web API 项目
我们首先需要打开 Visual Studio 2022 并创建一个 Web API:
选择 ASP.NET Core Web API
选择正确的项目后,我们需要命名它并为.NET 8 进行配置。
一旦我们创建了项目,我们将需要删除包含的样板文件:WeatherForecaseController.cs 和 WeatherForecast.cs
之后,继续创建一个空的新 API 控制器并将其命名为 ContentTypeController.cs:
现在我们已经设置了 Web API,我们可以继续测试开发服务器 IIS Express(Internet Information Services Express):
单击开始后,“Swagger UI”页面将在您选择的浏览器中打开。我们可以通过单击任务栏中的胡萝卜并右键单击 IIS Express 图标来检查我们的 IIS Express 是否正在运行:
现在我们知道 IIS Express 运行良好,我们可以通过单击停止图标在 Visual Studio 中停止我们的应用程序。
text/plain
最简单的内容类型是“text/plain”。
在我们的“ContentTypeController”中,我们需要添加以下代码行:
// GET: api/<ValuesController>/textplainstring
[HttpGet]
[Route("textplainstring")]
public IActionResult GetTextPlainString()
{
return Ok("text/plain");
}
我们正在向调用者返回 IActionResult。IActionResult 是最佳做法,因为它可以灵活地在同一调用中返回不同类型、对象或状态代码。
上面显示我们的值作为参数传递给继承的“ControllerBase”类提供的 Ok() 方法。在 .NET 8 中,默认情况下,字符串会自动格式化为“text/plain”。
Ok() 方法返回“OkObjectResult”。此回合是“ObjectResult”的子项 — — 后者也继承了“IActionResult”。
如果我在 Visual Studio 中运行 Web API,我可以使用 Insomnia 调用该 API:
application/json
最常用的内容类型之一是“application/json”。
JSON 代表 JavaScript 对象表示法。
在我们的“ContentTypeController”中,我们需要添加以下代码行:
// Tree Class
public class Tree
{
public int apples { get; set; }
}
// GET: api/<ValuesController>/applicationjson
[HttpGet]
[Route("applicationjson")]
public IActionResult GetApplicationJson()
{
Tree tree = new() { apples = 10 };
return Ok(tree);
}
因为我们返回的是 IActionResult 类型的对象,所以 .NET 知道自动序列化传递的参数。
如果我在 Visual Studio 中运行 Web API,我可以使用 Insomnia 调用该 API:
application/xml
JSON 的古老且更为复杂的兄弟是 XML。
XML 代表“可扩展标记语言”。
对于这种类型,我们首先需要向“Program.cs”添加代码:
在上面的照片中,我需要修改第 5 行使其看起来像这样:
builder.Services.AddControllers().AddXmlSerializerFormatters();
添加此行代码将 XML 格式化程序注入到使用 XmlSerializer 的控制器中。
接下来,在我们的“ContentTypeController”中,我们需要添加以下代码行:
// GET: api/<ValuesController>/applicationxml
[HttpGet]
[Route("applicationxml")]
[Produces("application/xml")]
public IActionResult GetApplicationXml()
{
Tree tree = new() { apples = 10 };
return Ok(tree);
}
上述代码与用于 JSON 的代码几乎相同,最大的区别是“[Produces(“application/xml”)]”。
以前,当返回 JSON 对象时,.NET 会将其隐式序列化为 JSON。
对于 XML,我们现在必须明确添加“Produces”格式化程序以确保正确的序列化。
如果我在 Visual Studio 中运行 Web API,我可以使用 Insomnia 调用该 API:
application/octet-stream
此内容类型用于返回可能有或可能没有文件类型的二进制文件。
由于一个字节有 8 位,因此使用八位字节作为名称。
在我们的“ContentTypeController”中,我们需要添加以下代码行:
// GET: api/<ValuesController>/applicationoctetstream
[HttpGet]
[Route("applicationoctetstream")]
public IActionResult GetApplicationOctetStream()
{
byte[] bytes = Encoding.Unicode.GetBytes("hello");
return File(bytes, "application/octet-stream");
}
由于我们的控制器继承了“ControllerBase”,我们可以调用可用的“File”方法。由于我们提供的是字节,因此该方法返回“FileContentResult”响应。如果我们使用 Stream,它将返回“FileStreamResult”。如果我们要提供虚拟路径(即由服务器混淆的路径),则还会有一个“VirtualFileResult”。
如果我在 Visual Studio 中运行 Web API,我可以使用 Insomnia 调用该 API:
这就是返回的全部内容
text/plainapplication/jsonapplication/xmlapplication/octet-stream在 .NET 8 Web API 中使用 IActionResult 返回流行的 Content-Type。
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。