WCF Post 方法,returns 400 错误请求

WCF Post Method, returns 400 Bad Request

我看到同一个问题有很多答案,但我无法解决我的问题,你们中的任何一个都可以通过我的代码解决我的问题吗? 我创建了一个 WCF 服务如下 POST 方法

接口(iComplaints.cs)

[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare,     ResponseFormat = WebMessageFormat.Json, UriTemplate = "/insertcomplaint")]
Stream InsertComplaint(ComplaintData data);

Class (Complaints.cs)

public Stream InsertComplaint(ComplaintData data)
{
    //the code
}

数据合同class(投诉数据)

public class ComplaintData
{
   [DataMember]
    public string ComplaintID { get; set; }
    [DataMember]
    public string EntryBy { get; set; }
}

我在本地托管了该服务,当我尝试使用以下客户端方法使用它时,它给了我 400(错误请求)

void PostComplaint()
    {
        HttpWebRequest req = null;
        HttpWebResponse res = null;
            string url = "http://localhost:28522/Complaints.svc/insertcomplaint";

            ComplaintData iData = new ComplaintData();
            iData.ComplaintID = txtComplaintID.Text;
            iData.EntryBy = txtEntryBy.Text;

            req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "POST";
            req.ContentType = "application/json"; 
            req.Headers.Add("SOAPAction", url);

            using (var streamWriter = new StreamWriter(req.GetRequestStream()))
            {
                streamWriter.Write(iData);
            }

            res = (HttpWebResponse)req.GetResponse();
            using (var streamReader = new StreamReader(res.GetResponseStream()))
            {
                var result = streamReader.ReadToEnd();
                TextBox1.Text = result;
            }
    }

WCF 服务的 Web 配置

<service behaviorConfiguration="ServiceBehavior" name="Complaints">
    <endpoint address="" behaviorConfiguration="webHttp" binding="webHttpBinding" contract="IComplaints" />
   <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
  </service>

请大家帮忙。

我猜你的序列化有问题。 请检查一下:

        void PostComplaint()
    {
        HttpWebRequest req = null;
        HttpWebResponse res = null;
        string url = "http://localhost:28522/Complaints.svc/insertcomplaint";

        ComplaintData iData = new ComplaintData();
        iData.ComplaintID = txtComplaintID.Text;
        iData.EntryBy = txtEntryBy.Text;

        req = (HttpWebRequest)WebRequest.Create(url);
        req.Method = "POST";
        req.ContentType = "application/json";
        req.Headers.Add("SOAPAction", url);

        using (var streamWriter = new StreamWriter(req.GetRequestStream()))
        {
            streamWriter.Write(Newtonsoft.Json.JsonConvert.SerializeObject(iData));
        }

        res = (HttpWebResponse)req.GetResponse();
        using (var streamReader = new StreamReader(res.GetResponseStream()))
        {
            var result = streamReader.ReadToEnd();
            TextBox1.Text = result;
        }

    }