Как вернуть правильный Http-ответ вместо JSON-объекта - PullRequest
0 голосов
/ 08 октября 2018

У меня очень простой веб-API только с GET-контроллером.Внутри контроллера get я читаю файл XML, преобразую этот файл XML в объект JSON и возвращаю его.

public JObject Get()
{
    //Read XML
    XDocument xDoc = XDocument.Load(@"D:\myfile.xml");
    string jsonStr = JsonConvert.SerializeXNode(xDoc);
    JObject json = JObject.Parse(jsonStr);

    return json;              
}

Я хочу поместить строки чтения XML и преобразования JSON в обработчик исключений и вернуть 404 Код ошибки (или любой подходящий код для этой ситуации), если файл XML не может быть открыт (или возникает любое другое исключение).Но так как мой тип возвращаемого идентификатора JObject, я не могу вернуть правильное размещение http, так как я могу это сделать?

1 Ответ

0 голосов
/ 08 октября 2018

Вы должны изменить тип возвращаемого значения метода действия на IHttpActionResult, затем вы можете сделать что-то вроде этого

public IHttpActionResult Get()
{
    if (!File.Exists(@"D:\myfile.xml"))
        return NotFound();

    //Read XML
    XDocument xDoc = XDocument.Load(@"D:\myfile.xml");
    string jsonStr = JsonConvert.SerializeXNode(xDoc);
    JObject json = JObject.Parse(jsonStr);
    return Ok(json);
}

Это должно дать вам гибкость, к которой вы стремитесь.

Краткое объяснение используемых методов

return OK(json) вернет успешный (HTTP 200) ответ с сериализованным json в теле.

return NotFound() приведет кнеудавшийся запрос и результат HTTP 404.

В случае ошибки в идеале следует вернуть код 5xx, который можно получить с помощью return InternalServerError();

Для получения дополнительной информации об этих и других помощниках вApiController базовый класс, посмотрите страницу в документах Microsoft

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...