예제 #1
0
        internal static TProxy CreateProxy <TProxy>(IServiceProvider container) where TProxy : IApiContract
        {
            object proxy = DispatchProxyAsync.Create <TProxy, HttpDispatchProxy>();
            var    proxyContextFilter = container.GetRequiredService <IProxyContextFilter>();
            var    proxyContext       = new ProxyContext(typeof(TProxy));

            var cultureFactory = container.GetService <ICultureFactory>();

            if (cultureFactory != null)
            {
                proxyContext.CultureFactory = cultureFactory.Invoke;
            }

            proxyContextFilter.Invoke(proxyContext);

            var initializer = proxy.GetType().GetMethod(nameof(HttpDispatchProxy.Initialize));

            if (initializer == null)
            {
                throw new ArgumentNullException(nameof(initializer));
            }

            initializer.Invoke(proxy, new[] { proxyContext, (object)container.GetService <IProxyManager>() });
            return((TProxy)proxy);
        }
예제 #2
0
        public static TProxy CreateProxy <TProxy>(IServiceProvider container) where TProxy : IApiContract
        {
            dynamic proxy          = DispatchProxyAsync.Create <TProxy, HttpDispatchProxy>();
            var     contextAcessor = container.GetService <IHttpContextAccessor>();

            if (contextAcessor?.HttpContext == null)
            {
                return(default(TProxy));
            }

            var context = new ProxyContext(typeof(TProxy));

            if (contextAcessor?.HttpContext.Request != null)
            {
                context.ClientIp  = contextAcessor.HttpContext.GetIp();
                context.UserAgent = contextAcessor.HttpContext.Request.GetUserAgent();
                if (contextAcessor.HttpContext.Request.QueryString.HasValue)
                {
                    context.QueryString = contextAcessor.HttpContext.Request.QueryString.Value;
                }
            }

            proxy.Initialize(context, container.GetService <IProxyManager>());
            return(proxy);
        }
예제 #3
0
 public void Invoke(ProxyContext proxyContext)
 {
     proxyContext.ClientIp  = LocalIpAddress;
     proxyContext.UserAgent = NetCoreStackUserAgent;
 }