使用带有swagger的Asp.net核心开发Web API。从swagger UI将XML发布到Web API,但它在控制器端提供null。遵循以下步骤。
以下是添加了XML格式化程序的Startup.cs代码:
public void ConfigureServices(IServiceCollection services)
{
//Adding XML Format Support
services.AddMvc().AddXmlSerializerFormatters();
// Register the Swagger generator, defining one or more Swagger documents
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v2", new Info { Title = "API", Version = "v2" });
string xmlpath = System.AppDomain.CurrentDomain.BaseDirectory + @"SwaggerAPI.xml";
c.IncludeXmlComments(xmlpath);
});
}
这是控制器代码:
[Route("api/Employee")]
public class RuleController : Controller
{
[HttpPost]
[Route("add")]
[Consumes("application/json", "application/xml")]
public void Post([FromBody]Employee employee)
{
}
}
public class Employee
{
public int Id;
public string FirstName;
public string LastName;
}
从Swagger UI发布xml到web api:
这是调试窗口:
请提出我在这里错过的任何建议。任何有关这方面的帮助将不胜感激。
答案 0 :(得分:0)
在您提供的屏幕截图中,请求外壳与模型中使用的外壳不匹配。
XML is case sensitive,因此您需要更改请求的大小写以匹配您的POCO(Plain Old C#Object)所期望的大小。
在您的示例中,您要发送:
<?xml version="1.0>
<Employee>
<firstName>First</firstName>
<lastName>Last</lastName>
</Employee>
</xml>
这与后续屏幕截图中给出的POCO属性名称不匹配。大概你的POCO看起来会像这样:
public class Employee
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
这意味着XML标记<firstName>
未映射到POCO属性FirstName
,因为XML标记没有前导大写F
。
将XML更改为以下内容应正确解析:
<?xml version="1.0>
<Employee>
<FirstName>First</FirstName>
<LastName>Last</LastName>
</Employee>
</xml>
请注意区别,因为它是一个微妙但重要的:
<firstName>First</firstName>
VS
<FirstName>First</FirstName>