Bel*_*fed 3 c# xml api model-view-controller asp.net-core
我正在利用客户关于 Web 服务的请求来处理 ASP.NET Core。
该请求是一个返回数据XML格式的 Web 方法,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Person>
<Name>John</Name>
<Surname>Doe</Surname>
. . .
</Person>
Run Code Online (Sandbox Code Playgroud)
我可以让 Web 服务text/xml按请求返回数据,并在ConfigureServices内部方法中强制返回数据Startup.cs,如下所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddMvc(options =>
{
options.Filters.Add(new ProducesAttribute("text/xml"));
}).AddXmlSerializerFormatters();
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我调用应该返回数据的方法时,我没有客户出于某种原因所需的 XML 声明标头:
<?xml version="1.0" encoding="UTF-8"?>
Run Code Online (Sandbox Code Playgroud)
这是结果:
<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>
Run Code Online (Sandbox Code Playgroud)
方法如下:
[HttpGet("getperson")]
public Person GetPerson()
{
return new Person
{
Name = "John",
Surname = "Doe",
};
}
Run Code Online (Sandbox Code Playgroud)
这里是班级Person:
public class Person
{
public string Name { get; set; }
public string Surname { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我研究了很多,但我发现的一切对我没有任何帮助。我想使用框架的功能序列化我的类,而不必逐个节点构建 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();
}
Run Code Online (Sandbox Code Playgroud)
示例输出:
<?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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3437 次 |
| 最近记录: |