private static void GenerateResourceDescription(HelpPageApiModel apiModel, ModelDescriptionGenerator modelGenerator)
        {
            ResponseDescription response = apiModel.ApiDescription.ResponseDescription;
            Type responseType            = response.ResponseType ?? response.DeclaredType;

            if (responseType != null && responseType != typeof(void))
            {
                apiModel.ResourceDescription = modelGenerator.GetOrCreateModelDescription(responseType);
            }
        }
        public static ModelDescription GetResourceDescription(ApiDescription apiDescription, ModelDescriptionGenerator modelGenerator)
        {
            ResponseDescription response = apiDescription.ResponseDescription;
            Type responseType            = response.ResponseType ?? response.DeclaredType;

            if (responseType != null && responseType != typeof(void))
            {
                return(modelGenerator.GetOrCreateModelDescription(responseType));
            }
            return(null);
        }
Пример #3
0
        private Collection <ApiDescription> InitializeApiDescriptions()
        {
            Collection <ApiDescription> apiDescriptions = new Collection <ApiDescription>();

            //webapi
            foreach (var item in base.ApiDescriptions)
            {
                apiDescriptions.Add(item);
            }

            //dynamic api
            var dynamicapiinfos = DynamicApiControllerManager.GetAll();

            foreach (var dynamicapiinfo in dynamicapiinfos)
            {
                foreach (var item in dynamicapiinfo.Actions)
                {
                    ApiDescription api        = new ApiDescription();
                    var            httpaction = new HttpControllerDescriptor();
                    httpaction.Configuration  = _config;
                    httpaction.ControllerType = dynamicapiinfo.ServiceInterfaceType;
                    httpaction.ControllerName = dynamicapiinfo.ServiceName;
                    var action = new DynamicHttpActionDescriptor(httpaction, item.Value.Method, item.Value.Filters);
                    api.ActionDescriptor = action;
                    api.HttpMethod       = GetMethod(item.Value.Verb);
                    IActionValueBinder actionValueBinder = _config.Services.GetActionValueBinder();
                    HttpActionBinding  actionBinding     = actionValueBinder.GetBinding(action);

                    //parameter
                    IList <ApiParameterDescription> parameterDescriptions = CreateParameterDescription(actionBinding, action);
                    //using refletions to internal set
                    var prop = typeof(ApiDescription).GetProperties().Where(p => p.Name == "ParameterDescriptions").SingleOrDefault();
                    prop.SetValue(api, new Collection <ApiParameterDescription>(parameterDescriptions));


                    //resopnse
                    ResponseDescription responseDescription = CreateResponseDescription(action);
                    var prop2 = typeof(ApiDescription).GetProperties().Where(p => p.Name == "ResponseDescription").SingleOrDefault();
                    prop2.SetValue(api, responseDescription);

                    api.RelativePath = "api/services/" + dynamicapiinfo.ServiceName + "/" + item.Value.ActionName;

                    apiDescriptions.Add(api);
                }
            }
            return(apiDescriptions);
        }
Пример #4
0
        private IEnumerable <Response> GetResponses(ResponseDescription responseDescription, ApiDescription api)
        {
            var responses = new List <Response>();

            if (responseDescription.ResponseType == null && responseDescription.DeclaredType == null)
            {
                return(responses);
            }

            var responseType = responseDescription.ResponseType ?? responseDescription.DeclaredType;

            var attributes = api.ActionDescriptor.GetCustomAttributes <Attribute>();

            responses = HandleResponseTypeStatusAttributes(attributes);

            if (responseType == typeof(IHttpActionResult))
            {
                return(responses);
            }

            responses.Add(HandleResponseTypeAttributes(responseType));

            return(responses);
        }
Пример #5
0
        public static void SetResponseDescription(this ApiDescription apiDescription, ResponseDescription responseDescription)
        {
            var property = GetPropertyFrom(apiDescription);

            SetPropertyTo(apiDescription, responseDescription, property);
        }
