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); }
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); }
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); }
public static void SetResponseDescription(this ApiDescription apiDescription, ResponseDescription responseDescription) { var property = GetPropertyFrom(apiDescription); SetPropertyTo(apiDescription, responseDescription, property); }
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; }
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(); }
// 接收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; }