gpt4 book ai didi

c# - 从 ASP .NET Core Web API 方法返回完整的 XML 响应

转载 作者:行者123 更新时间:2023-12-05 01:37:58 26 4
gpt4 key购买 nike

我正在利用客户关于 Web 服务的请求来接触 ASP.NET Core。

请求是一个返回XML格式数据的网络方法,像这样:

<?xml version="1.0" encoding="UTF-8"?>
<Person>
<Name>John</Name>
<Surname>Doe</Surname>
. . .
</Person>

我可以让 Web 服务按要求返回 text/xml 数据,强制它在 Startup.cs 内的 ConfigureServices 方法中使用,如下所示:

public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddMvc(options =>
{
options.Filters.Add(new ProducesAttribute("text/xml"));
}).AddXmlSerializerFormatters();
}

问题是,当我调用应该返回数据的方法时,我没有 XML 声明 header ,这是客户出于某种原因需要的:

<?xml version="1.0" encoding="UTF-8"?>

这是结果:

<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>John</Name>
<Surname>Doe</Surname>
</Person>

方法如下:

[HttpGet("getperson")]
public Person GetPerson()
{
return new Person
{
Name = "John",
Surname = "Doe",
};
}

这里是 Person 类:

public class Person
{
public string Name { get; set; }
public string Surname { get; set; }
}

我研究了很多,但我发现的一切对我一点帮助都没有。我想使用框架的功能来序列化我的类,而不是必须逐个节点地构建 XML 结构,因此我希望服务中的某些设置允许我这样做。

如有必要,可以对 GetPerson 方法进行任何更改,这只是一个真正简化的测试。

预先感谢您的帮助!

最佳答案

您需要像这样配置 XML 输出格式化程序:

public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddMvc(options =>
{
options.Filters.Add(new ProducesAttribute("text/xml"));
options.OutputFormatters.Add(new XmlSerializerOutputFormatter(new XmlWriterSettings
{
OmitXmlDeclaration = false
}));
}).AddXmlSerializerFormatters();
}

示例输出:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>value1</string>
<string>value2</string>
</ArrayOfString>

关于c# - 从 ASP .NET Core Web API 方法返回完整的 XML 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60308726/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com