示例#1
0
        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);
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
                    }
                }
            });
        }
示例#5
0
        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);
                }
            };
        }
示例#6
0
        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());
        }
示例#7
0
 public WrongNumberOfParamsException(IWebAction action, IWebController controller)
 {
     actionName     = action.GetType().Name;
     controllerName = controller.GetType().Name;
 }