Пример #1
0
        public ProxyOperation <T> Proxy <T>(Func <GraphClient> getGraphClient) where T : class
        {
            var proxy = new ProxyOperation <T>(getGraphClient);

            proxy.Register(this);
            return(proxy);
        }
        private static ProxyOperation GenerateProxyOperation(ServiceMethodMetadata metadata)
        {
            if (metadata.MethodInfo.DeclaringType == null)
            {
                return null;
            }

            IProxyMetadata proxyMetadata = ServiceContractTypeRegistry.GetProxyMetadata(metadata.MethodInfo.DeclaringType);

            if (proxyMetadata != null && proxyMetadata.IsHidden(metadata.MethodInfo))
            {
                return null;
            }

            IReadOnlyList<XmlDocMetadata> contractDocumentation;
            XmlDocMetadata methodDocumentation = null;

            var xmlDocFactory = Rest.Configuration.Options.XmlDocFactory;

            if (xmlDocFactory != null && xmlDocFactory.Value.TryGetValue(metadata.MethodInfo.DeclaringType, out contractDocumentation))
            {
                methodDocumentation = contractDocumentation.FirstOrDefault(x => x.Method == metadata.MethodInfo);
            }

            var operation = new ProxyOperation
            {
                ServiceUrl = metadata.ServiceUrl,
                UrlTempate = GetUrlTemplate(metadata, proxyMetadata),
                HttpMethod = metadata.UrlInfo.HttpMethods.First(),
                SupportedHttpMethods = GetSupportedHttpMethods(metadata),
                MetadataUrl = String.Concat("metadata?oid=", metadata.ServiceMethodId),
                ProxyUrl = String.Concat("proxy?oid=", metadata.ServiceMethodId),
                Description = GetDescription(metadata.MethodInfo, proxyMetadata, methodDocumentation),
                LongDescription = GetLongDescription(metadata.MethodInfo, proxyMetadata, methodDocumentation),
                ResultType = metadata.MethodInfo.ReturnType,
                RouteParameters = GetParameters(metadata, proxyMetadata),
                HttpsPort = proxyMetadata != null && proxyMetadata.GetHttps(metadata.MethodInfo) != null ? proxyMetadata.GetHttps(metadata.MethodInfo).Port : 0,
                IsIPFiltered = proxyMetadata != null && proxyMetadata.IsIPFiltered(metadata.MethodInfo),
                DoesNotSupportJson = proxyMetadata != null && !proxyMetadata.HasJsonSupport(metadata.MethodInfo),
                DoesNotSupportXml = proxyMetadata != null && !proxyMetadata.HasXmlSupport(metadata.MethodInfo),
                Credentials = GetCredentials(metadata, proxyMetadata),
                AdditionalHeaders = proxyMetadata != null ? proxyMetadata.GetHeaders(metadata.MethodInfo) : new List<HeaderMetadata>()
            };

            operation.StatusCodes = GetStatusCodes(metadata.MethodInfo, proxyMetadata, operation.HasResource, operation.HasResponse, operation.HttpsPort > 0);
            operation.HasResource = HasResource(metadata, operation.HttpMethod);

            Tuple<ResourceExampleMetadata, ResourceExampleMetadata> resourceExampleTypes = GetResourceExampleTypes(metadata.MethodInfo, proxyMetadata);
            operation.RequestResourceExample = resourceExampleTypes.Item1;
            operation.ResponseResourceExample = resourceExampleTypes.Item2;

            return operation;
        }