コード例 #1
0
        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[]>()
            }));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
                }
            }
        }
コード例 #4
0
        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);
                }
            }
        }
コード例 #5
0
        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);
                }
            }
        }