【问题标题】:Web API 2.2 always returns JSON contentWeb API 2.2 总是返回 JSON 内容
【发布时间】:2015-03-04 13:48:03
【问题描述】:

我下面的简单 Action 方法总是返回 JSON,不管 Accept 标头设置为 application/xml。内容协商适用于我在同一控制器中的其他操作。

public HttpResponseMessage GetOrder(int id) {
    var orderDescription = mydbc.tbl_job_versions.AsNoTracking().Where(t => t.JobId == id)
      .Select(t => new{Id = t.JobId,  Description = t.Brand + " " + t.Variety + " " + t.Promotion  + " " + t.MarketSegment }).FirstOrDefault ();

    if (orderDescription == null) {
      return new HttpResponseMessage(HttpStatusCode.NotFound);
    }
    else {
      return Request.CreateResponse((HttpStatusCode)200, orderDescription);
    }
 }

什么可能导致它不执行内容协商,而是总是返回 JSON?

【问题讨论】:

    标签: asp.net-web-api2 content-negotiation


    【解决方案1】:

    你可以在这里查看我的答案:https://stackoverflow.com/a/22918118/1184056

    看起来 xml 格式化程序无法说它可以写入您提供给它的对象,因此您看不到 json 中的响应。

    【讨论】:

    • XML 序列化程序静默失败的类似问题,我认为这是错误的。
    【解决方案2】:

    发现 WEB API 内容协商无法处理将匿名类型序列化为 XML,只能处理 JSON。如果我创建一个类,从 LINQ 数据填充它并返回它,我在请求 XML 时会得到 XML。

    环顾四周,我在 codeplex http://aspnetwebstack.codeplex.com/workitem/2123 上发现了问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 2019-07-01
      • 2014-11-30
      相关资源
      最近更新 更多