使用C#WebClient更新Smartsheet中的多联系人单元格

使用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>

我希望用smartsheets C#sdk或HTTP通过C#发送请求来更新Multi#U联系人单元

我已经读到你必须做一个HTTP请求才能这样做。我已经创建了WebClient并提交了请求,但我一直收到错误的请求响应。我显然击中了正确的目标,但我认为我的头球不好。(任何被编辑掉的代码都写为##)我哪里出错了

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中包含了多触点。