繁体   English   中英

从 WCF 休息服务收到 400 错误请求 - XML 格式的请求

[英]400 Bad Request Received from WCF Rest Service - XML formatted request

我在使用本地托管的 Web 服务时遇到了问题。

这是 Web 服务接受的参数:

    [DataContract(Namespace = "http://com.rest")]
    [XmlRootAttribute(ElementName = "PlaceCutEventData", Namespace = "http://com.rest", IsNullable = false)]
    public class PlaceCutEventData
    {
        [DataMember(IsRequired = true)]
        public string CutName { get; set; }
        [DataMember(IsRequired = true)]
        public string CutID { get; set; }
        [DataMember(IsRequired = true)]
        public string StationName { get; set; }
        [DataMember(IsRequired = true)]
        public string LineID { get; set; }
        [DataMember]
        public double CutLength { get; set; }
        [DataMember]
        public string Comment { get; set; }
        [DataMember]
        public string GeoName { get; set; }
        [DataMember]
        public bool IsClosed { get; set; }
        [DataMember(IsRequired = true)]
        public string Phases { get; set; }

        public PlaceCutEventData()
        {
            SetDefaults();
        }

        [OnDeserializing]
        private void OnDeserializing(StreamingContext context)
        {
            SetDefaults();
        }

        private void SetDefaults()
        {
            CutLength = 0.50;
            IsClosed = true;
            GeoName = "DETAIL";
        }
    }

下面是界面的样子(已经实现了):

        [WebInvoke(UriTemplate = "/PlaceCut", Method = "POST")]
        [OperationContract]
        [Description("Request to place a cut")]
        Task<ServerResponse> PlaceCut(PlaceCutEventData data);

我能够使用JSON格式的请求向 Web 服务发送请求,并且它实际处理它。 但是,当我切换到 XML 格式时,它总是会返回 400 Bad Request:

这是 XML:

<PlaceCutEventData xmlns="http://com.rest">
    <CutName>testing</CutName>
    <CutID>13213</CutID>
    <StationName>Test</StationName>
    <LineID>TestID</LineID>
    <CutLength>0.60</CutLength>
    <Comment></Comment>
    <GeoName>TestGeoName</GeoName>
    <IsClosed>true</IsClosed>
    <Phases>N</Phases>
</PlaceCutEventData>

这是 json 版本,但我的 Web 服务实际上接受了这个请求:

{
    "CutName": "testing",
    "CutID": "13213",
    "StationName": "Test",
    "LineID": "TestID",
    "GeoName": "TestName",
    "Phases": "N",
    "IsClosed": true,
    "CutLength": 0.60,
    "Comment": ""
}

有人可以解释为什么 XML 格式不起作用吗?

非常感谢。

XML 格式似乎没有问题。 这是我的请求。 在此处输入图片说明
我将数据类型从 JSON 更改为 XML,以便添加以下 HTTP 标头。

内容类型:应用程序/xml

这是我对函数和数据契约的定义。

        [OperationContract]
        [WebInvoke]
        string PlaceCut(PlaceCutEventData data);
    }

    [DataContract(Namespace = "CustomDataContract")]
    public class PlaceCutEventData
    {
        [DataMember(IsRequired = true)]
        public string CutName { get; set; }
        [DataMember(IsRequired = true)]
        public string CutID { get; set; }
        [DataMember(IsRequired = true)]
        public string StationName { get; set; }
        [DataMember(IsRequired = true)]
        public string LineID { get; set; }
        [DataMember]
        public double CutLength { get; set; }
        [DataMember]
        public string Comment { get; set; }
        [DataMember]
        public string GeoName { get; set; }
        [DataMember]
        public bool IsClosed { get; set; }
        [DataMember(IsRequired = true)]
        public string Phases { get; set; }
}

如果问题仍然存在,请随时告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM