.net core 5未绑定XML模型
我正在NetCore5中构建一个API,它必须接受XML和JSON作为输入和输出。 我的创业公司看起来像:.net core 5未绑定XML模型,xml,asp.net-core,asp.net-core-webapi,Xml,Asp.net Core,Asp.net Core Webapi,我正在NetCore5中构建一个API,它必须接受XML和JSON作为输入和输出。 我的创业公司看起来像: services.AddControllers(options => options.RespectBrowserAcceptHeader = true) .AddXmlDataContractSerializerFormatters() .AddXmlSerializerFormatters() .AddJsonOptions(opt =>
services.AddControllers(options => options.RespectBrowserAcceptHeader = true)
.AddXmlDataContractSerializerFormatters()
.AddXmlSerializerFormatters()
.AddJsonOptions(opt =>
{
opt.JsonSerializerOptions.IgnoreNullValues = true;
opt.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
});
我的班级是这样的:
[Serializable]
public class LoginModel
{
public LoginModel() { }
[Required]
public string Username { get; set; }
[Required]
public string Password { get; set; }
}
我的控制器:
[Route("Auth")]
[ApiController]
[Consumes("application/xml", new string[] { "application/json" })]
public class AuthController : Controller
{
public AuthController (){...}
[HttpPost("login")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
public async Task<ActionResult> Login([FromBody] LoginModel model)
{
//the model parameter is always null when passing xml
}
}
[Route(“Auth”)]
[ApiController]
[使用(“application/xml”,新字符串[]{“application/json”})]
公共类AuthController:Controller
{
公共AuthController(){…}
[HttpPost(“登录”)]
[产品响应类型(StatusCodes.Status200OK)]
[产品响应类型(StatusCodes.Status401Unauthorized)]
公共异步任务登录([FromBody]登录模型)
{
//传递xml时,模型参数始终为null
}
}
要测试的XML:
<LoginModel>
<Username>admin</Username>
<Password>admin123</Password>
</LoginModel>
管理
管理员123
我正在将内容类型作为application/xml
传递,并将接受为application/xml
传递
你们有谁看到问题吗?从昨天起我就在设法把它修好。
我总是收到一个400响应,其中包含消息
反序列化输入数据时出错。
感谢您的解决方案。如果我已经使用扩展方法添加了输入/输出格式化程序,我仍然不知道为什么需要将它们添加到AddController。这是另一天的问题。挑剔的是,我不认为这是一个完整的答案,因为它没有解释为什么它是正确的。添加一个解释的答案,我会接受你的。
services.AddControllers(options =>
{
options.RespectBrowserAcceptHeader = true;
options.InputFormatters.Add(new XmlSerializerInputFormatter(options));
options.OutputFormatters.Add(new XmlSerializerOutputFormatter());
})