ajax - 在 WCF Web Api 中设置默认响应类型

标签 ajax wcf wcf-web-api

我有一组由 WCF Web Api 托管的服务,我通过 javascript 以 JSON 与它们进行通信。在大多数情况下,我可以修改 header 的接受位以要求 JSON 响应,但在某些情况下我无法做到这一点。这是由于我使用的 javascript 框架(Ext JS)。对于某些事情,它只允许我指定 URL 而不是代理默认值,例如标题。

然而,这不是 Ext JS 问题。 Web Api 似乎默认返回 XML,我想知道是否可以更改此默认设置,以便它可以返回 JSON。提前致谢!

最佳答案

一些实验似乎表明配置的格式化程序的顺序很重要(这非常直观)。

默认情况下,当您创建 HttpConfiguration 的实例时,其 Formatters集合包含这些格式化程序:

  • XmlMediaTypeFormatter
  • JsonValueMediaTypeFormatter
  • JsonMediaTypeFormatter
  • FormUrlEncodedMediaTypeFormatter

  • XML 是默认格式的原因是因为它是第一个格式化程序。要使 JSON 成为默认值,您可以将集合重新排序为如下所示:
  • JsonValueMediaTypeFormatter
  • JsonMediaTypeFormatter
  • XmlMediaTypeFormatter
  • FormUrlEncodedMediaTypeFormatter

  • 给定一个实例 config HttpConfiguration,这是重新排序集合的一种方法:
    var jsonIndex = Math.Max(
        config.Formatters.IndexOf(config.Formatters.JsonFormatter),
        config.Formatters.IndexOf(config.Formatters.JsonValueFormatter));
    var xmlIndex = config.Formatters.IndexOf(
        config.Formatters.XmlFormatter);
    
    config.Formatters.Insert(jsonIndex + 1, config.Formatters.XmlFormatter);
    config.Formatters.RemoveAt(xmlIndex);
    

    我不知道这是否受支持,但它似乎适用于 WebApi 0.6.0。

    关于ajax - 在 WCF Web Api 中设置默认响应类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6779254/

    相关文章:

    asp.net - 无法解析从服务器收到的消息

    php - jQuery/Ajax PHP POST 调用

    c# - WCF Restful 服务 - 在一个请求中发送包含多个字段的文件

    .net - Autofac 和 IDisposable 接口(interface)

    javascript - AJAX:重复条目

    ios - CDVURLProtocol - 触发 ajax 调用时未执行 startLoading 方法

    wcf - 在某些PC上,创建WCF ServiceHost对象需要三到四分钟

    wcf - REST 与 SOAP - 不支持事务?

    c# - 在 WCF Webapi 站点上验证 Android 客户端?

    javascript - Web 服务 API key 和 Ajax - 保护 key