Asp.net web api 在XML和JSON之间切换ASP.NETWebAPI返回;其中';完成了吗?

Asp.net web api 在XML和JSON之间切换ASP.NETWebAPI返回;其中';完成了吗?,asp.net-web-api,asp.net-web-api-routing,Asp.net Web Api,Asp.net Web Api Routing,我有一个项目。在我的控制器中有一个简单的“锅炉板”API方法: using System.Web.Http; public class DataController : ApiController { private static Random _Random = new Random(); [Route("api/getrandomdoubles/{count:int}")] [AcceptVerbs("GET", "POST")] public double

我有一个项目。在我的控制器中有一个简单的“锅炉板”API方法:

using System.Web.Http;
public class DataController : ApiController
{
    private static Random _Random = new Random();

    [Route("api/getrandomdoubles/{count:int}")]
    [AcceptVerbs("GET", "POST")]
    public double[] GetRandomDoubles(int count)
    {
        var doubles = new double[count];
        for (var i = 0; i < count; i++)
        {
            doubles[i] = _Random.NextDouble();
        }
        return doubles;
    }
}
如果我从JavaScript调用它,那么:

d3.json('api/getrandomdoubles/2', function (error, data) {
    //Do stuff
});
我得到了JSON
[0.6679551008473873,0.9205140638726363]

什么决定了我的控制器API方法何时返回XML,何时返回JSON?我猜它是根据HTTP动词决定的,即
PUT
GET
,但我看不出在哪里指定了它。我自己如何控制返回类型

=============编辑==========

我刚刚意识到这是特定于浏览器的。呼叫
http://localhost:1165/api/GetRandomDoubles/2
在IE中返回JSON,在Chrome中调用它返回XML。

在Web API中调用它

首先,管道从HttpConfiguration对象获取IContentNegotiator服务。它还从HttpConfiguration.formatters集合获取媒体格式化程序列表

接下来,管道调用icontentnegotiator.Negotiate,传入:

  • 要序列化的对象的类型
  • 媒体格式化程序的集合
  • HTTP请求
  • 协商方法返回两条信息:

  • 使用哪个格式化程序
  • 响应的媒体类型
  • 如果找不到格式化程序,协商方法返回null,客户端接收HTTP错误406(不可接受)。

    它在Web API中被调用

    首先,管道从HttpConfiguration对象获取IContentNegotiator服务。它还从HttpConfiguration.formatters集合获取媒体格式化程序列表

    接下来,管道调用icontentnegotiator.Negotiate,传入:

  • 要序列化的对象的类型
  • 媒体格式化程序的集合
  • HTTP请求
  • 协商方法返回两条信息:

  • 使用哪个格式化程序
  • 响应的媒体类型
  • 如果找不到格式化程序,协商方法返回null,客户端接收HTTP错误406(不可接受)。

    它在Web API中被调用

    首先,管道从HttpConfiguration对象获取IContentNegotiator服务。它还从HttpConfiguration.formatters集合获取媒体格式化程序列表

    接下来,管道调用icontentnegotiator.Negotiate,传入:

  • 要序列化的对象的类型
  • 媒体格式化程序的集合
  • HTTP请求
  • 协商方法返回两条信息:

  • 使用哪个格式化程序
  • 响应的媒体类型
  • 如果找不到格式化程序,协商方法返回null,客户端接收HTTP错误406(不可接受)。

    它在Web API中被调用

    首先,管道从HttpConfiguration对象获取IContentNegotiator服务。它还从HttpConfiguration.formatters集合获取媒体格式化程序列表

    接下来,管道调用icontentnegotiator.Negotiate,传入:

  • 要序列化的对象的类型
  • 媒体格式化程序的集合
  • HTTP请求
  • 协商方法返回两条信息:

  • 使用哪个格式化程序
  • 响应的媒体类型
  • 如果未找到格式化程序,协商方法将返回null,客户端将收到HTTP错误406(不可接受)

    d3.json('api/getrandomdoubles/2', function (error, data) {
        //Do stuff
    });