Добавьте сообщение в ваш неверный запрос HTTP 400 в ASP. NET Core 3.1 - PullRequest
0 голосов
/ 16 апреля 2020

Можно ли как-нибудь добавить сообщение к результату действия BadRequest и сделать его видимым для внешних клиентов, таких как Почтальон? Я использую ASP. NET Core 3.1.

Часть моего кода включена ниже. Я хочу сказать, в чем проблема - например, что id, отправленное в теле, не совпадает с тем, что взято из URL. Сейчас я использую созданный мной объект Error, который имеет код ошибки и сообщение. Но они не видны в Почтальоне, когда я отправляю запрос.

public ActionResult PutColour(int id, Colour colour)
{
    if (id != colour.Id)
    {
        return BadRequest(new Error("IDNotTheSame","ID from URL is not the same as in the body."));
    }
}

1 Ответ

2 голосов
/ 16 апреля 2020

То, что вы передаете BadRequest, сериализуется и возвращается как тело ответа. Если ничего не поступает, единственное объяснение состоит в том, что у вас нет c общедоступных свойств для Error, которые можно сериализовать. Например, если у вас было что-то вроде:

public class Error
{
    public Error(string type, string description)
    {
        Type = type;
        Description = description;
    }

    public string Type { get; private set }
    public string Description { get; private set; }
}

Затем вы получите ответ вроде:

{
    "type": "IDNotTheSame",
    "description": "ID from URL is not the same as in the body."
}

Не уверен, что ваш класс Error в настоящее время делает. Тем не менее, это, вероятно, в любом случае не нужно, поскольку вы можете просто использовать ModelState:

ModelState.AddModelError("Id", "ID from URL is not the same as in the body.");
return BadRequest(ModelState);

Наконец, вероятно, следует сказать, что это бессмысленная проверка в первую очередь. Вам вообще не следует отправлять идентификатор с моделью (всегда используйте модель представления, а не класс сущности), и даже если вы отправляете его, вы можете просто перезаписать его значением из URL:

model.Id = id;

Готово. Нет проблем, и вам не нужно беспокоиться об отправке ошибки обратно.

...