Вернуть строку 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
, поэтому вы можете записать его таким образом, как строку, тогда вам не нужно фактически возвращать что-либо из вашего метода - вы уже написал текст ответа в выходной поток.