Пример #6
0
    private ResponseDescription ReceiveCommandResponse()
    {
        ResponseDescription resp_desc = new ResponseDescription();

        int StatusCode = 0;
        String StatusDescription = null;

        bool bCompleteResponse=false;
        if( m_ControlSocket == null ) // something went wrong protocol violation exception
        {
          throw new ApplicationException("Control COnnection not opened");
        }

        MemoryStream responseStream = new MemoryStream();

        while(true)
        {
          int BufferSize = 256;
          Byte[] recvbuffer = new Byte[BufferSize + 1];
          int bytesread = 0;
          recvbuffer[0] = (Byte)'\0';
          bytesread = m_ControlSocket.Receive(recvbuffer, BufferSize, 0 );

          if( bytesread <= 0 )
        break;  // No response recieve to process, exit the loop

          //copy the recieved data in responsestream
          responseStream.Write(recvbuffer,0,bytesread);

          String szResponse = Encoding.ASCII.GetString(recvbuffer,0,bytesread);
          Trace.WriteLine(szResponse);

          m_sbControlSocketLog.Append(szResponse);

          bCompleteResponse = IsCompleteResponse(responseStream);
          if(bCompleteResponse)
          {
        Trace.WriteLine("___ RESPONSE IS COMPLETE");
        break;
          }
        }

        // @TODO: Remove this stream stuff, and read from stringbuffer instead.
        if(bCompleteResponse)
        {
          // now get status code
          try
          {
        responseStream.Position=0;
        Byte [] bStatusCode = new Byte[3];
        responseStream.Read (bStatusCode, 0, 3) ;
        String statuscodestr=Encoding.ASCII.GetString(bStatusCode,0,3);
        StatusCode = Convert.ToInt16( statuscodestr);
          }
          catch
          {
        StatusCode =  -1;
          }
          //
          // Copy the response in Status Description
          //
          int responsesize = (int)responseStream.Length;
          responseStream.Position = 0;
          Byte [] bStatusDescription = new Byte[responsesize];
          responseStream.Read (bStatusDescription, 0, responsesize) ;

          StatusDescription = Encoding.ASCII.GetString(bStatusDescription,4,responsesize-4);
        }
        else
        {
          // something went wrong here
          throw new ProtocolViolationException ();
        }

        resp_desc.Status = StatusCode;
        resp_desc.StatusDescription = StatusDescription;

        return resp_desc;
    }
Пример #7
0
    internal string ComposeExceptionMessage(ResponseDescription resp_desc, string log)
    {
        StringBuilder sb = new StringBuilder();

        sb.Append("FTP Protocol Error.....\n");
        sb.Append("Status: " + resp_desc.Status + "\n");
        sb.Append("Description: " + resp_desc.StatusDescription + "\n");
        sb.Append("\n");

        sb.Append("--------------------------------\n");
        sb.Append(log);
        sb.Append("\n");

        return sb.ToString();
    }
Пример #8
0
            // 接收FTP命令响应
            private ResponseDescription ReceiveCommandResponse()
            {
                ResponseDescription resp_desc = new ResponseDescription();
                MemoryStream responseStream = null;
                String StatusDescription = null;
                String szResponse = null;
                int StatusCode = 0;
                bool bCompleteResponse = false;

                if (m_ControlSocket == null)
                    throw new System.ApplicationException("Error: Control Connection is not opened!");

                // 接收响应数据
                try
                {
                    int BufferSize = BUFFER_SIZE;
                    int bytesread = 0;
                    Byte[] recvbuffer = new Byte[BufferSize];

                    responseStream = new MemoryStream();
                    while (true)
                    {
                        memset(ref recvbuffer, 0, BufferSize);

                        // 接收完本次控制连接响应数据(在接收超时范围内,可能收到下一命令的响应?)
                        bytesread = m_ControlSocket.Receive(recvbuffer, BufferSize, 0);
                        if (bytesread <= 0)
                            break;
                        responseStream.Write(recvbuffer, 0, bytesread);

                        // 记录操作日志
                        szResponse = Encoding.ASCII.GetString(recvbuffer, 0, bytesread);
                        m_sbControlSocketLog.Append(szResponse);

                        // 控制响应接收完毕?
                        bCompleteResponse = IsCompleteResponse(responseStream);
                        if (bCompleteResponse)
                            break;
                    }
                }
                catch (Exception e)
                {
                    SafeRelease(ref responseStream);
                    throw e;
                }

                // 获取控制响应的响应码、响应描述
                try
                {
                    if (bCompleteResponse)
                    {
                        // 获取全部的控制响应结果
                        int responsesize = (int)responseStream.Length;
                        responseStream.Position = 0;
                        Byte[] bStatusDescription = new Byte[responsesize];
                        memset(ref bStatusDescription, 0, responsesize);

                        responsesize = responseStream.Read(bStatusDescription, 0, responsesize);
                        StatusDescription = Encoding.ASCII.GetString(bStatusDescription, 0, responsesize);

                        // 获取响应码
                        String szStatusCode = StatusDescription.Substring(0, 3);
                        StatusCode = Convert.ToInt16(szStatusCode);

                        // 获取响应描述
                        StatusDescription = StatusDescription.Substring(4, StatusDescription.Length - 4);
                    }
                    else
                        throw new System.Net.ProtocolViolationException();
                }
                catch (Exception e)
                {
                    SafeRelease(ref responseStream);
                    throw e;
                }

                // 关闭控制响应流
                SafeRelease(ref responseStream);

                resp_desc.StatusDescription = StatusDescription;
                resp_desc.Status = StatusCode;
                return resp_desc;
            }