Dotnet 核心 MVC xml 参数绑定总是给 null
Dotnet core MVC xml parameter binding always give null
我已经阅读了一些关于 SO 的问题,但解决方案都是针对 ASP.NET webApi 而不是 dotnet 核心。
我在 Startup.cs
中添加了 xml 支持
services
.AddMvc()
.AddXmlSerializerFormatters();
这是我的控制器方法:
[Route("main")]
[HttpPost]
public string MainPost([FromBody]MessageModel msg)
{
_log.LogInformation("body msg ="+msg.Content);
return "test";
}
这是我的 XML
<xml>
<ToUserName>toUser</ToUserName>
<FromUserName>FromUser</FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType>text</MsgType>
<Content>test content</Content>
<MsgId>1234567890123456</MsgId>
</xml>
这是我的模型 class:
[XmlRoot("xml")]
public class MessageModel
{
public string ToUserName { get; set; }
public string FromUserName { get; set; }
public DateTime CreateTime { get; set; }
public string MessageType { get; set; }
public string Content { get; set; }
public int MsgId { get; set; }
}
当我向这条路线发送 post 请求(使用 header "application/xml")时,它总是给我 null for MessageModel msg
我在这里错过了什么?
我知道有 DataContract 的东西,但我无法控制 xml 格式发送
到我的服务器,所以我需要一种方法将 xml 以上述格式绑定到我的 object.
任何对任何文件的帮助或引导将不胜感激。
感谢@jdweng 的评论,我发现了问题,它让我知道可能出了什么问题。
问题是 XML 中的某些元素无法序列化为我的模型 class 中的指定类型。他们是 DateTime CreateTime
和 int MsgId
。
所以将所有字段更改为字符串解决了问题。
我不知道为什么 dotnet core 不告诉我们这件事,而不是在由于这种原因导致绑定失败时只给我们 null,这绝对是他们可以改进的地方。
我已经阅读了一些关于 SO 的问题,但解决方案都是针对 ASP.NET webApi 而不是 dotnet 核心。
我在 Startup.cs
中添加了 xml 支持services
.AddMvc()
.AddXmlSerializerFormatters();
这是我的控制器方法:
[Route("main")]
[HttpPost]
public string MainPost([FromBody]MessageModel msg)
{
_log.LogInformation("body msg ="+msg.Content);
return "test";
}
这是我的 XML
<xml>
<ToUserName>toUser</ToUserName>
<FromUserName>FromUser</FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType>text</MsgType>
<Content>test content</Content>
<MsgId>1234567890123456</MsgId>
</xml>
这是我的模型 class:
[XmlRoot("xml")]
public class MessageModel
{
public string ToUserName { get; set; }
public string FromUserName { get; set; }
public DateTime CreateTime { get; set; }
public string MessageType { get; set; }
public string Content { get; set; }
public int MsgId { get; set; }
}
当我向这条路线发送 post 请求(使用 header "application/xml")时,它总是给我 null for MessageModel msg
我在这里错过了什么?
我知道有 DataContract 的东西,但我无法控制 xml 格式发送 到我的服务器,所以我需要一种方法将 xml 以上述格式绑定到我的 object.
任何对任何文件的帮助或引导将不胜感激。
感谢@jdweng 的评论,我发现了问题,它让我知道可能出了什么问题。
问题是 XML 中的某些元素无法序列化为我的模型 class 中的指定类型。他们是 DateTime CreateTime
和 int MsgId
。
所以将所有字段更改为字符串解决了问题。
我不知道为什么 dotnet core 不告诉我们这件事,而不是在由于这种原因导致绑定失败时只给我们 null,这绝对是他们可以改进的地方。