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