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; } }
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); }
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(); } }
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; } }