如何从Windows服务调用REST API

约翰·杜

我试图从Windows服务中调用Rest API。我以前从未尝试过。我不确定为什么无法拨打此电话。

我的代码:

    string urlParameter = "posts/1";
    var client = new HttpClient();
    client.BaseAddress = new Uri("http://jsonplaceholder.typicode.com/");
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    HttpResponseMessage response = client.GetAsync(urlParameter).Result;
    if (response.IsSuccessStatusCode)
    {
        var dataObj = response.Content.ReadAsAsync<IEnumerable<MyType>>().Result;
    }

我收到以下错误:

  • 消息:发送请求时发生错误。

  • 内部异常消息:{“基础连接已关闭:连接意外关闭。”}

  • 内部异常堆栈跟踪位于
    System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)处的System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult

在以下行上生成此错误:

HttpResponseMessage response = client.GetAsync(urlParameter).Result;

任何建议,将不胜感激。

编辑:(更新的代码)

    string urlParameter = "posts/1";
    var client = new HttpClient();
    client.BaseAddress = new Uri("http://jsonplaceholder.typicode.com/");
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    try
    {
        //var response = await client.GetAsync(urlParameter);
        var task = client.GetAsync(urlParameter);
        task.Wait();
        var response = task.Result;

        if (response.IsSuccessStatusCode)
        {
            var dataObj = response.Content.ReadAsAsync<IEnumerable<MyType>>().Result;
        }
    }
    catch (Exception ex)
    {
        string a = ex.Message;
        string b = ex.ToString();
    }

编辑2:(仍然收到相同的错误)

private static async void TestAPI2()
{
    using (HttpClient client = new HttpClient())
    {
        client.DefaultRequestHeaders.Add("Get", "application/json");

        var response = await client.GetAsync("http://jsonplaceholder.typicode.com/posts/1");

        string context = await response.Content.ReadAsStringAsync();

    }
}
战争

您的问题是...

var response = client.GetAsync(urlParameter);

...返回一个任务,您需要先等待它完成。

拨打电话的最干净的方法是这样的...

var response = await client.GetAsync(urlParameter);

...这需要代码在这样的异步方法中运行...

public async Task Foo() 
{
   var response = await client.GetAsync(urlParameter);
}

...或者您可以简单地告诉编译器使用...

var task = client.GetAsync(urlParameter);
task.Wait();

var response = task.Result;

...或更紧凑的版本可能是使用像这样的延续...

var result = await client.GetAsync(urlParameter)
    .ContinueWith(t => t.Result.Content.ReadAsAsync<IEnumerable<MyType>>())
    .Unwrap();

...它将执行请求,然后在请求返回时异步为您解析并解包该任务,并返回“内部结果”,因为此代码创建了Task >>,而您只希望IEnumerable,因此等待解包的Task得到您2个任务一个接一个地执行的结果:)

...我查看了您的特定代码,并在新的控制台应用程序中运行了该代码,请将其更新为...

 class MyType
        {
          public int userId { get; set; }
          public int id { get; set; }
          public string title { get; set; }
          public string body { get; set; }
        }

        static void TestAnApiCall()
        {
            string urlParameter = "posts/1";
            var client = new HttpClient();
            client.BaseAddress = new Uri("http://jsonplaceholder.typicode.com/");
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            try
            {
                //var response = await client.GetAsync(urlParameter);
                var task = client.GetAsync(urlParameter);
                task.Wait();
                var response = task.Result;

                if (response.IsSuccessStatusCode)
                {
                    var readTask = response.Content.ReadAsAsync<MyType>();
                    readTask.Wait();
                    var dataObj = readTask.Result;
                    Console.WriteLine(JsonConvert.SerializeObject(dataObj));
                }
            }
            catch (Exception ex)
            {
                string a = ex.Message;
                string b = ex.ToString();
            }
        }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何确保为每个 API 调用提供服务(排队 Rest API 调用)?

来自分类Dev

如何从Windows服务以ID C#调用Web API

来自分类Dev

从服务器调用 WordPress REST API

来自分类Dev

