I have created application to calling API, with some requirements just like apikey, username. but I get this error
The remote server returned an error: (400) Bad Request
Below is my code
public void Send(string method, string uri)
{
var nonce = GetRandomString(32);
var timestamp = DateTime.UtcNow.ToString("o");
var passwordDigest = System.Convert.ToBase64String(Encoding.UTF8.GetBytes(Sha1(nonce + timestamp + secret)));
var authHeader = String.Format("Username=\"{0}\", PasswordDigest=\"{1}\", Nonce=\"{2}\", Created=\"{3}\" Content-type: application/json;charset=\"utf-8\"", key, passwordDigest, nonce, timestamp);
var httpRequest = (HttpWebRequest)WebRequest.Create(uri);
httpRequest.Method = method;
httpRequest.Headers.Add("X-WSSE: USERNAME " + authHeader);
if (method.Equals("POST"))
{
try
{
var serializer = new JavaScriptSerializer();
var data = new
{
name = "testing",
key_id = "3",
external_ids = external_ids
};
var json = serializer.Serialize(data);
Byte[] byteArray = Encoding.UTF8.GetBytes(json);
httpRequest.ContentLength = byteArray.Length;
Stream dataStream = httpRequest.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse tResponse = httpRequest.GetResponse();
dataStream = tResponse.GetResponseStream();
StreamReader tReader = new StreamReader(dataStream);
String sResponseFromServer = tReader.ReadToEnd();
tReader.Close();
dataStream.Close();
tResponse.Close();
}catch(Exception ex){
ex.Message.ToString();
}
}
According to the docs, the following line:
httpRequest.Headers.Add("X-WSSE: USERNAME " + authHeader);
should be:
httpRequest.Headers.Add("X-WSSE: UsernameToken " + authHeader);
It seems you copy and pasted incorrectly or something.