Пример #1
0
        private async Task ExecuteHandlerMethod(MethodInfo handlerMethodInfo, IMessageController controller, OwinContext context)
        {
            var properties = PropertieBuilder.Build(handlerMethodInfo, context, out bool error);

            if (error == true)
            {
                return;
            }

            var           obj          = handlerMethodInfo.Invoke(controller, properties.Values.ToArray());
            IActionResult actionResult = null;

            if (obj is Task <IActionResult> actionTask)
            {
                actionResult = await actionTask;
            }
            else if (obj is IActionResult)
            {
                actionResult = obj as IActionResult;
            }

            var actionContext = new ActionContext(context, new ActionDescriptor()
            {
            }, properties, controller);
            await actionResult.ExecuteResultAsync(actionContext);
        }
        public async Task Invoke(HttpContext context, WebScriptHostManager manager)
        {
            // flow required context through the request pipeline
            // downstream middleware and filters rely on this
            context.Items[ScriptConstants.AzureFunctionsHostManagerKey] = manager;
            SetRequestId(context.Request);

            if (_next != null)
            {
                await _next(context);
            }

            IFunctionExecutionFeature functionExecution = context.Features.Get <IFunctionExecutionFeature>();

            if (functionExecution != null && !context.Response.HasStarted)
            {
                int           nestedProxiesCount = GetNestedProxiesCount(context, functionExecution);
                IActionResult result             = await GetResultAsync(context, functionExecution);

                if (nestedProxiesCount > 0)
                {
                    // if Proxy, the rest of the pipleline will be processed by Proxies in
                    // case there are response overrides and what not.
                    SetProxyResult(context, nestedProxiesCount, result);
                    return;
                }

                var actionContext = new ActionContext
                {
                    HttpContext = context
                };

                await result.ExecuteResultAsync(actionContext);
            }
        }
Пример #3
0
        private async Task WriteResultAsync(HttpContext context, IActionResult result)
        {
            var routeData     = context.GetRouteData() ?? new RouteData();
            var actionContext = new ActionContext(context, routeData, new ActionDescriptor());

            await result.ExecuteResultAsync(actionContext);
        }
        /// <summary>
        /// Configures the function host, adding a catch-all route that then hands off to Menes to process the request.
        /// </summary>
        /// <param name="app">The <see cref="IApplicationBuilder"/> to configure.</param>
        public void Configure(IApplicationBuilder app)
        {
            var openApiRouteHandler = new RouteHandler(
                async context =>
            {
                try
                {
                    IOpenApiHost <HttpRequest, IActionResult> handler = context.RequestServices.GetRequiredService <IOpenApiHost <HttpRequest, IActionResult> >();
                    IActionResult result = await handler.HandleRequestAsync(context.Request.Path, context.Request.Method, context.Request, context).ConfigureAwait(false);
                    var actionContext    = new ActionContext(context, context.GetRouteData(), new ActionDescriptor());
                    await result.ExecuteResultAsync(actionContext).ConfigureAwait(false);
                }
                catch (Exception ex)
                {
                    Assert.Fail(ex.ToString());
                }
            });

            var routeBuilder = new RouteBuilder(app, openApiRouteHandler);

            routeBuilder.MapRoute("CatchAll", "{*path}");
            IRouter router = routeBuilder.Build();

            app.UseRouter(router);
        }
        public async Task Invoke(HttpContext context)
        {
            if (_next != null)
            {
                await _next(context);
            }

            var functionExecution = context.Features.Get <IFunctionExecutionFeature>();

            if (functionExecution != null && !context.Response.HasStarted)
            {
                int           nestedProxiesCount = GetNestedProxiesCount(context, functionExecution);
                IActionResult result             = await GetResultAsync(context, functionExecution);

                if (nestedProxiesCount > 0)
                {
                    // if Proxy, the rest of the pipleline will be processed by Proxies in
                    // case there are response overrides and what not.
                    SetProxyResult(context, nestedProxiesCount, result);
                    return;
                }

                ActionContext actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor());
                await result.ExecuteResultAsync(actionContext);
            }
        }
        public async Task Invoke(HttpContext context)
        {
            nowTime = DateTime.Now;

            //check
            var result = await CheckAsync(context);

            if (result.result)
            {
                //在Request的header中存放状态标记
                context.Request.Headers[Common.HeaderStatusKey] = "1";

                await _next.Invoke(context);

                //因为考虑到性能问题,全局valve暂时去掉RateValve的添加
                //var status = context.GetHeaderValue(Common.HeaderStatusKey);
                //if ("1".Equals(status))
                //{
                //    //保存
                //    await SaveAsync(context);
                //}
            }
            else
            {
                context.Request.Headers[Common.HeaderStatusKey] = "0";
                IActionResult actionResult = _options.onIntercepted(context, result.valve, IntercepteWhere.Middleware);
                ActionContext c            = new ActionContext(httpContext: context, routeData: new RouteData(), actionDescriptor: new ActionDescriptor());
                await actionResult.ExecuteResultAsync(c);
            }
        }
