// 通信処理(File_GET) internal void Connect(HttpClientFileDataCallback callback) { HttpWebRequest req = _returnRequest(); _Connection(req, null, callback); }
private void _Connection(HttpWebRequest req, HttpClientCallback callback, HttpClientFileDataCallback fileCallback) { //SSLサイトにアクセス ServicePointManager.ServerCertificateValidationCallback = delegate { return(true); }; int statusCode = 0; string responseData = null; NCMBException error = null; //Post,Put時のコンテントデータ書き込み if (_method == ConnectType.POST || _method == ConnectType.PUT) { if (_file != null) { // File req = this._sendRequestForFile(req, ref error); } else { // 通常 req = this._sendRequest(req, ref error); } //書き込みでエラーがあれば終了 if (error != null) { callback(statusCode, responseData, error); return; } } HttpWebResponse httpResponse = null; Stream streamResponse = null; StreamReader streamRead = null; byte[] responseByte = null; try { // 通信結果取得 httpResponse = (HttpWebResponse)req.GetResponse(); streamResponse = httpResponse.GetResponseStream(); statusCode = (int)httpResponse.StatusCode; streamRead = new StreamReader(streamResponse); if (fileCallback != null) { // File_GET MemoryStream memoryStream = new MemoryStream(0x10000); byte[] buffer = new byte[0x1000]; int bytes; while ((bytes = streamResponse.Read(buffer, 0, buffer.Length)) > 0) { memoryStream.Write(buffer, 0, bytes); } responseByte = memoryStream.ToArray(); } else { // 通常 responseData = streamRead.ReadToEnd(); } } catch (WebException ex) { // 通信失敗 using (WebResponse webResponse = ex.Response) { error = new NCMBException(); error.ErrorMessage = ex.Message; // mBaaSエラー if (webResponse != null) { // エラーのJSON書き出し streamResponse = webResponse.GetResponseStream(); streamRead = new StreamReader(streamResponse); responseData = streamRead.ReadToEnd(); var jsonData = MiniJSON.Json.Deserialize(responseData) as Dictionary <string, object>; var hashtableData = new Hashtable(jsonData); // エラー内容の設定 error.ErrorCode = (hashtableData ["code"].ToString()); error.ErrorMessage = (hashtableData ["error"].ToString()); httpResponse = (HttpWebResponse)webResponse; statusCode = (int)httpResponse.StatusCode; } } } finally { if (httpResponse != null) { httpResponse.Close(); } if (streamResponse != null) { streamResponse.Close(); } if (streamRead != null) { streamRead.Close(); } //check if session token error have or not if (error != null) { _checkInvalidSessionToken(error.ErrorCode); } //レスポンスデータにエスケープシーケンスがあればアンエスケープし、mobile backend上と同一にします var unescapeResponseData = responseData; if (unescapeResponseData != null && unescapeResponseData != Regex.Unescape(unescapeResponseData)) { unescapeResponseData = Regex.Unescape(unescapeResponseData); } //レスポンスシグネチャのチェック if (NCMBSettings._responseValidationFlag && httpResponse != null) { //レスポンスシグネチャが無い場合はE100001エラー if (httpResponse.Headers.GetValues(RESPONSE_SIGNATURE) != null) { string responseSignature = httpResponse.Headers.GetValues(RESPONSE_SIGNATURE) [0]; _signatureCheck(responseSignature, ref statusCode, ref unescapeResponseData, ref responseByte, ref error); } else { statusCode = 100; responseData = "{}"; error = new NCMBException(); error.ErrorCode = "E100001"; error.ErrorMessage = "Authentication error by response signature incorrect."; } } if (fileCallback != null) { fileCallback(statusCode, responseByte, error); } else { callback(statusCode, responseData, error); } } }
// 通信処理(File_GET) internal void Connect(HttpClientFileDataCallback callback) { _Connection(callback); }