1

レコードIDの削除を行うために、asp.net webapiでIIS 7.5を使用しています。Safari では動作しますが、Firefox では動作しません。jQuery Ajax 送信のリクエスト/レスポンスのイメージを次に示します。

http://screencast.com/t/Ckls9nO8D

jQuery Delete サブミッションのコード スニペットは次のとおりです。

    var deleteGame = function(gameId)
    {       
        var d = $.Deferred();
        var url = Enum.RootUrl + Enum.DeleteGameUrl + gameId;
        jQuery.support.cors = true;
        $.ajax(
        {
            url: url,
            type: 'Delete',
            cache: false,
            crossDomain: true,
            processData: true,
            success: function () 
            {
                d.resolve();
            },
            error: function(XMLHttpRequest, textStatus, errorThrown)
            {
                //alert("error happened AGAIN:\n" + JSON.stringify(XMLHttpRequest) );
            }
        });

        return d.promise();
    };

jquery 送信用に生成された URL は次のとおりです: http://local.guessalist.com/api/game/46

Safari では機能するのに Firefox では機能しない理由がわかりません。助けてください。

Access-Control-Request-Headers が Request Headers から欠落しているようです。これが問題の原因かどうかはわかりません。

SafariとChromeでこれをいじった後、「安全でないヘッダー「Access-Control-Request-Headers」の設定を拒否しました」OPTIONS http://local.guessalist.com/api/game/64 405 (Method Not Allowed )」というエラーがブラウザのコンソールを介して各ブラウザに表示されますが、削除操作は続行できます。ここで何をしているのかわかりません。アドバイスをいただければ幸いです。

4

1 に答える 1

1

数時間の調査、トラブルシューティング、呪い、コードの反転の後、最終的にこのアプローチの助けを借りて動作するようになりました。

http://brockallen.com/2012/06/28/cors-support-in-webapi-mvc-and-iis-with-thinktecture-identitymodel/

最初は WebAPI アプローチだけを試しましたが、うまくいきませんでした。次に、試していたものをすべて削除し、上記のリンクで説明されている IIS のアプローチに従ったところ、すべてが機能しました。理由はわかりません。このコード行を Web.Config に追加しただけで、他には何も追加しませんでした:

    <modules runAllManagedModulesForAllRequests="true">
        <add name="CorsHttpModule" type="Thinktecture.IdentityModel.Http.Cors.IIS.CorsHttpModule"/>
    </modules>

それが私が行った唯一の構成であり、クロスドメインの削除を行うことができます。他の動詞も機能すると思いますが、Delete でのみテストしました。したがって、コードを機能させることができて感謝していますが、上記のリンクで引用されている構成の一部しか行っていないのに、なぜ機能しているのか疑問に思っています。誰かがこれにつまずいて説明できるなら、私はそれを感謝します。ありがとう。

于 2012-10-22T05:56:43.750 に答える