示例#1
0
 public virtual object GetService(Type serviceType)
 {
     if (!_isChildContainer && (typeof(IController).IsAssignableFrom(serviceType) || typeof(IHttpController).IsAssignableFrom(serviceType)))
     {
         return(HttpContextContainer.GetService(serviceType));
     }
     return(_resolver.Resolve(serviceType));
 }
        public async Task Invoke(HttpContext context)
        {
            HttpContextContainer ctxContainer = (HttpContextContainer)context.RequestServices.GetService(typeof(HttpContextContainer));

            ctxContainer.Current         = new HttpContextImpl(context);
            ctxContainer.Current.Message = Guid.NewGuid().ToString();
            await _next.Invoke(context);
        }
 /// <summary>
 /// Consists the context.
 /// </summary>
 /// <typeparam name="TRequest">The type of the request.</typeparam>
 /// <typeparam name="TResponse">The type of the response.</typeparam>
 /// <param name="context">The context.</param>
 /// <param name="settings">The settings.</param>
 internal static void ConsistContext <TRequest, TResponse>(HttpContextContainer <TRequest, TResponse> context, RestApiSettings settings)
 {
     ConsistContext(
         GetValueCompatibly(context, context, HttpConstants.HttpHeader.TOKEN),
         settings,
         context.ClientIpAddress,
         context.UserAgent,
         context.QueryString.Get(HttpConstants.QueryString.Language).SafeToString(context?.GetCookieValue(HttpConstants.QueryString.Language)).SafeToString(context.UserLanguages.SafeFirstOrDefault()).EnsureCultureCode(),
         context.Url,
         HttpExtension.GetBasicAuthentication(context.TryGetRequestHeader(HttpConstants.HttpHeader.Authorization).DecodeBase64()),
         new ApiUniqueIdentifier
     {
         HttpMethod = context.HttpMethod,
         Path       = context.Url.AbsolutePath
     }
         );
 }
 public DummyVisualModelWS(HttpContextContainer contextContainer)
 {
     this._contextContainer = contextContainer;
 }
        /// <summary>
        /// Packages the response.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="data">The data.</param>
        /// <param name="operationParameters">The operation parameters.</param>
        /// <param name="ex">The ex.</param>
        /// <param name="acceptEncoding">The accept encoding.</param>
        /// <param name="noBody">if set to <c>true</c> [no body].</param>
        /// <param name="settings">The settings.</param>
        public static void PackageResponse(HttpContextContainer <TRequest, TResponse> context, object data, RuntimeApiOperationParameters operationParameters = null, BaseException ex = null, string acceptEncoding = null, bool noBody = false, RestApiSettings settings = null)
        {
            if (context != null)
            {
                if (settings == null)
                {
                    settings = RestApiSettingPool.DefaultRestApiSettings;
                }

                var objectToReturn = ex != null ? (settings.OmitExceptionDetail ? ex.ToSimpleExceptionInfo() : ex.ToExceptionInfo()) : data;

                context.SetResponseHeader(HttpConstants.HttpHeader.SERVERNAME, EnvironmentCore.MachineName);
                context.SetResponseHeader(HttpConstants.HttpHeader.TRACEID, ApiTraceContext.TraceId);
                context.SetResponseHeader(HttpConstants.HttpHeader.POWEREDBY, HttpConstants.HttpValues.PoweredByBeyova);
                context.SetResponseHeader(HttpConstants.HttpHeader.BEYOVAAPIVERSION, BeyovaVersion.CommonVesion);

                int httpStatusCode = (int)(ex == null ? (noBody ? HttpStatusCode.NoContent : HttpStatusCode.OK) : ex.Code.ToHttpStatusCode());

                if (ex == null && operationParameters?.EntitySynchronizationMode != null)
                {
                    DateTime?lastModifiedStamp = null;
                    data = operationParameters.EntitySynchronizationMode.RebuildOutputObject(ContextHelper.ApiContext.LastSynchronizedStamp, data, ref httpStatusCode, ref noBody, out lastModifiedStamp);

                    if (lastModifiedStamp.HasValue)
                    {
                        context.SetResponseHeader(operationParameters.EntitySynchronizationMode.LastModifiedKey, lastModifiedStamp.Value.ToFullDateTimeTzString());
                    }
                }

                context.ResponseStatusCode = (HttpStatusCode)httpStatusCode;

                if (!noBody)
                {
                    var    contentType    = HttpConstants.ContentType.Json;
                    var    contentWritten = false;
                    byte[] responseBytes  = null;

                    if (ex == null)
                    {
                        if (!string.IsNullOrWhiteSpace(operationParameters?.ContentType))
                        {
                            contentType = operationParameters.ContentType;

                            if (objectToReturn != null && contentType.StartsWith("application/", StringComparison.OrdinalIgnoreCase) && objectToReturn.GetType() == typeof(byte[]))
                            {
                                responseBytes = (byte[])objectToReturn;
                            }
                        }
                    }

                    if (responseBytes == null)
                    {
                        responseBytes = Framework.DefaultTextEncoding.GetBytes(contentType.Equals(HttpConstants.ContentType.Json, StringComparison.OrdinalIgnoreCase) ? objectToReturn.ToJson(true, JsonConverters) : objectToReturn.SafeToString());
                    }

                    context.SetResponseHeader(HttpConstants.HttpHeader.SERVEREXITTIME, DateTime.UtcNow.ToFullDateTimeTzString());

                    if (settings.EnableContentCompression)
                    {
                        acceptEncoding = acceptEncoding.SafeToString().ToLowerInvariant();

                        if (acceptEncoding.Contains(HttpConstants.HttpValues.GZip))
                        {
                            context.WriteResponseGzipBody(responseBytes, contentType);
                            contentWritten = true;
                        }
                        else if (acceptEncoding.Contains(HttpConstants.HttpValues.Deflate))
                        {
                            context.WriteResponseDeflateBody(responseBytes, contentType);
                            contentWritten = true;
                        }
                    }

                    if (!contentWritten)
                    {
                        //return  as string;
                        context.WriteResponseBody(responseBytes, contentType);
                    }
                }
                else
                {
                    context.SetResponseHeader(HttpConstants.HttpHeader.SERVEREXITTIME, DateTime.UtcNow.ToFullDateTimeTzString());
                }
            }
        }
 public DummyMainWS(HttpContextContainer contextContainer)
 {
     this._contextContainer = contextContainer;
 }
 /// <summary>
 /// Gets the value compatibly.
 /// </summary>
 /// <typeparam name="TRequest">The type of the request.</typeparam>
 /// <typeparam name="TResponse">The type of the response.</typeparam>
 /// <param name="context">The context.</param>
 /// <param name="cookieActions">The cookie actions.</param>
 /// <param name="key">The key.</param>
 /// <returns></returns>
 private static string GetValueCompatibly <TRequest, TResponse>(HttpContextContainer <TRequest, TResponse> context, IHttpRequestCookieActions cookieActions, string key)
 {
     return(!string.IsNullOrWhiteSpace(key) ? (context?.TryGetRequestHeader(key).SafeToString(cookieActions?.GetCookieValue(key))) : null);
 }