private void DoPost(HttpRequest httpRequest, HttpResponse httpResponse)
 {
     Dictionary<string, Stream> files = httpRequest.Files.AllKeys.ToDictionary(n => n, n => httpRequest.Files[n].InputStream);
     DirectRequest[] requests = new DirectRequestsBuilder().Build(new StreamReader(httpRequest.InputStream, httpRequest.ContentEncoding), httpRequest.Form, files);
     var responses = new DirectResponse[requests.Length];
     for(int i = 0; i < requests.Length; i++)
     {
         responses[i] = new DirectHandler(_objectFactory, _metadata).Handle(requests[i]);
     }
     using(var textWriter = new StreamWriter(httpResponse.OutputStream, httpResponse.ContentEncoding))
     {
         if(requests[0].Upload)
         {
             httpResponse.ContentType = "text/html";
             textWriter.Write("<html><body><textarea>");
             SerializeResponse(responses, textWriter);
             textWriter.Write("</textarea></body></html>");
         }
         else
         {
             httpResponse.ContentType = "application/json";
             SerializeResponse(responses, textWriter);
         }
     }
 }
Пример #2
0
        private void DoPost(HttpRequest httpRequest, HttpResponse httpResponse)
        {
            Dictionary <string, Stream> files = httpRequest.Files.AllKeys.ToDictionary(n => n, n => httpRequest.Files[n].InputStream);

            DirectRequest[] requests  = new DirectRequestsBuilder().Build(new StreamReader(httpRequest.InputStream, httpRequest.ContentEncoding), httpRequest.Form, files);
            var             responses = new DirectResponse[requests.Length];

            for (int i = 0; i < requests.Length; i++)
            {
                responses[i] = new DirectHandler(_metadata, _directHandlerInterceptor).Handle(requests[i]);
            }
            using (var textWriter = new StreamWriter(httpResponse.OutputStream, httpResponse.ContentEncoding))
            {
                if (requests[0].Upload)
                {
                    httpResponse.ContentType = "text/html";
                    textWriter.Write("<html><body><textarea>");
                    SerializeResponse(responses, textWriter);
                    textWriter.Write("</textarea></body></html>");
                }
                else
                {
                    httpResponse.ContentType = "application/json";
                    SerializeResponse(responses, textWriter);
                }
            }
        }
Пример #3
0
 private void DoPost(HttpRequest httpRequest, HttpResponse httpResponse)
 {
     var directRequestsBuilder = new DirectRequestsBuilder();
     DirectRequest[] requests = httpRequest.Form.Count > 0 ? directRequestsBuilder.BuildFromFormData(httpRequest.Form) : directRequestsBuilder.BuildFromRequestData(new StreamReader(httpRequest.InputStream, httpRequest.ContentEncoding));
     var responses = new DirectResponse[requests.Length];
     for(int i = 0; i < requests.Length; i++)
     {
         responses[i] = new DirectHandler(_objectFactory, _metadata).Handle(requests[i]);
     }
     httpResponse.ContentType = "application/json";
     using(var jsonWriter = new JsonTextWriter(new StreamWriter(httpResponse.OutputStream, httpResponse.ContentEncoding)))
     {
         new JsonSerializer().Serialize(jsonWriter, responses.Length == 1 ? (object)responses[0] : responses);
     }
 }
 internal DirectResponse Handle(DirectRequest request, JsonSerializer jsonSerializer, object actionInstance)
 {
     var response = new DirectResponse(request);
     MethodInfo methodInfo = _metadata.GetMethodInfo(request.Action, request.Method);
     object result = null;
     try
     {
         object[] parameters = _parametersParser.Parse(methodInfo.GetParameters(), request.JsonData, request.FormData, jsonSerializer);
         result = methodInfo.Invoke(actionInstance, parameters);
     }
     catch(TargetInvocationException e)
     {
         response.SetException(e.InnerException);
     }
     catch(Exception e)
     {
         response.SetException(e);
     }
     response.Result = SerializeResult(result, jsonSerializer);
     return response;
 }
Пример #5
0
 internal DirectResponse Handle(DirectRequest request, JsonSerializer jsonSerializer, object actionInstance)
 {
     var response = new DirectResponse(request);
     MethodInfo methodInfo = _metadata.GetMethodInfo(request.Action, request.Method);
     object result = null;
     try
     {
         object[] parameters = (request.Data.Type == JTokenType.Array ? _parameterValuesParser.ParseByPosition(methodInfo.GetParameters(), (JArray)request.Data, jsonSerializer) : _parameterValuesParser.ParseByName(methodInfo.GetParameters(), (JObject)request.Data, jsonSerializer));
         result = methodInfo.Invoke(actionInstance, parameters);
     }
     catch(TargetInvocationException e)
     {
         response.SetException(e.InnerException);
     }
     catch(Exception e)
     {
         response.SetException(e);
     }
     response.Result = SerializeResult(result, jsonSerializer);
     return response;
 }
Пример #6
0
        public DirectResponse Handle(DirectRequest request)
        {
            try
            {
                Type type = _metadata.GetActionType(request.Action, request.Method);
                MethodInfo methodInfo = _metadata.GetMethodInfo(request.Action, request.Method);

                var response = new DirectResponse(request);
                _directHandlerInterceptor.Invoke(type, methodInfo, delegate(object actionInstance, JsonSerializer jsonSerializer) {
                    response = Handle(request, jsonSerializer, methodInfo, actionInstance, type);
                });
                return response;

                //JsonSerializer jsonSerializer = _objectFactory.GetJsonSerializer();
                //try
                //{
                //    object actionInstance = _objectFactory.GetInstance(type);
                //    try
                //    {
                //        return Handle(request, jsonSerializer, methodInfo, actionInstance);
                //    }
                //    finally
                //    {
                //        _objectFactory.Release(actionInstance);
                //    }
                //}
                //finally
                //{
                //    _objectFactory.Release(jsonSerializer);
                //}
            }
            catch(TargetInvocationException e)
            {
                return new DirectResponse(request, e.InnerException);
            }
            catch(Exception e)
            {
                return new DirectResponse(request, e);
            }
        }
Пример #7
0
        public DirectResponse Handle(DirectRequest request)
        {
            try
            {
                Type       type       = _metadata.GetActionType(request.Action, request.Method);
                MethodInfo methodInfo = _metadata.GetMethodInfo(request.Action, request.Method);

                var response = new DirectResponse(request);
                _directHandlerInterceptor.Invoke(type, methodInfo, delegate(object actionInstance, JsonSerializer jsonSerializer) {
                    response = Handle(request, jsonSerializer, methodInfo, actionInstance, type);
                });
                return(response);

                //JsonSerializer jsonSerializer = _objectFactory.GetJsonSerializer();
                //try
                //{
                //    object actionInstance = _objectFactory.GetInstance(type);
                //    try
                //    {
                //        return Handle(request, jsonSerializer, methodInfo, actionInstance);
                //    }
                //    finally
                //    {
                //        _objectFactory.Release(actionInstance);
                //    }
                //}
                //finally
                //{
                //    _objectFactory.Release(jsonSerializer);
                //}
            }
            catch (TargetInvocationException e)
            {
                return(new DirectResponse(request, e.InnerException));
            }
            catch (Exception e)
            {
                return(new DirectResponse(request, e));
            }
        }
 private static void SerializeResponse(DirectResponse[] responses, TextWriter textWriter)
 {
     new JsonSerializer().Serialize(textWriter, responses.Length == 1 ? (object)responses[0] : responses);
 }