我对此创建/更新潜在客户API http://developers.marketo.com/documentation/rest/createupdate-leads/有疑问。 没有C#或JAVA的示例代码。只有红宝石可用。所以我必须自己尝试一下。但我总是从响应中得到null返回。 这是我的代码:
private async Task<CreateLeadResponseResult> CreateLead(string token)
{
string url = String.Format(marketoInstanceAddress+"/rest/v1/leads.json?access_token={0}", token);
var fullUri = new Uri(url, UriKind.Absolute);
CreateLeadResponseResult createLeadResponse = new CreateLeadResponseResult();
CreateLeadInput input = new CreateLeadInput { email = "123@123.com", lastName = "Lee", firstName = "testtesttest", postCode = "00000" };
CreateLeadInput input2 = new CreateLeadInput { email = "321@gagaga.com", lastName = "Lio", firstName = "ttttttt", postCode = "00000" };
List<CreateLeadInput> inputList = new List<CreateLeadInput>();
inputList.Add(input);
inputList.Add(input2);
CreateLeadRequest createLeadRequest = new CreateLeadRequest() { input = inputList };
JavaScriptSerializer createJsonString = new JavaScriptSerializer();
string inputJsonString = createJsonString.Serialize(createLeadRequest);
using (var client = new HttpClient())
{
HttpResponseMessage response = await client.PostAsJsonAsync(fullUri.OriginalString, inputJsonString).ConfigureAwait(false);
// I can see the JSON string is in the message body in debugging mode.
if (response.IsSuccessStatusCode)
{
createLeadResponse = await response.Content.ReadAsAsync<CreateLeadResponseResult>();
}
else
{
if (response.StatusCode == HttpStatusCode.Forbidden)
throw new AuthenticationException("Invalid username/password combination.");
else
throw new ApplicationException("Not able to get token");
}
}
return createLeadResponse;}
//get null here.
谢谢。 -C。
答案 0 :(得分:1)
调试此方法的最佳方法是捕获应用提交的确切网址,参数和JSON,并尝试通过Postman(Chrome插件)或SOAP UI等工具手动提交。然后,您会看到确切的错误消息,您可以在此处查看:http://developers.marketo.com/documentation/rest/error-codes/。基于此,您可以更新您的代码。我对Java知之甚少,但这就是我使用Python代码的方法。
答案 1 :(得分:0)
您的示例代码非常有助于实现我自己的实现。谢谢!
在玩了一会儿之后,我意识到JavaScriptSerializer
步骤是不必要的,因为PostAsJsonAsync
会自动序列化传递给它的任何对象。双序列化可以防止Marketo的API处理输入。
另外,我同意Jep,Postman非常有帮助。但是在这个错误的情况下,Postman工作正常(使用inputJsonString
的内容),但我的C#代码仍然无法正常工作。所以我暂时修改了代码以返回dynamic
对象而不是CreateLeadResponseResult
。在调试模式下,这允许我查看被丢弃的字段,因为它们不适合CreateLeadResponseResult
类型,这使我得到了上述解决方案。