首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法从API读取响应的客户端

无法从API读取响应的客户端
EN

Stack Overflow用户
提问于 2019-09-01 04:16:17
回答 2查看 69关注 0票数 0

我创造了

  1. 客户。

当我调试时,我可以看到我的客户端发送请求到web,web接收到它并返回一个响应。但似乎我的客户和客户永远都在等待。

我尝试将Postman工具用于我的Web,并以json形式收到了很好的响应

我还试着用Fiddle来看看哪里出了问题。它显示了一个向下箭头,表示正在从服务器读取响应。它没有显示任何错误代码。

有人能建议我可能做错了什么吗。

API:

代码语言:javascript
复制
// GET: api/Account
public IEnumerable<Account> Get()
{
    //return new string[] { "value1", "value2" };
      Account a = new Account(100, "RES", new Customer(1, "K", "M"), new Premise(1, "2225", "City A", "Ohio"));
      Account a1 = new Account(101, "RES", new Customer(1, "R", "M"), new Premise(1, "Prior Road", "Texas", "US"));
      Account a2 = new Account(102, "RES", new Customer(1, "A", "M"), new Premise(1, "estern Road", "NY", "US"));
      List<Account> list = new List<Account>();
      list.Add(a);
      list.Add(a1);
      list.Add(a2);
      return (list);
}

客户:

代码语言:javascript
复制
public async Task<List<Account>> SelectAllAccounts()
{
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri("https://localhost:62617/api/");
        //HTTP GET
        var response = await client.GetAsync("Account");

        var myInstance = JsonConvert.DeserializeObject<Account>(await response.Content.ReadAsStringAsync());

        List<Account> a= null;
        a.Add(myInstance);
        return a;

    }
}
EN

回答 2

Stack Overflow用户

发布于 2019-09-01 05:23:41

在您的简单示例中存在一些排版,应该修改如下:

代码语言:javascript
复制
  // GET: api/Account
        public List<Account> Get()
        {
              Account a = new Account(100, "RES", new Customer(1, "K", "M"), new Premise(1, "2225", "City A", "Ohio"));
              // ... 
              // ... Your Code here
              // ... 
              list.Add(a2);
              return list;            
        }

而且,您还需要修改客户端:

代码语言:javascript
复制
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://localhost:62617/");
            HttpResponseMessage response = client.GetAsync("api/Account").Result;

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

            List<Account> myInstance = JsonConvert.DeserializeObject<List<Account>>(_content);


            return myInstance;
        }

您可以return myInstance或返回View(myInstance),也可以将其作为JsonResult返回,无论哪种情况适合您的需要。例如:

代码语言:javascript
复制
return Json(new { Status = 200, LIST = myInstance}, JsonRequestBehavior.AllowGet);

但是,有时最好将_content作为string返回,并让反序列化在最后一刻进行。

关于更多信息,下面是关于如何在ASP.Net MVC框架中创建和使用Rest的简单示例:

票数 0
EN

Stack Overflow用户

发布于 2019-09-01 12:06:36

与返回IEnumerable不同,我建议返回HttpResponseMessage,并将ContentType设置为application/json。你的api会是这样的,

代码语言:javascript
复制
HttpResponseMessage httpResponseMessage = this.Request.CreateResponse<List<Account>>(HttpStatusCode.OK, list);
httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
return httpResponseMessage;

在客户端代码中,当您返回集合而不是仅仅帐户时,您必须反序列化列表。因此,客户端代码的更改将是

代码语言:javascript
复制
 var myInstance = JsonConvert.DeserializeObject<List<Account>>(await response.Content.ReadAsStringAsync());

已经试过和测试了。:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57743153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档