I'm consuming a web-service with ServiceStack. The header expected is:
POST /SeizureWebService/Service.asmx/SeizureAPILogs HTTP/1.1
Host: host.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length
jsonRequest=string
I'm trying to consume it with this code:
public class JsonCustomClient : JsonServiceClient
{
public override string Format
{
get
{
return "x-www-form-urlencoded";
}
}
public override void SerializeToStream(ServiceStack.ServiceHost.IRequestContext requestContext, object request, System.IO.Stream stream)
{
string message = "jsonRequest=";
using (StreamWriter sw = new StreamWriter(stream, Encoding.Unicode))
{
sw.Write(message);
}
// I get an error that the stream is not writable if I use the above
base.SerializeToStream(requestContext, request, stream);
}
}
public static void JsonSS(LogsDTO logs)
{
using (var client = new JsonCustomClient())
{
var response = client.Post<LogsDTOResponse>(URI + "/SeizureAPILogs", logs);
}
}
I can't figure out how to add the jsonRequest=
before the serialized DTO. How do I do this?
Solution based on Mythz's answer:
Added how I used Mythz's answer for someone having the same issue(s) in the future - enjoy!
public static LogsDTOResponse JsonSS(LogsDTO logs)
{
string url = string.Format("{0}/SeizureAPILogs", URI);
string json = JsonSerializer.SerializeToString(logs);
string data = string.Format("jsonRequest={0}", json);
var response = url.PostToUrl(data, ContentType.FormUrlEncoded, null);
return response.FromJson<LogsDTOResponse>();
}