WCF Restful post Services returns BAD REQUEST(400)
10,021
You have made a small mistake while consuming Rest service. You have specified ContentType of request to test/xml; charset=utf-8 but it should be text/xml or application/xml.
request.ContentType = "text/xml; charset=utf-8";
or it should be
request.ContentType = "application/xml";
Author by
Salman Siddique
Updated on June 05, 2022Comments
-
Salman Siddique almost 2 years
I am trying from few days to consume wcf restful service but it is giving me bad reqeust. Please Help me out.
Here is my configuration file
<system.serviceModel> <bindings> <webHttpBinding> <binding name="state" allowCookies="true"> <security mode="None"></security> </binding> </webHttpBinding> </bindings> <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> <behaviors> <serviceBehaviors> <behavior name="ServiceBehaviour"> <serviceMetadata httpGetEnabled="True"/> <serviceDebug includeExceptionDetailInFaults="True"/> </behavior> </serviceBehaviors> <endpointBehaviors> <behavior name="web"> <webHttp/> </behavior> </endpointBehaviors> </behaviors> <services> <service behaviorConfiguration="ServiceBehaviour" name="RESTFUL_DEMO.Web.services.Calc"> <endpoint address="" bindingConfiguration="state" binding="webHttpBinding" name="Http" contract="RESTFUL_DEMO.Web.services.ICalc"/> <endpoint address="abcd" binding="wsHttpBinding" name="wsHttp" contract="RESTFUL_DEMO.Web.services.ICalc"/> <endpoint address="mex" binding="mexHttpBinding" name="MEX" contract="IMetadataExchange"/> </service> </services>
my interface for service contract and datacontract is as follows.
[ServiceContract(SessionMode = SessionMode.Allowed)] [XmlSerializerFormat] public interface ICalc { [OperationContract] [WebInvoke(UriTemplate = "dowork", Method = "POST", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)] int DoWork(Enroll a); } [DataContract] public class Enroll { public Enroll() { } public Enroll(string Avalue) { this.Avalue = Avalue; } [DataMember(IsRequired = true)] public string Avalue { get; set; } }
my code to consume the service is as follows
HttpWebRequest request = WebRequest.Create("http://localhost/RESTFUL_DEMO.Web/services/Calc.svc/dowork") as HttpWebRequest; XmlDocument doc = new XmlDocument(); doc.Load(@"d:\test.xml"); string sXML = doc.InnerXml; request.ContentLength = sXML.Length; request.ContentType = "test/xml; charset=utf-8"; var sw = new StreamWriter(request.GetRequestStream()); sw.Write(sXML); sw.Close(); WebResponse response = request.GetResponse(); StreamReader stream = new StreamReader(response.GetResponseStream()); String result = stream.ReadToEnd();
-
carlosfigueira almost 11 yearsThe WCF Test Client does not work for WCF Restful endpoints. It would be consuming the endpoint with WSHttpBinding, which won't help to solve the original question. See more info at blogs.msdn.com/b/carlosfigueira/archive/2012/03/26/….