我正在net core 5中构建一个API,它必须接受XML和JSON作为输入和输出。我的启动看起来像:
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
}
}
要测试的XML:
<LoginModel>
<Username>admin</Username>
<Password>admin123</Password>
</LoginModel>
我正在通过Content-Type as application/xml
和Accept as application/xml
。
你们中有人看到问题了吗?从昨天开始我就在设法把它修好。我总是收到消息An error occurred while deserializing input data.
的400响应
services.AddControllers(options =>
{
options.RespectBrowserAcceptHeader = true;
options.InputFormatters.Add(new XmlSerializerInputFormatter(options));
options.OutputFormatters.Add(new XmlSerializerOutputFormatter());
})