ユーザー名とパスワードのフィールドと [送信] ボタンを含むフォームを作成する ASP.NET ページを使用して、Web サービスの呼び出しをテストしようとしています。(jQuery と私が使用している .js ファイルの両方が head 要素のスクリプト タグに含まれています。)
[送信] ボタンは、別の JavaScript ファイルを呼び出す C# コード ビハインド ファイルで作成された関数を呼び出します。
protected void mSubmit_Click(object sender, EventArgs eventArgs)
{
String authenticate = String.Format("Authentication(\"{0}\",\"{1}\");", this.mUsername.Text,this.mPassword.Text);
Page.ClientScript.RegisterStartupScript(this.GetType(), "ClientScript", authenticate, true);
}
JavaScript 関数 はAuthenticate
、jQuery と Ajax を使用して別のサーバーに Web サービス呼び出しを行い、JSON パラメーターを送信し、応答として JSON が返されることを期待します。
function Authentication(uname, pwd) {
//gets search parameters and puts them in json format
var params = '{"Header":{"AuthToken":null,"ProductID":"NOR","SessToken":null,"Version":1},"ReturnAuthentication":true,"Password":"' + pwd + '","Username":"' + uname + '",”ReturnCredentials”:false }';
var xmlhttp = $.ajax({
async: false,
type: "POST",
url: 'https://myHost.com/V1/Identity/Authenticate',
data: params,
contentType: 'application/json'
});
alert(xmlhttp.statusText);
alert(xmlhttp.responseText);
return;
}
ただし、呼び出している Web サービスは ASP.NET、C#、および JavaScript ファイルとは別のサーバー上にあるため、statusText
またはresponseText
警告が表示されません。
どういうわけか、Web サービスに何も送信されず、何も返されず、エラーも返されません。属性に関数を入れてみましたbeforeSend
が、起動しませんでした。サーバー外の Web サービスの呼び出しを処理するために必要な特別な方法はありますか?
アップデート!
jjnguy、Janie、Nathan のアドバイスを受けて、HttpWebRequest を使用して Web サービスへのサーバー側呼び出しを試みています。jjnguy のコードとこの質問のコードの一部を使用して、これを思いつきました。
public static void Authenticate(string pwd, string uname)
{
string ret = null;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://myhost.com/V1/Identity/Authenticate");
request.ContentType = "application/json";
request.Method = "POST";
string data = "{\"Header\":{\"AuthToken\":null,\"ProductID\":\"NOR\",\"SessToken\":null,\"Version\":1},\"ReturnAuthentication\":true,\"Password\":\"" + pwd + "\",\"Username\":\"" + uname + "\",\"ReturnCredentials\":false }'";
byte[] byteData = UTF8Encoding.UTF8.GetBytes(data);
request.ContentLength = byteData.Length;
using (Stream postStream = request.GetRequestStream())
{
postStream.Write(byteData, 0, byteData.Length);
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (response)
{
// Get the response stream
StreamReader reader = new StreamReader(response.GetResponseStream());
// Console application output
ret = reader.ReadToEnd();
}
Console.WriteLine(ret);
}
ただし、(400) Bad Request
HttpWebRequest から応答を取得しようとすると、リモート サーバーからエラーが発生します。例外の Response プロパティの{System.Net.HttpWebResponse}
値は、 Status プロパティの値は ですProtocolError
。これは、URL が HTTP SSL プロトコルを使用しているためだと確信しています。ASP.NET ページの URL を HTTPS で開始する (オプションではない) 以外に、これを回避するにはどうすればよいですか?