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";
Share:
10,021
Salman Siddique
Author by

Salman Siddique

Updated on June 05, 2022

Comments

  • Salman Siddique
    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
    carlosfigueira almost 11 years
    The 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/….