Пример #7
0
        /// <inheritdoc/>
        public virtual Task ExecuteResultAsync(ActionContext context)
        {
            HttpRequest   request = context.HttpContext.Request;
            IActionResult result  = GetInnerActionResult(request);

            return(result.ExecuteResultAsync(context));
        }
        public async Task Invoke(HttpContext context)
        {
            // TODO: DI Need to make sure downstream services are getting what they need
            // that includes proxies.
            //if (scriptHost != null)
            //{
            //    // flow required context through the request pipeline
            //    // downstream middleware and filters rely on this
            //    context.Items[ScriptConstants.AzureFunctionsHostKey] = scriptHost;
            //}

            if (_next != null)
            {
                await _next(context);
            }

            IFunctionExecutionFeature functionExecution = context.Features.Get <IFunctionExecutionFeature>();

            if (functionExecution != null && !context.Response.HasStarted())
            {
                int           nestedProxiesCount = GetNestedProxiesCount(context, functionExecution);
                IActionResult result             = await GetResultAsync(context, functionExecution);

                if (nestedProxiesCount > 0)
                {
                    // if Proxy, the rest of the pipleline will be processed by Proxies in
                    // case there are response overrides and what not.
                    SetProxyResult(context, nestedProxiesCount, result);
                    return;
                }

                ActionContext actionContext = new ActionContext(context, new RouteData(), new ActionDescriptor());
                await result.ExecuteResultAsync(actionContext);
            }
        }
Пример #9
0
        public async Task ExecuteResultAsync(ActionContext context)
        {
            var wrappedStream = context.HttpContext.Response.Body;

            using (var stream = new MemoryStream())
            {
                context.HttpContext.Response.Body = stream;
                string html = null;

                try
                {
                    await _wrappedActionResult.ExecuteResultAsync(context);

                    stream.Seek(0, SeekOrigin.Begin);
                    html = Encoding.UTF8.GetString(stream.ToArray()).Trim();
                }
                finally
                {
                    context.HttpContext.Response.Body = wrappedStream;
                }

                // Check for not XML
                if (IsHtmlContent(context, html))
                {
                    html = await AddCofoundryDependenciesAsync(html, context);
                }

                using (var outputStream = new StreamWriter(wrappedStream, Encoding.UTF8))
                {
                    await outputStream.WriteAsync(html);
                }
            }
        }
 /// <summary>
 /// Execute this IActionResult
 /// </summary>
 /// <param name="context"><see cref="ActionContext"/></param>
 /// <returns><see cref="Task"/></returns>
 public async Task ExecuteResultAsync(ActionContext context)
 {
     if (_result == null)
     {
         _result = CreateError();
     }
     await _result.ExecuteResultAsync(context);
 }
Пример #11
0
        public async Task ExecuteResultAsync(ActionContext context)
        {
            var alertProvider = context.HttpContext.RequestServices.GetRequiredService <IJavaScriptAlertProvider>();

            alertProvider.AddAlert(_alert);

            await _result.ExecuteResultAsync(context);
        }
Пример #12
0
        /// <inheritdoc/>
        public async virtual Task ExecuteResultAsync(ActionContext context)
        {
            HttpResponse  response = context.HttpContext.Response;
            HttpRequest   request  = context.HttpContext.Request;
            IActionResult result   = GetInnerActionResult(request);
            await result.ExecuteResultAsync(context);

            ResultHelpers.AddServiceVersion(response, () => ODataUtils.ODataVersionToString(ResultHelpers.GetODataResponseVersion(request)));
        }
        public Task ExecuteResultAsync(ActionContext context)
        {
            var factory  = context.HttpContext.RequestServices.GetService <ITempDataDictionaryFactory>();
            var tempData = factory.GetTempData(context.HttpContext);

            tempData["ClasseAlert"] = _classeAlert;
            tempData["Message"]     = _message;

            return(_actionResult.ExecuteResultAsync(context));
        }
