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项目。
- 启动Visual Studio IDE。
- 点击“创建新项目”。
- 在“创建新项目”窗口中,从显示的模板列表中选择“ ASP.NET Core Web应用程序”。
- 点击下一步。
- 在接下来显示的“配置新项目”窗口中,指定新项目的名称和位置。
- 单击创建。
- 在“创建新的ASP.NET Core Web应用程序”窗口中,从顶部的下拉列表中选择.NET Core作为运行时,并选择ASP.NET Core 2.2(或更高版本)。 我将在这里使用ASP.NET Core 3.0。
- 选择“ API”作为项目模板以创建新的ASP.NET Core API应用程序。
- 确保未选中“启用Docker支持”和“配置HTTPS”复选框,因为我们此处将不再使用这些功能。
- 确保将身份验证设置为“无身份验证”,因为我们也不会使用身份验证。
- 单击创建。
您应该有一个新的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
输出应如下图所示。
[ 通过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