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を試してみると、すべてがうまくいき、ヘッダーのダミーも許可されています。
だから私は本当に混乱しています、誰かが助けることができるなら、してください!
ありがとう