0

単純なWebAPIコントローラーがあるとしましょう。結果として、基本的な.NETタイプを返したいです。例えば:

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

リクエストがすべてのブラウザでまったく同じであっても、ブラウザごとに異なる結果が得られます。ChromeとIE7では、応答ヘッダーにapplication/jsonとしてContent-Typeを取得します。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は、acceptヘッダーを使用して、応答のコンテンツタイプを判別します。デフォルトでは、WebAPIはいくつかの異なるフォーマッターをそのconfiguration.Formattersコレクションにロードします。

の応答を特定のメディアタイプにする1つの方法は、既存のフォーマッターをすべて削除し、必要なものだけを追加することです。

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