【问题标题】:Bad request 400 returns from API Patch methodAPI Patch 方法返回错误请求 400
【发布时间】:2020-02-16 22:38:11
【问题描述】:

我正在使用 .net core web api。在我的 API 控制器类中有PATCH 方法如下,

[HttpPatch("updateMessageTemplate/{templateId}")]
public IActionResult UpdateMessageTemplate([FromHeader] int tenantId, int templateId,[FromBody] testClass msg)
{
    try
    {
        //Some implementation is here
        return Accepted();
    }
    catch
    {
        return StatusCode(500);
    }
}

testClass如下,

public class testClass
{
    public string body { get; set; }
}

我从邮递员那里调用了 API,它返回 400 BadRequest。

我在 Controller 方法中放置了断点,但它没有命中。在我从方法参数断点中删除了 [FromBody] testClass msg 之后,没有返回 400 。为什么当我使用 [FromBody] testClass msg 时它返回 400?以及如何从 HTTP 客户端调用此控制器方法?。

我试过了,它也返回 400 BadRequest

string serviceUrl = string.Format("{0}/notification/updateMessageTemplate/{1}", ConfigurationManager.AppSettings["LtApiUrl"], templateID);

string json = "[{\"body\":\"sample text\"}]";

HttpClient client = new HttpClient();
HttpMethod method = new HttpMethod("PATCH");
HttpRequestMessage message = new HttpRequestMessage(method, serviceUrl);

StringContent content = new StringContent(json, Encoding.UTF8, "application/json");
client.DefaultRequestHeaders.Add("tenantId", tenantId.ToString());
client.DefaultRequestHeaders.Add("Authorization", string.Format("bearer {0}", token));
message.Content = content;

var response = client.SendAsync(message).Result;               
return response.StatusCode.ToString();

我该如何解决这个问题?请帮我。我删除了上一个问题,这是我真正的问题

更新:

我将邮递员请求更改为。

之后它的作品。但是当我通过 http 客户端代码调用它时,它提供了400 BadRequest。如何通过 http 客户端提供 JSON 正文的正确方式

【问题讨论】:

  • 请不要提出新问题。编辑您的原始问题。
  • @canton7 先生,我删除了它,没有人关心这个问题:(我真的被这个问题困住了。请帮帮我
  • 我仍然建议增加服务器上的日志记录,并让它告诉你请求有什么问题。
  • 也尝试删除位。取出标题。这使它起作用吗?删除 url 参数,正文,使其获取或发布而不是补丁。找出具体是哪一点导致了问题。
  • @canton7 我将邮递员请求更改为 i.imgur.com/NF1OaNl.png 。之后它的作品。但是当我通过 http 客户端代码调用它时,它会提供 400 BadRequest 。如何正确传递[FromBody]

标签: c# postman httpclient asp.net-core-webapi http-patch


【解决方案1】:

如果你使用FromBody,你需要用json而不是表单数据发送请求。你可以像下面这样改变你的邮递员:

1.将ContentType改为application/json

2.将 Body 改为 raw 并选择 JSON 样式:

更新:

你需要像下面这样改变你的json:

string json = "{\"body\":\"sample text\"}";

【讨论】:

  • 是的,我做到了,并通过邮递员解决了它。但是我如何通过http客户端代码调用它(请检查我的代码)。请帮我解决这个问题。
【解决方案2】:

请你试试这个。

[HttpPatch("updateMessageTemplate/{templateId}")]
public IActionResult UpdateMessageTemplate([FromHeader] int tenantId, int templateId, 
[FromBody] JsonPatchDocument<testMsg> msg)
 {
 try
 {
    //Some implementation is here
    return Accepted();
 }
 catch
 {
    return StatusCode(500);
 }
}

【讨论】:

  • 不工作。有什么合适的方法可以通过调试找到真正的问题
  • 我将邮递员请求更改为 i.imgur.com/NF1OaNl.png 。之后它的作品。但是当我通过 http 客户端代码调用它时,它会提供 400 BadRequest
猜你喜欢
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 2017-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多