【问题标题】:WCF Post Method, returns 400 Bad RequestWCF Post 方法,返回 400 错误请求
【发布时间】:2017-03-26 15:48:12
【问题描述】:

我看到同一个问题有很多答案,但我无法解决我的问题,请你们中的任何人查看我的代码并解决我的问题。 我创建了一个 WCF 服务,如下所示 POST 方法

界面(iComplaints.cs)

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

类(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>

请任何人帮忙。

【问题讨论】:

  • @Sajeetharan: 严重不......我知道如果你能检测到我做错了什么。

标签: c# json wcf postdata


【解决方案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;
        }

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    相关资源
    最近更新 更多