如何查看HttpResponseMessage客户端?

时间:2016-06-13 08:35:50

标签: c# asp.net-mvc asp.net-web-api

我是一名经验丰富的程序员,但是对WebApi不熟悉(我们正在使用MS asp.net mvc框架)。

客户要求将所有返回值包装在此类对象中:

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

我看到标准已经要求返回一个HttpResponseMessage对象,该对象具有此信息。因此,我只是返回一个这种类型的对象(直接或通过IHttpActionResult,例如。

,而不是重复。
return Ok(object);

但是,我无法从客户端看到如何使用此对象。当我从浏览器进行api调用时,我看到的只是内容(即使使用调试器)。当我返回错误时,我看到:

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

但没有其他信息的标志(StatusCode,ReasonPhrase等)。如果我返回Json格式,同样适用。

这个对象是否已被剥夺&#39;沿线的某个地方,如果是这样的话?如何允许此对象到达api调用者,以便他/她可以使用所有相关字段?

由于

编辑:根据评论的要求,我发布了我的服务器端代码,尽管它没有多大意义。我看到HttpResponseMessage对象的尝试是创建这个控制器:

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

这是导致上面发布的xml的代码。

1 个答案:

答案 0 :(得分:0)

Is this object 'stripped' somewhere along the line, and if so by who? 当您返回HttpResponseMessage对ExecuteAync的调用以创建HttpResponseMessage时,对象将被IHttpActionResult剥离。  因此,为了查看所有字段,您应该使用像原始模式中的fiddler或像HttpHeader这样的扩展名来使用chrome。 How can I allow this object to arrive to the api caller so s/he can use all the associated fields
发送预期答案的一种方法是创建像这样的POCO

 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});