【问题标题】:How to ignore Data Contracts for Json?如何忽略 Json 的数据合同?
【发布时间】:2013-05-20 20:21:20
【问题描述】:

我正在使用 asp.net web api 并像这样返回我的数据

return Request.CreateResponse<ResponseResult<ProductSearchDto>>(product.Status.Code, product);

当我使用 fiddler 向我显示 xml(而不是向我显示 json)时,这返回了令人讨厌且看起来很长的元素节点。

我现在通过将Data Contracts 和Data Members 添加到我的ResponseResult 课程ProductSearchDto 课程来解决此问题。

但是,当我想查看 json 的外观时,fiddler 不再显示它并说它不再有效 json。

我猜我的datacontracts 搞砸了。

【问题讨论】:

  • JSON 输出在哪里?

标签: xml json asp.net-web-api datacontract


【解决方案1】:

我猜是我的数据合同搞砸了。

响应内容类型与任何 DataContract 或其他内容几乎没有关系。 ASP.NET Web API 使用称为content negotiation 的概念。这意味着如果客户端请求 JSON,并且如果服务器支持 JSON,他将返回 JSON。同样适用于 XML 和其他内容类型。因此,如果您期望来自服务器的 JSON,请确保客户端设置了 Accepts: application/json HTTP 请求标头。

下面是一个有效请求的示例:

GET /api/values/123 HTTP/1.1
Host: example.com
Accept: application/json 
Connection: close

以及来自服务器的示例响应:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 13

{"foo":"bar"}

这是示例控制器:

public class ValuesController: ApiController
{
    public HttpResponseMessage Get(string id)
    {
        return Request.CreateResponse(HttpStatusCode.OK, new { foo = "bar" });
    }
}

【讨论】:

  • 啊。我想我只是感到困惑,因为我在 Fiddler 中看到了两个选项卡,并认为它可以同时显示两种格式。现在考虑它没有任何意义,因为那时它必须执行 2 个服务器请求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 2021-08-20
  • 1970-01-01
  • 2019-08-26
  • 1970-01-01
  • 2014-06-08
相关资源
最近更新 更多