[英]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.