如何从 BAMBOO 调用 Rest API

来自分类Dev

c#从web api调用windows服务

来自分类Dev

如何缓存Django Rest Framework API调用?

来自分类Dev

如何通过REST API调用保存PDF

来自分类Dev

如何从Vue组件调用Rest API?

来自分类Dev

如何从类定义内部调用REST API

来自分类Dev

如何使用Azure移动服务REST API?

来自分类Dev

如何通过REST API在SQL Azure中允许Windows Azure服务

来自分类Dev

如何通过REST API在SQL Azure中允许Windows Azure服务

来自分类Dev

使用REST API将Liferay Portlet调用为Web服务

来自分类Dev

使用HTTPUrlConnection进行对解析服务器的REST API调用

来自分类Dev

MeteorJS 调用rest api 服务器端

来自分类Dev

在Websphere服务器中进行部署时,如何对应用程序进行Rest API调用?

来自分类Dev

BlueMix SingleSignOn,如何在启用了SSO服务的情况下调用BlueMix应用程序的REST API

来自分类Dev

如何在Angular 7的激活链接中获取URL参数并从服务类中调用REST API

来自分类Dev

在Websphere服务器中进行部署时,如何对应用程序进行Rest API调用?

来自分类Dev

如何调用REST API和API中使用这些数据?

来自分类Dev

cURL调用REST Api

来自分类Dev

制定REST API调用

来自分类Dev

通过Rest调用查询Windows Azure Active Directory图Api

来自分类Dev

使用Raspberri pi调用Rest API Windows 10 IoT

来自分类Dev

通过Rest调用查询Windows Azure Active Directory图Api

来自分类Dev

使用HttpModule拦截SOAP Web服务调用并进行REST API调用以传递响应

来自分类Dev

如何调用wso2标识服务器api

来自分类Dev

如何从角度服务对propublica.org进行Web api调用

来自分类Dev

如何在Angular 7中管理API函数调用服务

Related 相关文章

  1. 1

    如何确保为每个 API 调用提供服务(排队 Rest API 调用)?

  2. 2

    如何从Windows服务以ID C#调用Web API

  3. 3

    从服务器调用 WordPress REST API

  4. 4

    如何从 BAMBOO 调用 Rest API

  5. 5

    c#从web api调用windows服务

  6. 6

    如何缓存Django Rest Framework API调用?

  7. 7

    如何通过REST API调用保存PDF

  8. 8

    如何从Vue组件调用Rest API?

  9. 9

    如何从类定义内部调用REST API

  10. 10

    如何使用Azure移动服务REST API?

  11. 11

    如何通过REST API在SQL Azure中允许Windows Azure服务

  12. 12

    如何通过REST API在SQL Azure中允许Windows Azure服务

  13. 13

    使用REST API将Liferay Portlet调用为Web服务

  14. 14

    使用HTTPUrlConnection进行对解析服务器的REST API调用

  15. 15

    MeteorJS 调用rest api 服务器端

  16. 16

    在Websphere服务器中进行部署时,如何对应用程序进行Rest API调用?

  17. 17

    BlueMix SingleSignOn,如何在启用了SSO服务的情况下调用BlueMix应用程序的REST API

  18. 18

    如何在Angular 7的激活链接中获取URL参数并从服务类中调用REST API

  19. 19

    在Websphere服务器中进行部署时,如何对应用程序进行Rest API调用?

  20. 20

    如何调用REST API和API中使用这些数据?

  21. 21

    cURL调用REST Api

  22. 22

    制定REST API调用

  23. 23

    通过Rest调用查询Windows Azure Active Directory图Api

  24. 24

    使用Raspberri pi调用Rest API Windows 10 IoT

  25. 25

    通过Rest调用查询Windows Azure Active Directory图Api

  26. 26

    使用HttpModule拦截SOAP Web服务调用并进行REST API调用以传递响应

  27. 27

    如何调用wso2标识服务器api

  28. 28

    如何从角度服务对propublica.org进行Web api调用

  29. 29

    如何在Angular 7中管理API函数调用服务

热门标签

归档