Неверный запрос 400 возвращается из метода API Patch - PullRequest
2 голосов
/ 20 октября 2019

Я использую .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.

enter image description here enter image description here

Я установил точку останова в методе Controller, но он не срабатывает. после того как я удалил [FromBody] testClass msg из попадания точки останова параметра метода без возврата 400. почему он возвращает 400, когда я использую [FromBody] testClass msg? И как я могу вызвать этот метод контроллера из HTTP Client?.

Я пробовал это, он также возвращает 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();

Как я могу решить это? Помогите мне, пожалуйста. Я удалил предыдущий вопрос, и это моя настоящая проблема

Обновлено:

Я изменил запрос почтальона как.

enter image description here

после этого его работы. но когда я звоню через http-код клиента, он выдает 400 BadRequest. как правильно указать тело JSON через http клиента

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Если вы используете FromBody, вам нужно отправить запрос с помощью json вместо данных формы. Вы можете изменить своего почтальона, как показано ниже:

1. измените ContentType на application/json:

enter image description here

2. измените тело на raw и выберите стиль JSON:

enter image description here

ОБНОВЛЕНИЕ:

Вам нужно изменить свой JSON, как показано ниже:

string json = "{\"body\":\"sample text\"}";
1 голос
/ 20 октября 2019

Не могли бы вы попробовать это.

[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);
 }
}
...