Вернуть строку JSON явно из Asp.net WEBAPI?

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

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

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

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

Ответ 1

Есть несколько альтернатив. Самый простой способ - вернуть ваш метод 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;
}

И проверка нулевой или пустой строки 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);
}

Ответ 2

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