public static Result <UnityWebRequest, WebError> CreateRequest(string url, IWebAction action, WebActionData actionData, IWebSerializer serializer) { if (action.Method == WebMethod.POST) { object[] values = actionData.values; var form = new Dictionary <string, object>(); for (int i = 0; i < values.Length; i++) { form.Add(action.ParamNames[i], values[i]); } return(serializer.Serialize(form).Select(postData => { var request = UnityWebRequest.Post(url, postData); serializer.OnBeforeRequest(request); return request; })); } else { var request = UnityWebRequest.Get(url); serializer.OnBeforeRequest(request); return(request); } }
public void Request(IWebAction action, Uri uri, byte[] content) { var authenticator = _auth; if (authenticator == null) { return; } var request = WebRequest .CreateHttp(uri); var method = action.Method; request.Method = method; request.UserAgent = "CodeSafe"; var token = authenticator .GetToken(uri, method); if (token != null) { request.Headers["Authorization"] = token; } action.Initialize(request); Action getResponse = () => request.BeginGetResponse( HandleResponse(request, uri, action, content, authenticator), null); if (content == null) { getResponse(); return; } request.ContentType = "text/xml"; request.BeginGetRequestStream(x => { using (var buffer = request.EndGetRequestStream(x)) buffer.Write(content, 0, content.Length); getResponse(); }, content); }
public void Request(IWebAction action, Uri uri, byte[] content) { var authenticator = _auth; if (authenticator == null) return; var request = WebRequest .CreateHttp(uri); var method = action.Method; request.Method = method; request.UserAgent = "WinPass"; var token = authenticator .GetToken(uri, method); if (token != null) request.Headers["Authorization"] = token; action.Initialize(request); Action getResponse = () => request.BeginGetResponse( HandleResponse(request, uri, action, content, authenticator), null); if (content == null) { getResponse(); return; } request.ContentType = "text/xml"; request.BeginGetRequestStream(x => { using (var buffer = request.EndGetRequestStream(x)) buffer.Write(content, 0, content.Length); getResponse(); }, content); }
private AsyncCallback HandleResponse( WebRequest request, Uri uri, IWebAction action, byte[] content, IAuthenticator authenticator) { return(ar => { try { using (var response = (HttpWebResponse) request.EndGetResponse(ar)) { using (var stream = response.GetResponseStream()) action.Complete(response.StatusCode, stream); } } catch (WebException ex) { if (authenticator != _auth) { // Another thread has already updated the authenticator Request(action, uri, content); return; } // Do we have any alternative? var next = _auth.Next(ex); _auth = next; if (next != null) { Request(action, uri, content); } else { action.Error(ex); } } }); }
private AsyncCallback HandleResponse( WebRequest request, Uri uri, IWebAction action, byte[] content, IAuthenticator authenticator) { return ar => { try { using (var response = (HttpWebResponse) request.EndGetResponse(ar)) { using (var stream = response.GetResponseStream()) action.Complete(response.StatusCode, stream); } } catch (WebException ex) { if (authenticator != _auth) { // Another thread has already updated the authenticator Request(action, uri, content); return; } // Do we have any alternative? var next = _auth.Next(ex); _auth = next; if (next != null) Request(action, uri, content); else action.Error(ex); } }; }
public static string BuildUrl(IWebAction action, WebActionData actionData) { var controller = action.Controller; var api = controller.Api; var uriBuilder = new StringBuilder(); uriBuilder.Append(api.url); if (!api.url.EndsWith("/")) { uriBuilder.Append('/'); } uriBuilder.Append(controller.Name); if (!string.IsNullOrEmpty(controller.Name)) { uriBuilder.Append('/'); } uriBuilder.Append(action.Name); if (!string.IsNullOrEmpty(action.Name)) { uriBuilder.Append('/'); } // Url params object[] values = actionData.values; for (int i = 0; i < values.Length; i++) { if (string.IsNullOrEmpty(action.ParamNames[i])) { continue; } string encodedValue = UnityWebRequest.EscapeURL(System.Convert.ToString(values[i])); if (!string.IsNullOrEmpty(encodedValue)) { uriBuilder.Append(encodedValue); uriBuilder.Append('/'); } } // Remove last '/' uriBuilder.Remove(uriBuilder.Length - 1, 1); if (values.Length > 0) { // Get params if (action.Method == WebMethod.GET) { uriBuilder.Append('?'); for (int i = 0; i < values.Length; i++) { uriBuilder.Append(UnityWebRequest.EscapeURL(action.ParamNames[i])); uriBuilder.Append('='); uriBuilder.Append(UnityWebRequest.EscapeURL(System.Convert.ToString(values[i]))); uriBuilder.Append('&'); } if (uriBuilder.Length > 0) { uriBuilder.Remove(uriBuilder.Length - 1, 1); } } } return(uriBuilder.ToString()); }
public WrongNumberOfParamsException(IWebAction action, IWebController controller) { actionName = action.GetType().Name; controllerName = controller.GetType().Name; }