protected ArgumentBindingContext <I> GetContext(byte[] body, string verb = "GET", string contentType = null, string multipartBoundary = null) { var httpVerb = Verb.Parse(verb); var method = typeof(TestController).GetMethod(MethodName); var headers = new HeaderCollection(); if ((body != null) && (body.Length > 0)) { headers.ContentType = (String.IsNullOrEmpty(multipartBoundary) ? (!String.IsNullOrEmpty(contentType) ? contentType : "text/plan") : (!String.IsNullOrEmpty(contentType) ? contentType : "multipart/mixed") + "; boundary=\"" + multipartBoundary + "\""); } var operation = new OperationInfo <Verb>( method, MethodUrl.AsRelative, MethodUrl.ToString(), new Regex(".*"), httpVerb, method.GetParameters().Select(item => new ArgumentInfo(item, new I(), "test={?test}", "test")).ToArray()); return((ArgumentBindingContext <I>) typeof(ArgumentBindingContext <I>) .GetConstructors(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) .First() .Invoke(new object[] { new RequestInfo(httpVerb, RequestUrl, (body != null ? new MemoryStream(body) : new MemoryStream()), new BasicClaimBasedIdentity(), headers), new RequestMapping(new TestController(), operation, MethodUrl), method.GetParameters().FirstOrDefault(item => item.GetCustomAttribute <I>(true) != null) ?? method.GetParameters()[0], 0, new I(), new Dictionary <RequestInfo, RequestInfo[]>() })); }
public MethodUrl MapMethodUrl(MethodInfo methodInfo, IReadOnlyCollection <ServiceMethodParameter> parameters) { var tempalte = _urlTemplateMapper.MapUrlTemplate(methodInfo); var urlParts = tempalte.Split("/", StringSplitOptions.RemoveEmptyEntries); var methodUrl = new MethodUrl(); var excludes = new HashSet <string>(); foreach (var urlPart in urlParts) { var segment = Segment(urlPart, parameters); if (segment != null) { excludes.Add(segment.SourceName); methodUrl.Segments.Add(segment); } } var query = parameters.Where(p => p.PassOver == ParameterPassOver.Query) .SelectMany(AsQuery) .Where(item => !excludes.Contains(item.SourceName)); methodUrl.QueryItems.AddRange(query); return(methodUrl); }
public static async Task <System.IO.Stream> DoGetErrorLog(IodClientSession session, string logId) { const string MethodUrl = "api/v2/activity/errorLog/id?{id}"; const string ContentTypeAccept = "application/json"; const string ContentTypeRequest = "application/json"; using (var client = new HttpClient()) { client.BaseAddress = new Uri(session.serverUrl); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(ContentTypeAccept)); var requestMessage = MakeRequestMessage( session, null, ContentTypeRequest, MethodUrl.Replace("{id}", logId) ); HttpResponseMessage resp = await client.SendAsync(requestMessage); if (resp.IsSuccessStatusCode) { var content = await resp.Content.ReadAsStreamAsync(); return(content); } else { return(null); } } }
public static async Task <IEnumerable <ActivityLogEntry> > DoGetActivityLog(IodClientSession session, string taskId, int rowLimit = 800) { const string MethodUrl = "api/v2/activity/activityLog?taskId={taskId}"; //&rowLimit={rowLimit}"; const string ContentType = "application/json"; // use json both directions using (var client = new HttpClient()) { client.BaseAddress = new Uri(session.serverUrl); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(ContentType)); var requestMessage = MakeRequestMessage( session, null, ContentType, MethodUrl.Replace("{rowLimit}", rowLimit.ToString()).Replace("{taskId}", taskId) ); HttpResponseMessage resp = await client.SendAsync(requestMessage); if (resp.IsSuccessStatusCode) { string content = await resp.Content.ReadAsStringAsync(); var contentObject = JsonConvert.DeserializeObject <List <ActivityLogEntry> >(content); return(contentObject); } else { throw new HttpResponseException(resp); } } }
public static async Task <string> DoGetTaskId(IodClientSession session, string taskName, string taskType) { const string MethodUrl = "api/v2/task?type={type}"; const string ContentType = "application/json"; // use json both directions using (var client = new HttpClient()) { client.BaseAddress = new Uri(session.serverUrl); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(ContentType)); var requestMessage = MakeRequestMessage(session, null, ContentType, MethodUrl.Replace("{type}", taskType)); HttpResponseMessage resp = await client.SendAsync(requestMessage); if (resp.IsSuccessStatusCode) { // successful request returns a list of Task as Json string content = await resp.Content.ReadAsStringAsync(); var contentObject = JsonConvert.DeserializeObject <List <Task> >(content); var theTask = contentObject .Where(task => task.name.Equals(taskName, StringComparison.InvariantCultureIgnoreCase)) .FirstOrDefault(); if (theTask == null) { throw new ApplicationException($"task: {taskName} of type: {taskType} was not found"); } return(theTask.id); } else { throw new HttpResponseException(resp); } } }