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