Пример #14
0
        public async Task ExecuteResultAsync(ActionContext context)
        {
            await _internalResult.ExecuteResultAsync(context);

            var alerts = new List <ApplicationAlert>();

            alerts.Add(new ApplicationAlert(_type, _message));

            context.HttpContext.SetAlerts(alerts);
        }
Пример #15
0
        public async Task ExecuteResultAsync(ActionContext context)
        {
            var factory  = context.HttpContext.RequestServices.GetRequiredService <ITempDataDictionaryFactory>();
            var tempData = factory.GetTempData(context.HttpContext);

            tempData["alert-title"]   = _title;
            tempData["alert-type"]    = _type;
            tempData["alert-message"] = _body;
            await _result.ExecuteResultAsync(context);
        }
Пример #16
0
        public override Task ExecuteResultAsync(ActionContext context)
        {
            var tempDataFactory = context.HttpContext.RequestServices.GetRequiredService <ITempDataDictionaryFactory>();
            var tempData        = tempDataFactory.GetTempData(context.HttpContext);

            tempData["alert-title"] = _title;
            tempData["alert-type"]  = _type;
            tempData["alert-body"]  = _body;
            return(_result.ExecuteResultAsync(context));
        }
        public static HttpStatusCode ExecuteResult(IActionResult result)
        {
            var actionContext = MockRepository.GenerateStub <ActionContext>();

            actionContext.HttpContext = new DefaultHttpContext();

            result.ExecuteResultAsync(actionContext);
            var statusCode = actionContext.HttpContext.Response.StatusCode;

            return((HttpStatusCode)statusCode);
        }
        public async Task ExecuteResultAsync(ActionContext context)
        {
            var factory  = context.HttpContext.RequestServices.GetService <ITempDataDictionaryFactory>();
            var tempData = factory.GetTempData(context.HttpContext);

            tempData["_alert.type"]  = Type;
            tempData["_alert.title"] = Title;
            tempData["_alert.body"]  = Body;

            await actionResult.ExecuteResultAsync(context);
        }
            public Task ExecuteResultAsync(ActionContext context)
            {
                var headers = context.HttpContext.Response?.Headers;

                if (headers != null && !headers.ContainsKey(Allow))
                {
                    headers.Add(Allow, new StringValues(allowedMethods));
                }

                return(inner.ExecuteResultAsync(context));
            }
Пример #20
0
        private async Task InvokeResultAsync(IActionResult result)
        {
            _diagnosticSource.BeforeActionResult(Context, result);

            try
            {
                await result.ExecuteResultAsync(Context);
            }
            finally
            {
                _diagnosticSource.AfterActionResult(Context, result);
            }
        }
Пример #21
0
        public override async Task ExecuteResultAsync(ActionContext context)
        {
            ViewDataDictionary viewData = _actionResult
                                          .GetType()
                                          .GetProperty("ViewData")
                                          .GetValue(_actionResult) as ViewDataDictionary;

            if (viewData != null)
            {
                viewData["Title"] = _modalTitle;
            }
            await _actionResult.ExecuteResultAsync(context);
        }
Пример #22
0
        public async Task ExecuteResultAsync(ActionContext context)
        {
            try
            {
                context.HttpContext.Response.Headers["Cache-Control"] = new StringValues($"public, max-age={(int)Duration.TotalSeconds}");
            }
            catch (Exception ex)
            {
                var test = ex.ToString();
                throw;
            }

            await _innerActionResult.ExecuteResultAsync(context);
        }
Пример #23
0
        /// <inheritdoc/>
        public async virtual Task ExecuteResultAsync(ActionContext context)
        {
            HttpRequest   request  = context.HttpContext.Request;
            HttpResponse  response = context.HttpContext.Response;
            IActionResult result   = GetInnerActionResult(request);

            response.Headers["Location"] = GenerateLocationHeader(request).ToString();

            // Since AddEntityId relies on the response, make sure to execute the result
            // before calling AddEntityId() to ensure the response code is set correctly.
            await result.ExecuteResultAsync(context);

            ResultHelpers.AddEntityId(response, () => GenerateEntityId(request));
        }
