使用HttpClient发布JSON数据

5

我正在试图以编程的方式创建Visual Studio Team Services(之前称为Visual Studio Online)中的服务钩子订阅。当在Team Services中创建项目时,服务钩子将自动创建。以下是我的“工作项已创建”Web钩子代码:

using (HttpClient client = new HttpClient())
                {
                    client.DefaultRequestHeaders.Accept.Add(
                        new MediaTypeWithQualityHeaderValue("application/json"));

                    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
                       Convert.ToBase64String(
                           System.Text.ASCIIEncoding.ASCII.GetBytes(
                               string.Format("{0}:{1}", username, password))));

                    var request = new 
                    {
                        publisherId = "tfs",
                        eventType= " workitem.created",
                        resourceVersion= "1.0",
                        consumerId= "webHooks",
                        consumerActionId= "httpRequest",
                        publisherInputs= new {      
                            projectId= "test123",
                        }, 
                        consumerInputs= new {
                            url = "https://mydomain/api/ServiceHook/SaveWorkItem"
                        }
                    };


                    var response = client.PostAsync("https://mydomain/DefaultCollection/_apis/hooks/subscriptions",
                        new StringContent(JsonConvert.SerializeObject(request).ToString(),
                            Encoding.UTF8, "application/json"))
                            .Result;

                    if (response.IsSuccessStatusCode)
                    {
                        dynamic content = JsonConvert.DeserializeObject(
                            response.Content.ReadAsStringAsync()
                            .Result);


                        // Access variables from the returned JSON object
                        var appHref = content.links.applications.href;
                    }
                }

在运行此代码时,我遇到了以下错误:解析值时遇到意外字符:<。路径“”,
请问有人能帮我解决这个问题吗? 谢谢您的帮助。 堆栈跟踪如下:
at Newtonsoft.Json.JsonTextReader.ParseValue()
   at Newtonsoft.Json.JsonTextReader.Read()
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader, JsonContract contract, Boolean hasConverter)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value)
   at TestApplication.Program.<SetServiceHook>d__1.MoveNext() in C:\Users\Administrator\Documents\Visual Studio 2015\Projects\TestApplication\TestApplication\Program.cs:line 94

发布堆栈跟踪... - Rosdi Kasim
在此处验证您的Json结构:http://jsonlint.com/ - Sanket
你在哪一行出现了错误? - user3378165
抱歉回复晚了。我在反序列化时遇到了错误。 - Anjitha
我得到了“response.Content.ReadAsStringAsync().Result”的输出结果,它是HTML格式的。我在谷歌上搜索了一下,似乎提示需要登录。 - Anjitha
显示剩余2条评论
1个回答

2
尝试以下代码 -
var dataObjects = response1.Content.ReadAsStringAsync().Result;
var rootObj = JsonConvert.DeserializeObject<RootObject>(dataObjects);

其中RootObject是响应对象。


RootObject是您的响应类。这是基于响应JSON格式创建的。您可以使用此链接- http://json2csharp.com/。 - Sanket

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接