Подтвердить что ты не робот

Как вернуть json error msg в asp.net web api?

Я хотел бы вернуть json errormessage, но в настоящий момент в fiddler я не вижу этого в панели json:

string error = "An error just happened";
JsonResult jsonResult = new JsonResult
{
     Data = error,
     JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
response = Request.CreateResponse(HttpStatusCode.BadRequest, jsonResult.Data);

как это сделать?

4b9b3361

Ответ 1

Несколько точек:

Если все, что вам нужно сделать, это вернуть ответ об ошибке, содержащий простое сообщение об ошибке, веб-API предоставляет для этого метод CreateErrorResponse. Поэтому вы можете просто:

return Request.CreateErrorResponse(HttpStatusCode.BadRequest, 
                                   "An error just happened");

Это приведет к следующему HTTP-ответу (другие заголовки опущены для краткости):

HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=utf-8
Content-Length: 36

{"Message":"An error just happened"}

Если вы хотите вернуть пользовательский объект вместо этого, вы используете Request.CreateResponse, как вы делали, но не используете MVC JsonResult. Вместо этого просто передайте свой объект непосредственно CreateResponse:

var myError = new
{
    Data = "An error just happened",
    OtherDetails = "foo bar baz"
};

return Request.CreateResponse(HttpStatusCode.BadRequest, myError);

Теперь скажите, что вы делаете это, но вы не получаете JSON с сервера. Важно понимать, что Web API обычно использует согласование типов контента, чтобы определить, какой формат использовать при отправке ответа. Это означает, что он смотрит на заголовок Accept, который был отправлен клиентом с запросом. Если заголовок Accept содержит application/xml, например, Web API вернет XML. Если заголовок содержит application/json, тогда он вернет JSON. Итак, вы должны проверить, что ваш клиент отправляет правильный заголовок Accept.

Тем не менее, есть способы заставить Web API всегда возвращать данные в определенном формате, если это то, что вы действительно хотите. Вы можете сделать это на уровне метода, используя другую перегрузку CreateResponse, которая также указывает тип содержимого:

return Request.CreateResponse(HttpStatusCode.BadRequest, myError, 
    new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"));

В качестве альтернативы вы можете удалить форматировщик XML из конфигурации в файле WebApiConfig:

config.Formatters.Remove(config.Formatters.XmlFormatter);

Это заставит веб-API всегда использовать JSON независимо от того, что клиент запрашивает.

Ответ 2

JsonResult - это концепция MVC. Он не работает в Web API. Один из способов явно вернуть содержимое json - использовать класс, созданный в этом ответе fooobar.com/questions/250374/...

Ответ 3

Вы можете напрямую установить код состояния текущего ответа HTTP с помощью свойства Response

Response.StatusCod = (int)HttpStatusCode.BadRequest;
return Json(HttpStatusCode.BadRequest);