Пример #24
0
        /// <inheritdoc/>
        public async override Task ExecuteResultAsync(ActionContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            HttpResponse  response = context.HttpContext.Response;
            HttpRequest   request  = context.HttpContext.Request;
            IActionResult result   = GetInnerActionResult(request);
            await result.ExecuteResultAsync(context).ConfigureAwait(false);

            ResultHelpers.AddServiceVersion(response, () => ODataUtils.ODataVersionToString(request.GetODataVersion()));
        }
Пример #25
0
        public static async Task WritesToBody(string expected, IActionResult actionResult)
        {
            var stream  = new MemoryStream();
            var context = new ActionContextStub();

            context.HttpContext.Response.Body = stream;

            await actionResult.ExecuteResultAsync(context);

            var actual = Encoding.UTF8.GetString(stream.ToArray());

            Console.WriteLine(actual);

            Assert.AreEqual(expected, actual);
        }
Пример #26
0
        /// <inheritdoc/>
        public async virtual Task ExecuteResultAsync(ActionContext context)
        {
            HttpRequest   request  = context.HttpContext.Request;
            HttpResponse  response = context.HttpContext.Response;
            IActionResult result   = GetInnerActionResult(request);
            Uri           location = GenerateLocationHeader(request);

            response.Headers["Location"] = location.AbsoluteUri;
            // Since AddEntityId relies on the response, make sure to execute the result
            // before calling AddEntityId() to ensure the response code is set correctly.
            await result.ExecuteResultAsync(context);

            ResultHelpers.AddEntityId(response, () => GenerateEntityId(request));
            ResultHelpers.AddServiceVersion(response, () => ODataUtils.ODataVersionToString(ResultHelpers.GetODataResponseVersion(request)));
        }
Пример #27
0
        protected async Task InvokeResultAsync(IActionResult result)
        {
            var actionContext = _actionContext;

            _diagnosticSource.BeforeActionResult(actionContext, result);

            try
            {
                await result.ExecuteResultAsync(actionContext);
            }
            finally
            {
                _diagnosticSource.AfterActionResult(actionContext, result);
            }
        }
Пример #28
0
        public async Task ExecuteResultAsync(ActionContext context)
        {
            var wrappedStream = context.HttpContext.Response.Body;

            using (var stream = new MemoryStream())
                using (var streamReader = new StreamReader(stream, Encoding.UTF8))
                {
                    context.HttpContext.Response.Body = stream;
                    string html = null;

                    try
                    {
                        await _wrappedActionResult.ExecuteResultAsync(context);

                        stream.Seek(0, SeekOrigin.Begin);
                        {
                            html = (await streamReader.ReadToEndAsync()).Trim();
                        }
                    }
                    finally
                    {
                        context.HttpContext.Response.Body = wrappedStream;
                    }

                    // Check for not XML
                    if (IsHtmlContent(context, html))
                    {
                        var headScript = _visualEditorScriptGenerator.CreateHeadScript();
                        var bodyScript = await _visualEditorScriptGenerator.CreateBodyScriptAsync(context);

                        html = _htmlDocumentScriptInjector.InjectScripts(html, headScript, bodyScript);
                    }

                    var outputStream = new StreamWriter(wrappedStream, Encoding.UTF8, 1024, true);
                    try
                    {
                        await outputStream.WriteAsync(html);

                        await outputStream.FlushAsync();
                    }
                    finally
                    {
                        // The "using" pattern would cause a sync flush which throws an error in NET Core 3.1
                        await outputStream.DisposeAsync();
                    }
                }
        }
Пример #29
0
        public async Task ExecuteResultAsync(ActionContext context)
        {
            var factory  = context.HttpContext.RequestServices.GetService <ITempDataDictionaryFactory>();
            var tempData = factory.GetTempData(context.HttpContext);

            var notifications = tempData.GetNotifications();

            notifications.Add(new Notification
            {
                Type    = _notificationType,
                Message = _notificationMessage
            });

            tempData.SetNotifications(notifications);

            await _innerResult.ExecuteResultAsync(context);
        }
Пример #30
0
        public static Task ExecuteResultAsync(this HttpContext context, IActionResult result)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            if (result == null)
            {
                throw new ArgumentNullException(nameof(result));
            }

            var routeData = context.GetRouteData() ?? EmptyRouteData;

            var actionContext = new ActionContext(context, routeData, EmptyActionDescriptor);

            return(result.ExecuteResultAsync(actionContext));
        }