我是一名经验丰富的程序员,但是对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的代码。
答案 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});