如何在ASP.NET Core中格式化响应数据

ASP.NET Core提供了出色的格式化数据支持,无论是输出数据还是请求正文中的数据。 在ASP.NET Core中工作时,您的API方法通常将返回JSON数据,但是您还可以返回JSON以外的其他格式的数据,例如XML。

例如,对/api/default.json的调用应以JSON格式从API方法返回数据,而对/api/default.xml的调用应以XML格式返回数据。 在本文中,我们将研究如何控制基于URL扩展从ASP.NET Core返回数据的格式。

[ 也在InfoWorld上:微软开发人员工具和技术将在2020年进行探索 ]

若要使用本文提供的代码示例,您应该在系统中安装Visual Studio 2019。 如果您还没有副本,则可以在此处下载Visual Studio 2019

创建一个ASP.NET Core API项目

首先,让我们在Visual Studio中创建一个ASP.NET Core API项目。 假设系统中已安装Visual Studio 2019,请按照以下概述的步骤在Visual Studio 2019中创建新的ASP.Net Core API项目。

  1. 启动Visual Studio IDE。
  2. 点击“创建新项目”。
  3. 在“创建新项目”窗口中,从显示的模板列表中选择“ ASP.NET Core Web应用程序”。
  4. 点击下一步。
  5. 在接下来显示的“配置新项目”窗口中,指定新项目的名称和位置。
  6. 单击创建。
  7. 在“创建新的ASP.NET Core Web应用程序”窗口中,从顶部的下拉列表中选择.NET Core作为运行时,并选择ASP.NET Core 2.2(或更高版本)。 我将在这里使用ASP.NET Core 3.0。
  8. 选择“ API”作为项目模板以创建新的ASP.NET Core API应用程序。
  9. 确保未选中“启用Docker支持”和“配置HTTPS”复选框,因为我们此处将不再使用这些功能。
  10. 确保将身份验证设置为“无身份验证”,因为我们也不会使用身份验证。
  11. 单击创建。

您应该有一个新的ASP.NET Core API项目,可以在Visual Studio中使用。 接下来,在“解决方案资源管理器”窗口中选择Controllers解决方案文件夹,然后单击“添加-> Controller…”以创建一个名为DefaultController的新控制器。 我们将在本文的后续部分中使用该项目和控制器。

[ 同样在InfoWorld上:Visual Studio Code与Visual Studio:如何选择 ]

为ASP.NET Core安装XML格式化程序NuGet包

现在,我们已经在Visual Studio中创建了一个ASP.NET Core应用程序,接下来您应该做的是安装必要的NuGet包。 由于ASP.NET Core是模块化的,因此您将需要显式添加任何功能。 若要添加对XML格式器的支持,应添加Microsoft.AspNetCore.Mvc.Formatters.Xml NuGet包。

您可以从Visual Studio 2019的NuGet程序包管理器窗口中安装此程序包。或者,您可以编写以下命令通过.NET CLI安装此程序包。

dotnet add package Microsoft.AspNetCore.Mvc.Formatters.Xml

在ASP.NET Core中使用FormatFilter属性

您可以利用FormatFilter属性通过URL指定输出格式。 以下代码段显示了如何包含{format}参数以实现此目的。

 [HttpGet("{id}.{format?}")]
 public string Get(int id)
 {
    return "The value is: "+id.ToString();
 }

既然已经将FormatFilter属性应用于action方法,则可以使用JSON格式化程序测试API方法,如下所示:

http://localhost:5239/api/default/10

要么

http://localhost:5239/api/default/10.json

由于JSON格式化程序默认情况下已在管道中注册,并且XML格式化程序尚未添加和配置,因此尝试使用以下URL测试API方法将导致HTTP 404错误。

http://localhost:5239/api/default/10.xml

这是DefaultController类的完整源代码供您参考:

[Route("api/[controller]")]
[ApiController]
 [FormatFilter]
 public class DefaultController : ControllerBase
 {
     [HttpGet("{id}.{format?}")]
     public string Get(int id)
     {
         return "The value is: "+id.ToString();
     }
 }

[ 也在InfoWorld上:Microsoft .NET 5:.NET Standard和.NET Core的合并对开发人员意味着什么 ]

在ASP.NET Core中添加XML序列化格式化程序方法

您可以利用AddXmlSerializerFormatters()方法为输入和输出数据添加对XML序列化格式器的支持,如下面的代码段所示。

public void ConfigureServices(IServiceCollection services)
{
   services.AddControllers().AddXmlSerializerFormatters();
}

您还可以如下所示调用AddXmlSerializerFormatters()方法。

public void ConfigureServices(IServiceCollection services)
 {
    services.AddMvc().AddXmlSerializerFormatters();
 }

如果您想将输出格式化为XML,但不希望从请求正文中读取XML,则可以在Startup类的ConfigureServices方法中编写以下代码。

services.AddMvc(options =>
    {
        options.OutputFormatters.Add(new
        XmlSerializerOutputFormatter());
    });

最后,运行该应用程序并浏览到以下URL:

http://localhost:5239/api/default/10.xml

输出应如下图所示。

ASPNET核心中的XML格式化程序 IDG

图1:运行中的XML格式化程序!

[ 通过InfoWorld的App Dev Report新闻通讯了解软件开发中的热门话题 ]

FormatFilterAttribute可以从ASP.NET Core中的URL读取要使用的格式。 在将此属性应用于操作方法后,可以通过指定要在URL后缀中使用的格式化程序,使用可用的格式化程序来测试操作方法。

使用AddXmlSerializerFormatters()扩展方法,可以将输入和输出XML格式化程序添加到ASP.NET Core中的请求处理管道。 请注意,除了XML和JSON格式化程序外,您还可以使用自定义格式化程序。

From: https://www.infoworld.com/article/3512970/how-to-format-response-data-in-aspnet-core.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值