/// <summary> /// Perform a web request and include the standard Mobile Services /// headers. /// </summary> /// <param name="method"> /// The HTTP method used to request the resource. /// </param> /// <param name="uriFragment"> /// URI of the resource to request (relative to the Mobile Services /// runtime). /// </param> /// <param name="content"> /// Optional content to send to the resource. /// </param> /// <param name="ignoreFilters"> /// Optional parameter to indicate if the client filters should be ignored /// and the request should be sent directly. Is <c>false</c> by default. /// </param> /// <returns>The JSON value of the response.</returns> internal async Task <IJsonValue> RequestAsync(string method, string uriFragment, IJsonValue content, bool ignoreFilters = false) { Debug.Assert(!string.IsNullOrEmpty(method), "method cannot be null or empty!"); Debug.Assert(!string.IsNullOrEmpty(uriFragment), "uriFragment cannot be null or empty!"); // Create the web request IServiceFilterRequest request = new ServiceFilterRequest(); request.Uri = new Uri(this.ApplicationUri, uriFragment); request.Method = method.ToUpper(); request.Accept = RequestJsonContentType; // Set Mobile Services authentication, application, and telemetry // headers request.Headers[RequestInstallationIdHeader] = applicationInstallationId; if (!string.IsNullOrEmpty(this.ApplicationKey)) { request.Headers[RequestApplicationKeyHeader] = this.ApplicationKey; } if (this.CurrentUser != null && !string.IsNullOrEmpty(this.CurrentUser.MobileServiceAuthenticationToken)) { request.Headers[RequestAuthenticationHeader] = this.CurrentUser.MobileServiceAuthenticationToken; } // TODO: Set the User-Agent header; currently HttpWebRequest throws when the // User-Agent header is set. // Add any request as JSON if (content != null) { request.ContentType = RequestJsonContentType; request.Content = content.Stringify(); } // Send the request and get the response back as JSON IServiceFilter filter = ignoreFilters ? null : this.filter; IServiceFilterResponse response = await ServiceFilter.ApplyAsync(request, filter); IJsonValue body = GetResponseJsonAsync(response); // Throw errors for any failing responses if (response.ResponseStatus != ServiceFilterResponseStatus.Success || response.StatusCode >= 400) { ThrowInvalidResponse(request, response, body); } return(body); }
/// <summary> /// Perform a web request and include the standard Mobile Services /// headers. /// </summary> /// <param name="method"> /// The HTTP method used to request the resource. /// </param> /// <param name="uriFragment"> /// URI of the resource to request (relative to the Mobile Services /// runtime). /// </param> /// <param name="content"> /// Optional content to send to the resource. /// </param> /// <returns>The JSON value of the response.</returns> internal Task <IJsonValue> RequestAsync(string method, string uriFragment, IJsonValue content) { Debug.Assert(!string.IsNullOrEmpty(method), "method cannot be null or empty!"); Debug.Assert(!string.IsNullOrEmpty(uriFragment), "uriFragment cannot be null or empty!"); // Create the web request IServiceFilterRequest request = new ServiceFilterRequest(); request.Uri = new Uri(this.ApplicationUri, uriFragment); request.Method = method.ToUpper(); request.Accept = RequestJsonContentType; // Set Mobile Services authentication, application, and telemetry // headers request.Headers[RequestInstallationIdHeader] = applicationInstallationId; if (!string.IsNullOrEmpty(this.ApplicationKey)) { request.Headers[RequestApplicationKeyHeader] = this.ApplicationKey; } if (!string.IsNullOrEmpty(this.currentUserAuthenticationToken)) { request.Headers[RequestAuthenticationHeader] = this.currentUserAuthenticationToken; } // Add any request as JSON if (content != null) { request.ContentType = RequestJsonContentType; request.Content = content.Stringify(); } // Send the request and get the response back as JSON return(ServiceFilter.ApplyAsync(request, this.filter) .ContinueWith(t => { var response = t.Result; IJsonValue body = GetResponseJsonAsync(response); // Throw errors for any failing responses if (response.ResponseStatus != ServiceFilterResponseStatus.Success || response.StatusCode >= 400) { ThrowInvalidResponse(request, response, body); } return body; })); }
/// <summary> /// Perform a web request and include the standard Mobile Services /// headers. /// </summary> /// <param name="method"> /// The HTTP method used to request the resource. /// </param> /// <param name="uriFragment"> /// URI of the resource to request (relative to the Mobile Services /// runtime). /// </param> /// <param name="content"> /// Optional content to send to the resource. /// </param> /// <returns>The JSON value of the response.</returns> internal async Task<IJsonValue> RequestAsync(string method, string uriFragment, IJsonValue content) { Debug.Assert(!string.IsNullOrEmpty(method), "method cannot be null or empty!"); Debug.Assert(!string.IsNullOrEmpty(uriFragment), "uriFragment cannot be null or empty!"); // Create the web request IServiceFilterRequest request = new ServiceFilterRequest(); request.Uri = new Uri(this.ApplicationUri, uriFragment); request.Method = method.ToUpper(); request.Accept = RequestJsonContentType; // Set Mobile Services authentication, application, and telemetry // headers request.Headers[RequestInstallationIdHeader] = applicationInstallationId; if (!string.IsNullOrEmpty(this.ApplicationKey)) { request.Headers[RequestApplicationKeyHeader] = this.ApplicationKey; } if (!string.IsNullOrEmpty(this.currentUserAuthenticationToken)) { request.Headers[RequestAuthenticationHeader] = this.currentUserAuthenticationToken; } // Add any request as JSON if (content != null) { request.ContentType = RequestJsonContentType; request.Content = content.Stringify(); } // Send the request and get the response back as JSON IServiceFilterResponse response = await ServiceFilter.ApplyAsync(request, this.filter); IJsonValue body = GetResponseJsonAsync(response); // Throw errors for any failing responses if (response.ResponseStatus != ServiceFilterResponseStatus.Success || response.StatusCode >= 400) { ThrowInvalidResponse(request, response, body); } return body; }