WCF Post Method,返回400 Bad Request

时间:2016-11-12 15:37:47

标签: c# json wcf postdata

我看到同一个问题有很多答案,但我无法解决我的问题,你们中的任何一个人都可以通过我的代码解决我的问题。 我已经创建了一个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
}

DataContract类(ComplaintData)

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>

请任何人帮忙。

1 个答案:

答案 0 :(得分:1)

我猜你的序列化有问题。 请看看这个:

        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;
        }

    }