Sreekanth
Sreekanth

Reputation: 205

WCF HTTP POST gives HTTP Status code 400 : Bad Request

I am creating a WCF service application (REST) which uses an HTTP POST to send a json which contains nothing but a string, I am getting an HTTP Status Code 400 Bad Request while sending a json using a program called PostMan to test the service, the source code is given below:-

IService1.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace WcfImageUpload
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        [WebInvoke(UriTemplate = "/JsonData",
                RequestFormat = WebMessageFormat.Json,
                ResponseFormat = WebMessageFormat.Json, Method = "POST")]
        bool SendData(JsonString JsonImage);

        // TODO: Add your service operations here
    }

    // Use a data contract as illustrated in the sample below to add composite types to service operations.
    [DataContract]
    public class JsonString
    {
        [DataMember]
        public string ImageData { get; set; } 
    }
}

Service1.svc.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace WcfImageUpload
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
    public class Service1 : IService1
    {
        public bool SendData(JsonString JsonImage)
        {
            return true;
        }
    }
}

Web.Config

<configuration>
    <system.serviceModel>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
        <services>
            <service behaviorConfiguration="Default" name="WcfImageUpload.Service1">
                <endpoint address="" behaviorConfiguration="webBehavior" binding="webHttpBinding" contract="WcfImageUpload.IService1"/>
                <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex"/>
            </service>
        </services>
        <behaviors>
            <endpointBehaviors>
                <behavior name="webBehavior">
                    <webHttp helpEnabled="true"/>
                </behavior>
            </endpointBehaviors>
            <serviceBehaviors>
                <behavior name="Default">
                    <serviceMetadata httpGetEnabled="true"/>
                </behavior>
                <behavior name="">
                    <serviceMetadata httpGetEnabled="true"/>
                    <serviceDebug includeExceptionDetailInFaults="false"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>
    <system.web>
        <compilation debug="true"/></system.web></configuration>

Please provide me some insight on what is happening.

Upvotes: 2

Views: 10906

Answers (1)

Saranya
Saranya

Reputation: 2008

A bad request error means that the data you are sending in the request is not in proper format.

Make sure you set the content type of the request to application/json.

Also, set the WebMessageBodyStyle to wrappedRequest as below for the WCF service to expect a wrapped JSON string. by default it expects a plain String.

[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]

Upvotes: 3

Related Questions