2016-06-13 3 views
1

Я опытный программист, но новичок в WebApi (мы используем MS asp.net mvc framework).Как увидеть клиентскую сторону HttpResponseMessage?

Клиент просил, чтобы все возвращаемые значения будут обернуты в объект такого рода:

{ 
    success: [boolean], 
    errorLog: [error message, if failed], 
    referer: [api call details], 
    payload: { 
    // results, if success 
} 

Я видел, что стандарт уже называется для возвращения объекта HttpResponseMessage, который имеет эту информацию. Так, а не дублировать, я просто возвращает объект этого типа (либо непосредственно, либо через IHttpActionResult, например

return Ok(object); 

Однако, я не могу понять, как использовать этот объект на стороне клиента. Когда я сделать апите вызов из браузера, все, что я вижу, это содержание (даже с помощью отладчика) Когда я возвращаю ошибку, я вижу:.

<Error> 
    <Message>foo bar</Message> 
</Error> 

, но никаких признаков другой информации (StatusCode, ReasonPhrase и т.д.) То же самое относится, если я верну формат Json.

Этот объект «лишен» где-то по линии, и если да, то кто? Как я могу позволить этому объекту прибыть к вызывающему абоненту api, чтобы он/она мог использовать все связанные поля?

Благодаря

Edit: В соответствии с просьбой комментарий, я отправляю мой код на стороне сервера, хотя там не так много к нему. Моя попытка увидеть объект HttpResponseMessage была создать этот контроллер:

public HttpResponseMessage Get() { 
      HttpResponseMessage response = Request.CreateErrorResponse(HttpStatusCode.NotAcceptable, "foo bar"); 
      response.ReasonPhrase = "There is no reason."; 
      return response; 
     } 

Это код, который приводит к XML, размещенный выше.

+0

не должно быть, вы можете разместить ваш серверный код? –

ответ

0

Is this object 'stripped' somewhere along the line, and if so by who? Объект будет раздели HttpResponseMessage под капотом, когда вы вернетесь IHttpActionResult исходящий вызов в ExecuteAync создать HttpResponseMessage. Итак, чтобы увидеть все поля, вы должны использовать такие инструменты, как скрипач в сыром режиме или расширение, например HttpHeader для хром. How can I allow this object to arrive to the api caller so s/he can use all the associated fields
Один из способов отправить ожидаемый ответ, чтобы создать ПОКО как этот

public class Payload 
    { 
    } 

    public class CustomResponse 
    { 
     public IList<bool> Success { get; set; } 
     public IList<string> ErrorLog { get; set; } 
     public IList<string> Referer { get; set; } 
     public Payload Payload { get; set; } 
    } 

и отправить ответ, как это

return OK(new CustomObject(){Payload=yourObject}); 
+0

Спасибо за ваш ответ; когда я пытался его реализовать, я столкнулся с этой проблемой: http://stackoverflow.com/questions/37862939/error-with-webapi-serialization – Pete

+0

Вы используете сериализатор newtonsoft json? –

Смежные вопросы