3

ご覧いただきありがとうございます。

バックグラウンド

さまざまなアプリや外部の消費者が使用する会社向けの API レイヤーを作成しています。

消費側では、ほとんどの消費者は jQuery を使用して ajax 経由でサービスを呼び出し$.post()ます。しかし、Internet Explorer は私たちの生活をより困難なものにしています (もちろん!)。XDomainRequestIE の場合、IE は jQuery$.post()を実行しないため、オブジェクトを使用する必要がありますXMLHttpRequest()

ここに画像の説明を入力

それ以外の場合は、正常にXMLHttpRequest()動作します。

C#、.NET MVC 4 (WebApi) を使用しています

問題

問題は、ヘッダーXDomainRequestを設定することができず、MVC 4 WebApi コントローラーが受け入れないデフォルトが常に設定されていることです (もちろん、もちろん!!)。Content-Typetext-plain

質問

text-plainコントローラーへのリクエストをインターセプトし、コンテンツ タイプの存在を検出し、その場でコンテンツ タイプに変更するにはどうすればよいtext-jsonですか?

前もって感謝します!

4

2 に答える 2

4

2日後、ドキュメンテーションに注ぎ込み、このスレッドを読んだ後、私はこれを機能させることができました。したがって、解決策の説明が不十分な場合はご容赦ください。これらのタイプのスレッドのいずれかに回答するのはこれが初めてです。問題を見つけるのに非常に長い時間がかかったので、この同じ問題に陥る魂を救う価値があると考えました。

私の助けのソースは、上記のリンク by byterotから来ました。

  1. 最初にしたことは、DelegatingHandlerを作成することでした。したがって、私のヘルパーフォルダーまたはすべてのクラスを作成して、必要な名前を付けたい場所で。
    これが私のものです:

    public class ContentTypeHandler : DelegatingHandler
    {
        /** Check that this is an IE browser. */
        if ((request.Headers.UserAgent.ToString().IndexOf("MSIE", System.StringComparison.Ordinal) > -1))
        {
            MediaTypeHeaderValue contentTypeValue;
            if (MediaTypeHeaderValue.TryParse("application/json", out contentTypeValue))
            {
                request.Content.Headers.ContentType = contentTypeValue;
                request.Content.Headers.ContentType.CharSet = "utf-8";
            }
        }
    
        /** Return request to flow. */
        return base.SendAsync(request, cancellationToken)
           .ContinueWith(task =>
           {
                // work on the response
                var response = task.Result;
                return response;
           });
    }
    
  2. 最後に、あなたがしなければならないことは、あなたのGlobal.asax.csファイル内の Handler を呼び出すことですApplication_Start():

    GlobalConfiguration.Configuration.MessageHandlers.Add(new ContentTypeHandler());
    

それが私がしたすべてであり、うまくいきました。頑張ってください。これが誰かの役に立てば幸いです。

于 2013-04-26T05:01:54.347 に答える
3

HTTP スタックでリクエストを変更しても問題ありません。DelegatingHandlerコントローラーに到達する前に、カスタムを作成して登録することで実行できます。委任ハンドラーはゲームの早い段階でこの処理を行うことができるため、リクエストは希望する形式でコントローラーに到着します。ルート固有のハンドラーでもかまいません。 http://msdn.microsoft.com/en-us/library/system.net.http.delegatinghandler.aspx

$.post の代わりに $.ajax を試しましたか?

于 2013-01-16T20:26:22.963 に答える