0

ajax(xmlHttpRequest)を使用してWCFサービス(REST)を利用しようとしています。サービスには基本認証が必要です。

私のajax呼び出しは:

 var httpRequest = new XMLHttpRequest();
         httpRequest.onreadystatechange = function () {
             if (httpRequest.readyState == 4) {
                 if (httpRequest.status == 200) {
                     //do some stuff
                 }
             }

         };
         httpRequest.open('PUT', 'http://localhost:59000/v1/users/1', true, 'user1', 'user1');
         httpRequest.withCredentials = "true";
         //must authenticate both..in open() but also set header manually ...cf http://stackoverflow.com/questions/1358550/xmlhttp-request-basic-authentication-issue
         httpRequest.setRequestHeader('Auhtorization', 'Basic user1:user1');
         httpRequest.setRequestHeader('Accept', 'application/json');
         // overridemimeType() does not set content type header .... don't know why ?
         httpRequest.setRequestHeader('Content-Type', 'application/json');
         var params = { "UserName": "user1" };
         var requestBodyString = JSON.stringify(params);
         httpRequest.send(requestBodyString);

サーバー側で最初にリクエストを処理する方法は次のとおりです

        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin",
                      crossDomain);

        //preflight request : cf https://developer.mozilla.org/en/http_access_control 
        if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
        {
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods",
                          "GET, POST, PUT, DELETE");
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Credentials", "true");

            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, Accept, DummyOneForTest");

            HttpContext.Current.Response.AddHeader("Access-Control-Max-Age",
                          "1728000");
            HttpContext.Current.Response.End();
        }

私のブラウザは、「リクエストヘッダーフィールドの自動化はAccess-Control-Allow-Headersによって許可されていません」というエラーを送信しますが、ご覧のとおり、応答ヘッダーが白っぽくなります。

さらに、Fiddlerを試してみると、すべてがうまくいき、ヘッダーのダミーも許可されています。

だから私は本当に混乱しています、誰かが助けることができるなら、してください!

ありがとう

4

2 に答える 2

0

了解しました。サーバーを「VisualStudio開発サーバーを使用」で実行しているときに、ヘッダー(2番目のコードブロック)を追加しようとすると、「この操作にはIIS統合パイプラインモードが必要です」という例外がスローされます。

解決策は、「IISWebサーバーを使用する」ためのアプリ構成にあります

したがって、このリンクhttp://msdn.microsoft.com/en-us/library/d14azbfh.aspx#addexceptionscommand

例外がスローされたときにVisualStudioに通知するように依頼することはできず、私はそれを見逃しました。

ありがとう

于 2012-05-25T08:52:52.100 に答える
0

関係ないかもしれませんが、上記の Ajax スニペットでもヘッダー名のスペルが「Authorization」ではなく「Auhtorization」になっています。

于 2012-05-29T19:52:14.160 に答える