【问题标题】:PUT Request for REST API in C# console application using HttpClient()使用 HttpClient() 在 C# 控制台应用程序中 PUT 请求 REST API
【发布时间】:2019-03-22 18:52:58
【问题描述】:

我对在 C# 中创建和使用 REST Web 服务非常陌生。我已经对要发送到 REST 端点的数据进行了编程。我不确定我是否正确地做所有事情。就像我之前提到的,这是我第一次编写 RESTful PUT 请求。

我创建了一个类并创建了一个 PUT 请求。我想看看我的 JSON 结果。它显示no content。函数正在为我返回正确的结果。

如何查看我的 JSON 结果?

sbStudent 类型的对象,当我向 URL 发送请求时,它返回 204 状态并且无法更新记录。我试图了解这段代码中有什么不正确的地方:

class Student
{
    public string Name{ get; set; }
    public string Email{ get; set; }
    public int Marks{ get; set; }
    public List<int> Skills{ get; set; }
}

public static void SendDataSomewhere(List<Student> studentsList)
{
    using (var client = new HttpClient())
    {
        Student sb = new Student
        {
            Name= "Test Name",
            Email = "test@gmail.com",
            Marks = HighestMarksFromList(studentsList),
            Skills = InDemandSkills(studentsList),                    
        };

        client.BaseAddress = new Uri("http://testingApi.net/");
        var response = client.PutAsJsonAsync("test", sb).Result;

        if (response.IsSuccessStatusCode)
        {
            Console.Write("Success");
        }
        else
            Console.Write("Error");
    }
}

函数正在为我返回正确的结果。 var response 正在返回 204 状态码。

如何查看我的 JSON 结果?

【问题讨论】:

  • 204 表示“无内容”,因此可能没有 JSON 响应。为什么你认为应该有? (旁注:调用.Result 通常是错误的方法。改用async/await。)
  • 看起来您并没有在等待异步 PUT 的结果,但我希望在这种情况下 result 没有值。这是一个真正的 API(以及你的真实代码吗?),它应该返回一个 PUT 的结果吗?
  • @Charleh 是的,它是真正的代码和 API。链接不是真实的。有些属性也不是真实的,但 API 是真实的。我已经更改了属性/类的名称。如何等待异步 PUT 请求的结果?
  • @David,我如何使用 aSync/Await?
  • @LearnAspNet:然后听起来响应是空的。一个 204 HTTP 代码很可能有。那么究竟是什么问题呢?如果您期望来自服务器的响应但没有得到响应,那么这听起来像是要与维护该 API 的人一起讨论。

标签: c# rest dotnet-httpclient


【解决方案1】:

PUT 请求返回 204 - No Content 的 API 仅表示 API 接收并处理了请求,但除了成功 (2xx) 响应状态之外,它没有任何意义的返回。

在 RESTful API 中,这是完全正常的预期响应。

为了确定会发生什么,您需要查阅您正在使用的 API 的文档。

【讨论】:

  • 我检查了 URI(REST 端点),没有任何更新。另外,我正在调试我的代码
  • 请查看此答案以获取更多详细信息:stackoverflow.com/a/2342589/507793
  • 我的 response.Content 也是空的?有没有办法可以看到 PutAsJsonAsync 所做的 JSON 结果?
【解决方案2】:

在我看来,其他人已经通过答案以及 cmets 回答了这个问题。但由于问题仍然悬而未决,让我尝试更详细地回答。

您认为您应该能够将 JSON 结果作为 PUT API 响应的一部分的假设并不总是正确的,这取决于 API 的实现。

以下是实现 PUT API 的不同方式:

  1. PUT API 给出对象作为响应:

    [HttpPut]
    public HttpResponseMessage Put(int id, Product product)
    {
        //save the Product object.
    
        return Request.CreateResponse(HttpStatusCode.OK, product);
    }
    

在此实现中,API 在响应中提供对象,这是您所期望的。

  1. PUT API 给出空响应:

    [HttpPut]
    public void Put(int id, Product product)
    {
        //save the Product object.
    }
    

在此实现中,API 不返回任何响应。

根据您的解释,您调用的 API 遵循第二种方式。如果您有权访问 API 代码,则可以验证这一点。

因此,如果您唯一的问题是要知道 API 是否不起作用,请执行您的代码以执行 PUT,然后对同一对象执行 GET 以验证更新是否成功。

希望这会有所帮助!

【讨论】:

    【解决方案3】:

    您可以使用像 Postman 这样的 API 测试工具或其他在线工具,并在工具中提供适当的输入。检查 Put 查询的输出。那么你可能会知道确切的问题。

    【讨论】:

      猜你喜欢
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 2021-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      相关资源
      最近更新 更多