【问题标题】:Web Api : Sending XML request through POSTMAN always gives null objectWeb Api:通过 POSTMAN 发送 XML 请求总是给出空对象
【发布时间】:2017-08-15 09:30:48
【问题描述】:

我正在使用 Postman 扩展程序并尝试将 Xml 发布请求 发送到我的 Web api。

示例模型:

[DataContract(Namespace = "")]
public class Employee
{

        [DataMember]
        [Range(10000, 99999)]
        public int Id { get; set; }

        [DataMember]
        public string FirstName { get; set; }

        [DataMember]
        [Required]
        [MaxLength(20)]
        public string LastName { get; set; }
}

邮递员要求:

在执行请求时,我总是在控制器的 post 方法 中得到 null 员工对象

如果我发送 JSON 请求,那么它工作正常。

我也尝试在 DataContract 属性中提供命名空间,但没有成功。

【问题讨论】:

    标签: xml asp.net-web-api postman datacontract


    【解决方案1】:

    我遇到了和你一样的问题,但我的课程设置如下:

    public class Employee
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
    

    来自 XML 的数据会自动直接映射到您的 Employee 类。

    我的问题是,XML 区分大小写。确保您的所有 XML 参数名称都与您的类参数匹配。只需一个参数出错,整个请求将为空。检查请求对象下的调试日志树是否看到以下错误(您必须搜索它,但它在那里):

    Incorrect Content-Type: application/xml;charset=UTF-8
    

    如果您看到了,则说明有一个参数不正确。逐个参数发送请求参数,直到找到错误的参数。

    至于从 XML 序列化和向 XML 序列化,请确保 startup.cs 仅包含以下代码:

    services.AddMvc().AddXmlSerializerFormatters();
    

    在您的控制器中,将类上方的注释设置为:

    [Produces("application/XML")]
    

    并在您的路线方法上将其设置为:

    [Consumes("application/XML")]
    

    遗憾的是,我在这个问题上浪费了一天半的时间。这个链接很有用:

    https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding

    更令人心碎的是,其他人也遇到了同样的问题。然而,他们已经解决了,却没有礼貌地告诉别人。

    提示:尝试使用免费版的 SoapUI,它还有一些真正有助于调试的功能。

    【讨论】:

      猜你喜欢
      • 2017-03-06
      • 2012-03-15
      • 2017-01-22
      • 2016-09-22
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      相关资源
      最近更新 更多