Hi,
I'm trying to call a webservice (POST input JSON) in X , below is my code and I'm not sure what is wrong/missing:
static void Job269(Args _args)
{
System.Net.WebHeaderCollection headers = new System.Net.WebHeaderCollection();
System.IO.Stream streamstr,responsestr;
System.IO.StreamWriter streamWriter;
System.Net.WebResponse webresponse;
System.IO.StreamReader reader;
System.Exception ex , ex2, webexception;
System.Net.WebRequest webreq = System.Net.WebRequest::Create("url");
str json = @'{"items":[
{"product_sku":"SKU1","quantity":"15"},
{"product_sku":"SKU2","quantity":"3"} ]}';
headers.Add('Authorization: bearer AuthorizationCODE');
webreq.set_Headers(headers);
webreq.set_Timeout(100000);
webreq.set_Method("POST");
webreq.set_ContentType("application/json");
streamstr = webreq.GetRequestStream();
streamWriter = new System.IO.StreamWriter(streamstr);
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
streamWriter.Dispose();
try
{
//info('Line 42');
webresponse = webreq.GetResponse();
responsestr = webresponse.GetResponseStream();
reader = new System.IO.StreamReader(responsestr);
info(reader.ReadToEnd());
}
/*
catch(Exception::CLRError)
{
ex = ClrInterop::getLastException();
//ex2 = CLRInterop::getLastException().GetBaseException();
if (ex != null)
{
ex = ex.get_InnerException();
if (ex != null)
error(ex.ToString());
}
}*/
catch (Exception::CLRError)
{
ex = CLRInterop::getLastException();
info(ex.ToString());
if (ex != null)
{
ex = ex.get_InnerException();
if ((ex != null) && (ex is System.Net.WebException))
info(ex.ToString());
}
}
}
Yet I'm getting the following error (not sure why):
Moreover, following is the call of the webservice from Postman:
Any idea what's the error or how to call such services with authorization?
What result do you get when you actually send the request from Postman? I assume it succeeds, but you didn't say it.
If it's the case, please try the same value of the Authorization header in X++.
The HTTP code seems to suggest that the server can't give you a response time that you can accept, but it's not clear to me why.
By the way, you should dispose resources correctly, which means all disposable resources and both in the successful scenario and on failure. Also, calling both on Close() and Dispose on streamWriter isn't needed - they do the same thing.
Stay up to date on forum activity by subscribing. You can also customize your in-app and email Notification settings across all subscriptions.
André Arnaud de Cal... 290,900 Super User 2024 Season 2
Martin Dráb 229,275 Most Valuable Professional
nmaenpaa 101,156