使用C#WebClient更新Smartsheet中的多联系人单元格
我希望用smartsheets C#sdk或HTTP通过C#发送请求来更新Multi#U联系人单元 我已经读到你必须做一个HTTP请求才能这样做。我已经创建了WebClient并提交了请求,但我一直收到错误的请求响应。我显然击中了正确的目标,但我认为我的头球不好。(任何被编辑掉的代码都写为##)我哪里出错了使用C#WebClient更新Smartsheet中的多联系人单元格,c#,smartsheet-api,smartsheet-c#-sdk-v2,C#,Smartsheet Api,Smartsheet C# Sdk V2,我希望用smartsheets C#sdk或HTTP通过C#发送请求来更新Multi#U联系人单元 我已经读到你必须做一个HTTP请求才能这样做。我已经创建了WebClient并提交了请求,但我一直收到错误的请求响应。我显然击中了正确的目标,但我认为我的头球不好。(任何被编辑掉的代码都写为##)我哪里出错了 class APIHELPER { /// <summary> /// /// </summary>
class APIHELPER
{
/// <summary>
///
/// </summary>
/// <param name="value"> value[i][0] is email . value[i][1] is name First Last. </param>
public static void SendMultiEmailPut(Int64 SheetID, Int64 columnID, Int64 rowID, List<List<string>> value)
{
HttpClient ApiClient = new HttpClient();
ApiClient.DefaultRequestHeaders.Accept.Clear();
ApiClient.BaseAddress = new Uri(@"https://api.smartsheet.com/2.0/sheets/"+ SheetID.ToString() + @"/rows");
ApiClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
ApiClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "#########"); //the authentication code is here
string myJsonRequest = @"[{""id"": " + rowID.ToString() + @", ""cells"": [ {""columnId"": "+columnID.ToString()+@",""objectValue"": {""objectType"": ""MULTI_CONTACT"",""values"": [";
List<string> LastElement = value.Last();
foreach (List<string> NE in value)
{
if (NE == LastElement)
{
myJsonRequest = myJsonRequest + @"{""objectType"": ""CONTACT"",""email"": """ + NE[0] + @""",""name"": """+ NE[1] +@"""}";
}
else
{
myJsonRequest = myJsonRequest + @"{""objectType"": ""CONTACT"",""email"": """ + NE[0] + @""",""name"": """ + NE[1] + @"""},";
}
}
myJsonRequest = myJsonRequest + @"] } }]}]";
var Response = ApiClient.PutAsJsonAsync(ApiClient.BaseAddress, myJsonRequest).Result;
}
}
类APIHELPER
{
///
///
///
///值[i][0]是电子邮件。值[i][1]是姓名的首末。
公共静态void SendMultiEmailPut(Int64 SheetID、Int64 columnID、Int64 rowID、列表值)
{
HttpClient ApiClient=新的HttpClient();
ApiClient.DefaultRequestHeaders.Accept.Clear();
ApiClient.BaseAddress=新Uri(@“https://api.smartsheet.com/2.0/sheets/“+SheetID.ToString()+@”/rows”);
ApiClient.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
ApiClient.DefaultRequestHeaders.Authorization=new AuthenticationHeaderValue(“承载人”)、“\
字符串myJsonRequest=@“[{”“id”“:”+rowID.ToString()+@”,“cells”“:[{”“columnId”“:“+columnId.ToString()+@”,“objectValue”“:{”“objectType”“:”“多触点”“值”“:[”;
List LastElement=value.Last();
foreach(列出值中的NE)
{
if(NE==LastElement)
{
myJsonRequest=myJsonRequest++“{”“对象类型”“:”“联系人”“电子邮件”“:”“+NE[0]+@”“,”“名称”“:”“+NE[1]+@”“}”;
}
其他的
{
myJsonRequest=myJsonRequest++“{”“对象类型”“:”“联系人”“电子邮件”“:”“+NE[0]+@”“,”“名称”“:”“+NE[1]+@”“},”;
}
}
myJsonRequest=myJsonRequest+@“]}}]}]”;
var Response=ApiClient.PutAsJsonAsync(ApiClient.BaseAddress,myJsonRequest);
}
}
当前的c#客户端支持更新多触点单元:
Smartsheet.Api.SmartsheetClient a = new
Smartsheet.Api.SmartsheetBuilder().SetAccessToken("yourtoken").Build();
a.SheetResources.RowResources.UpdateRows(sheetId, new List<Row>
{
new Row{ Id =rowId, Cells = new List<Cell>{
new Cell{ ColumnId = columnId, ObjectValue = new MultiContactObjectValue(new List<ContactObjectValue>{
new ContactObjectValue{ Name = "Name", Email = "test@email.com"},
new ContactObjectValue{ Name = "Name2", Email = "tes2t@email.com"}
})
}
}
}
});
Smartsheet.Api.SmartsheetClient a=新建
Smartsheet.Api.SmartsheetBuilder().SetAccessToken(“yourtoken”).Build();
a、 SheetResources.RowResources.UpdateRows(sheetId,新列表
{
新行{Id=rowId,单元格=新列表{
新单元格{ColumnId=ColumnId,ObjectValue=new MultiContactObjectValue(新列表{
新建ContactObjectValue{Name=“Name”,电子邮件=”test@email.com"},
新建ContactObjectValue{Name=“Name2”,电子邮件=”tes2t@email.com"}
})
}
}
}
});
我解决了我的问题。
这就是我最终发送请求的原因:
public static string PutWebRequest(string Target, string JsonRequest)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create(Target);
httpWebRequest.Accept = "application/json";
httpWebRequest.Method = "PUT";
httpWebRequest.Headers.Add("Authorization", "Bearer " + MYSMARTSHEETSKEY);
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
streamWriter.Write(JsonRequest);
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
return result;
}
}
非常感谢。最后,我使用了一个HTTP查询,并通过HTTP Web请求输入了一个JSON。我不知道他们现在的SDK中包含了多触点。