Ejemplo n.º 1
0
        public static HttpResponseMessage ToWebResponse(this SubmitResult data)
        {
            HttpResponseMessage mes = new HttpResponseMessage();

            if (data.Code == 0)
            {
                mes.StatusCode = HttpStatusCode.OK;
            }
            else
            {
                mes.StatusCode = HttpStatusCode.ExpectationFailed;
            }

            mes.Content = new StringContent(data.ToJson());
            return(mes);
        }
Ejemplo n.º 2
0
        protected async Task Handle()
        {
            try
            {
                HttpClient client = new HttpClient();

                string url = Utils.CombineUrl(BaseUrl, _context.Request.Url.AbsolutePath);

                client.Timeout = new TimeSpan(0, 5, 0);

                var encoding    = _context.Request.ContentEncoding;
                var contentType = "application/json";

                foreach (var head in _context.Request.Headers.AllKeys)
                {
                    var elem = _context.Request.Headers[head];
                    if (head.Contains("Content"))
                    {
                        if (head.ToLower() == "content-type")
                        {
                            contentType = _processContentType(_context.Request.Headers[head]);
                        }
                    }
                    else
                    {
                        client.DefaultRequestHeaders.Add(head, elem);
                    }
                }


                if (!string.IsNullOrEmpty(_context.Request.Url.Query))
                {
                    url += _context.Request.Url.Query;
                }
                string data   = null;
                string method = _context.Request.HttpMethod.ToLower();

                HttpResponseMessage mes     = new HttpResponseMessage(HttpStatusCode.OK);
                HttpContent         content = new StringContent("", Encoding.UTF8, contentType);

                if (method != "get" && method != "delete")
                {
                    if (contentType.Contains("multipart"))
                    {
                        var files = _context.Request.Files;
                        content = ConvertToMultipartContent(files);
                    }
                    else
                    {
                        using (StreamReader readStream = new StreamReader(_context.Request.InputStream, encoding))
                        {
                            data = readStream.ReadToEnd();
                        }
                        content = new StringContent(data, encoding, contentType);
                    }
                }

                switch (method)
                {
                case "get":
                    mes = await client.GetAsync(url);

                    break;

                case "post":
                    mes = await client.PostAsync(url, content);

                    break;

                case "put":
                    mes = await client.PutAsync(url, content);

                    break;

                case "delete":
                    mes = await client.DeleteAsync(url);

                    break;
                }


                var headers = mes.Content.Headers as HttpContentHeaders;
                foreach (var h in headers)
                {
                    _context.Response.Headers[h.Key] = h.Value.FirstOrDefault();
                }

                _context.Response.ContentType = headers.ContentType?.ToString();
                await mes.Content.CopyToAsync(_context.Response.OutputStream);

                _context.Response.StatusCode = (int)mes.StatusCode;
                _complete = true;
                _callback(this);
            }
            catch (Exception ex)
            {
                SubmitResult res = new SubmitResult(1, "Error");
                res.SetException(ex);
                _context.Response.Write(res.ToJson());
                _context.Response.StatusCode = (int)HttpStatusCode.ExpectationFailed;
                _complete = true;
                _callback(this);
            }
        }