예제 #1
0
        private async Task InvokeHandlerMethodAsync()
        {
            var handler = _handler;

            if (_handler != null)
            {
                var arguments = PrepareArguments(_arguments, handler);

                PageHandlerExecutorDelegate executor = null;
                for (var i = 0; i < _actionDescriptor.HandlerMethods.Count; i++)
                {
                    if (object.ReferenceEquals(handler, _actionDescriptor.HandlerMethods[i]))
                    {
                        executor = CacheEntry.HandlerExecutors[i];
                        break;
                    }
                }

                Debug.Assert(executor != null, "We should always find a executor for a handler");

                _diagnosticListener.BeforeHandlerMethod(_pageContext, handler, _arguments, _instance);
                _logger.ExecutingHandlerMethod(_pageContext, handler, arguments);

                try
                {
                    _result = await executor(_instance, arguments);

                    _logger.ExecutedHandlerMethod(_pageContext, handler, _result);
                }
                finally
                {
                    _diagnosticListener.AfterHandlerMethod(_pageContext, handler, _arguments, _instance, _result);
                }
            }

            // Pages have an implicit 'return Page()' even without a handler method.
            if (_result == null)
            {
                _logger.ExecutingImplicitHandlerMethod(_pageContext);
                _result = new PageResult();
                _logger.ExecutedImplicitHandlerMethod(_result);
            }

            // Ensure ViewData is set on PageResult for backwards compatibility (For example, Identity UI accesses
            // ViewData in a PageFilter's PageHandlerExecutedMethod)
            if (_result is PageResult pageResult)
            {
                pageResult.ViewData = pageResult.ViewData ?? _pageContext.ViewData;
            }
        }
예제 #2
0
        private static PageHandlerExecutorDelegate[] GetHandlerExecutors(CompiledPageActionDescriptor actionDescriptor)
        {
            if (actionDescriptor.HandlerMethods == null || actionDescriptor.HandlerMethods.Count == 0)
            {
                return(Array.Empty <PageHandlerExecutorDelegate>());
            }

            var results = new PageHandlerExecutorDelegate[actionDescriptor.HandlerMethods.Count];

            for (var i = 0; i < actionDescriptor.HandlerMethods.Count; i++)
            {
                results[i] = ExecutorFactory.CreateExecutor(actionDescriptor.HandlerMethods[i]);
            }

            return(results);
        }
예제 #3
0
        private async Task InvokeHandlerMethodAsync()
        {
            var handler = _handler;

            if (_handler != null)
            {
                var arguments = PrepareArguments(_arguments, handler);

                PageHandlerExecutorDelegate executor = null;
                for (var i = 0; i < _actionDescriptor.HandlerMethods.Count; i++)
                {
                    if (object.ReferenceEquals(handler, _actionDescriptor.HandlerMethods[i]))
                    {
                        executor = CacheEntry.HandlerExecutors[i];
                        break;
                    }
                }

                Debug.Assert(executor != null, "We should always find a executor for a handler");

                _diagnosticSource.BeforeHandlerMethod(_pageContext, handler, _arguments, _instance);
                _logger.ExecutingHandlerMethod(_pageContext, handler, arguments);

                try
                {
                    _result = await executor(_instance, arguments);

                    _logger.ExecutedHandlerMethod(_pageContext, handler, _result);
                }
                finally
                {
                    _diagnosticSource.AfterHandlerMethod(_pageContext, handler, _arguments, _instance, _result);
                }
            }

            // Pages have an implicit 'return Page()' even without a handler method.
            if (_result == null)
            {
                _result = new PageResult();
            }
        }
예제 #4
0
        private async Task InvokeHandlerMethodAsync()
        {
            var handler = _handler;

            if (_handler != null)
            {
                var arguments = PrepareArguments(_arguments, handler);

                PageHandlerExecutorDelegate executor = null;
                for (var i = 0; i < _actionDescriptor.HandlerMethods.Count; i++)
                {
                    if (object.ReferenceEquals(handler, _actionDescriptor.HandlerMethods[i]))
                    {
                        executor = CacheEntry.HandlerExecutors[i];
                        break;
                    }
                }

                Debug.Assert(executor != null, "We should always find a executor for a handler");

                _diagnosticSource.BeforeHandlerMethod(_pageContext, handler, _arguments, _instance);
                _logger.ExecutingHandlerMethod(_pageContext, handler, arguments);

                try
                {
                    _result = await executor(_instance, arguments);

                    _logger.ExecutedHandlerMethod(_pageContext, handler, _result);
                }
                finally
                {
                    _diagnosticSource.AfterHandlerMethod(_pageContext, handler, _arguments, _instance, _result);
                }
            }

            // Pages have an implicit 'return Page()' even without a handler method.
            if (_result == null)
            {
                _result = new PageResult();
            }

            // We also have some special initialization we need to do for PageResult.
            if (_result is PageResult pageResult)
            {
                // If we used a PageModel then the Page isn't initialized yet.
                if (_viewContext == null)
                {
                    _viewContext = new ViewContext(
                        _pageContext,
                        NullView.Instance,
                        _pageContext.ViewData,
                        _tempDataFactory.GetTempData(_pageContext.HttpContext),
                        TextWriter.Null,
                        _htmlHelperOptions);
                    _viewContext.ExecutingFilePath = _pageContext.ActionDescriptor.RelativePath;
                }

                if (_page == null)
                {
                    _page = (PageBase)CacheEntry.PageFactory(_pageContext, _viewContext);
                }

                pageResult.Page     = _page;
                pageResult.ViewData = pageResult.ViewData ?? _pageContext.ViewData;
            }
        }