Вернуться в явном виде строки JSON из веб-API Asp.net ?
в некоторых случаях у меня есть NewtonSoft JSON.NET и в моем контроллере я просто возвращаю Jobject из моего контроллера, и все хорошо.
но у меня есть случай, когда я получаю некоторый raw JSON из другого сервиса и должен вернуть его из моего webAPI. В этом контексте я не могу использовать NewtonSOft, но если бы я мог, то я бы создал JOBJECT из строки (которая кажется ненужной обработкой накладных расходов) и вернул бы это, и все было бы хорошо с миром.
однако, я хочу вернуться это просто, но если я возвращаю строку, то клиент получает оболочку JSON с моим контекстом в виде закодированной строки.
Как я могу явно вернуть JSON из моего метода контроллера WebAPI?
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); }