Dotnet核心MVC xml参数绑定总是给出null

时间:2017-06-25 06:31:19

标签: c# xml asp.net-mvc asp.net-core-mvc .net-core

我已经在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>

这是我的Model类:

[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; }
}

当我向此路线发送帖子请求(带标题&#34; application / xml&#34;)时,它总是为MessageModel msg

提供空值

我在这里缺少什么?

我知道有一个DataContract的东西,但我不能控制xml格式发送 到我的服务器所以我需要一种方法将xml以上述格式绑定到我的对象。

非常感谢任何帮助或指导任何文件。

1 个答案:

答案 0 :(得分:1)

我发现这个问题归功于@jdweng的评论,这让我对可能出现的问题有所了解。

问题是XML中有一些元素无法序列化到我的模型类中的指定类型。他们是DateTime CreateTimeint MsgId

所以将所有字段更改为字符串解决问题。

我不知道为什么不是dotnet核心告诉我们这个而不是仅仅因为这种原因导致绑定失败而给我们null,这绝对是他们可以改进的东西。