Http ASP.NET 4 Wev Api控制器-修改响应类型

Http ASP.NET 4 Wev Api控制器-修改响应类型,http,asp.net-mvc-4,asp.net-web-api,httpresponse,Http,Asp.net Mvc 4,Asp.net Web Api,Httpresponse,假设我有一个简单的WebAPI控制器。我想返回一个基本的.NET类型作为结果。例如: public class LoginController : ApiController { [HttpPost] public bool Authenticate(LoginUserViewModel loginUserViewModel) { return true; } } 我在不同的浏览器中得到不同的结果,即使所有浏览器的请求都完全相同。 在Chrome

假设我有一个简单的WebAPI控制器。我想返回一个基本的.NET类型作为结果。例如:

public class LoginController : ApiController
{
    [HttpPost]
    public bool Authenticate(LoginUserViewModel loginUserViewModel)
    {
        return true;
    }
}
我在不同的浏览器中得到不同的结果,即使所有浏览器的请求都完全相同。 在Chrome和IE7中,我在响应头中得到的内容类型为application/json;字符集=utf-8,响应值等于“true”。 Firefox将响应内容类型识别为应用程序/xml;字符集=utf-8,并将响应值设置为:

"<boolean xmlns="http://schemas.microsoft.com/2003/10/Serialization/">true</boolean>"

这是因为浏览器发送不同的接受头。Web API使用accept标头确定响应的内容类型。默认情况下,WebAPI将几个不同的格式化程序加载到它的configuration.formatters集合中

强制的响应为特定媒体类型的一种方法是删除所有现有格式化程序,只添加所需的格式化程序

configuration.Formatters.Clear();
configuration.Formatters.Add(new JsonMediaTypeFormatter());

你能展示一下你是如何调用这个控制器动作的吗?你提到了一些浏览器,所以我猜你写了一些javascript或其他东西来调用它。你能展示一下这个javascript吗?当然。现在将更新我的问题。谢谢,这很有帮助!但我仍然不清楚为什么FF没有从我的标题中选择“Accept”attirbute:(请参阅上面的js代码。@BashirMagomedov在这种情况下,我会启动Fiddler并准确地观察FF发送的内容。我不知道你是用js手动设置Accept标题的。
configuration.Formatters.Clear();
configuration.Formatters.Add(new JsonMediaTypeFormatter());