Вернуться в явном виде строки JSON из веб-API Asp.net ?


в некоторых случаях у меня есть NewtonSoft JSON.NET и в моем контроллере я просто возвращаю Jobject из моего контроллера, и все хорошо.

но у меня есть случай, когда я получаю некоторый raw JSON из другого сервиса и должен вернуть его из моего webAPI. В этом контексте я не могу использовать NewtonSOft, но если бы я мог, то я бы создал JOBJECT из строки (которая кажется ненужной обработкой накладных расходов) и вернул бы это, и все было бы хорошо с миром.

однако, я хочу вернуться это просто, но если я возвращаю строку, то клиент получает оболочку JSON с моим контекстом в виде закодированной строки.

Как я могу явно вернуть JSON из моего метода контроллера WebAPI?

4 71

4 ответа:

есть несколько альтернатив. Самый простой из них - чтобы ваш метод возвращал a HttpResponseMessage, и создать этот ответ с StringContent исходя из твоей строки, что-то похожее на код ниже:

public HttpResponseMessage Get()
{
    string yourJson = GetJsonFromSomewhere();
    var response = this.Request.CreateResponse(HttpStatusCode.OK);
    response.Content = new StringContent(yourJson, Encoding.UTF8, "application/json");
    return response;
}

и проверка null или пустой строки JSON

public HttpResponseMessage Get()
{
    string yourJson = GetJsonFromSomewhere();
    if (!string.IsNullOrEmpty(yourJson))
    {
        var response = this.Request.CreateResponse(HttpStatusCode.OK);
        response.Content = new StringContent(yourJson, Encoding.UTF8, "application/json");
        return response;
    }
    throw new HttpResponseException(HttpStatusCode.NotFound);
}

Если вы специально хотите вернуть только JSON, без использования функций WebAPI (например, разрешить XML), вы всегда можете написать непосредственно на вывод. Предполагая, что вы принимаете это с ASP.NET, у вас есть доступ к Response объект, поэтому вы можете записать его таким образом в виде строки, тогда вам не нужно ничего возвращать из вашего метода - вы уже написали текст ответа в выходной поток.

вот решение @carlosfigueira, адаптированное для использования интерфейса IHttpActionResult, который был представлен с WebApi2:

public IHttpActionResult Get()
{
    string yourJson = GetJsonFromSomewhere();
    if (string.IsNullOrEmpty(yourJson)){
        return NotFound();
    }
    var response = this.Request.CreateResponse(HttpStatusCode.OK);
    response.Content = new StringContent(yourJson, Encoding.UTF8, "application/json");
    return ResponseMessage(response);
}

пример, чтобы возвращать JSON из веб-API метод GET

[HttpGet]
public IActionResult Get()
{
            return Content("{\"firstName\": \"John\",  \"lastName\": \"Doe\", \"lastUpdateTimeStamp\": \"2018-07-30T18:25:43.511Z\",  \"nextUpdateTimeStamp\": \"2018-08-30T18:25:43.511Z\");
}