0

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

public class LoginController : ApiController
{
    [HttpPost]
    public bool Authenticate(LoginUserViewModel loginUserViewModel)
    {
        return true;
    }
}

即使所有浏览器的请求完全相同,我也会在不同的浏览器中得到不同的结果。在 Chrome 和 IE7 中,我在响应标头中获得 Content-Type 作为application/json;charset=utf-8,响应值等于“ true ”。Firefox 将响应 Content-Type 识别为application/xml;charset=utf-8 并将响应值设置为:

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

有没有办法在服务器端设置响应类型,所以它总是一样的?谢谢。

更新:这是我用来调用我的控制器的 JavaScript。

                    Ext.Ajax.request({
                    async: false,
                    url: 'Login/Authenticate',
                    defaultHeaders: { 'Accept': 'application/json' },
                    jsonData: user,
                    success: function (response, options) {
                        if (response.responseText !== 'true') {
                            Ext.Msg.alert('Error', 'Login failed, please try again');
                        } else {
                            document.location = 'Main.aspx';
                        }
                    },
                    failure: function (response, options) {
                        Ext.MessageBox.hide();
                        Ext.Msg.alert('Error', 'Server error. Cannot authenticate user.');
                    }
                });
4

1 回答 1

1

这是因为浏览器发送不同的 Accept 标头。Web API 使用接受标头来确定响应的内容类型。默认情况下,Web API 会在其 configuration.Formatters 集合中加载一些不同的格式化程序。

强制响应为特定媒体类型的一种方法是删除所有现有的格式化程序并仅添加您想要的格式化程序。

configuration.Formatters.Clear();
configuration.Formatters.Add(new JsonMediaTypeFormatter());
于 2012-09-20T11:24:18.950 回答