Ejemplo n.º 1
0
        public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
        {
            if (context.Result is ViewResult viewResult /* && viewResult.ViewData.Model == null */)
            {
                // view
                var compositionResult = await CompositionHandler.HandleGetRequest(context.HttpContext, viewResult.Model);

                if (compositionResult.StatusCode == StatusCodes.Status200OK)
                {
                    viewResult.ViewData.Model = compositionResult.ViewModel;
                }
            }
            else if (context.Result is ObjectResult objectResult /* && objectResult.Value == null */)
            {
                // no view
                var compositionResult = await CompositionHandler.HandleGetRequest(context.HttpContext, objectResult.Value);

                if (compositionResult.StatusCode == StatusCodes.Status200OK)
                {
                    objectResult.Value = compositionResult.ViewModel;
                }
            }

            await next();
        }
Ejemplo n.º 2
0
        public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
        {
            (var viewModel, var statusCode) = await CompositionHandler.HandleRequest(context.HttpContext);

            var routeData = context.HttpContext.GetRouteData();
            var request   = context.HttpContext.Request;

            //matching handlers could be cached by URL
            //per route only 1 result handler is allowed, the owning one
            var handler = resultHandlers
                          .Where(a => a.Matches(routeData, request.Method, request))
                          .SingleOrDefault();

            if (handler != null)
            {
                await handler.Handle(context, viewModel, statusCode);
            }
            else
            {
                defaultHandler();
            }

            await next();

            void defaultHandler()
            {
                if (context.Result is ViewResult viewResult && viewResult.ViewData.Model == null)
                {
                    //MVC
                    if (statusCode == StatusCodes.Status200OK)
                    {
                        viewResult.ViewData.Model = viewModel;
                    }
                }
Ejemplo n.º 3
0
        public static async Task HandleRequest(HttpContext context)
        {
            var requestId = context.Request.Headers.GetComposedRequestIdHeaderOr(() =>
            {
                var id = Guid.NewGuid().ToString();
                context.Request.Headers.AddComposedRequestIdHeader(id);
                return(id);
            });

            var(viewModel, statusCode) = await CompositionHandler.HandleRequest(requestId, context);

            context.Response.Headers.AddComposedRequestIdHeader(requestId);

            //to avoid a breaking change we cannot change the tuple returned by CompositionHandler.HandleRequest
            //so the only option here is to check if the viewModel is null. View model is null only when there are
            //no handlers registered for the route, so it's for sure an HTTP404
            if (viewModel != null)
            {
                string json = JsonConvert.SerializeObject(viewModel, GetSettings(context));
                context.Response.ContentType = "application/json; charset=utf-8";
                await context.Response.WriteAsync(json);
            }
            else
            {
                await context.Response.WriteAsync(string.Empty);
            }
        }
Ejemplo n.º 4
0
        protected override void Act()
        {
            //setup
            var section = MainSource.GetSection(SectionInChildSource1);

            CompositionHandler.Dispose();
        }
Ejemplo n.º 5
0
        public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
        {
            if (context.Result is ViewResult viewResult && viewResult.ViewData.Model == null)
            {
                // view
                var compositionResult = await CompositionHandler.HandleGetRequest(context.HttpContext);

                if (compositionResult.StatusCode == StatusCodes.Status200OK)
                {
                    viewResult.ViewData.Model = compositionResult.ViewModel;
                }
            }
Ejemplo n.º 6
0
        public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
        {
            (var viewModel, var statusCode) = await CompositionHandler.HandleRequest(context.HttpContext);

            DefaultHandler();

            await next();

            void DefaultHandler()
            {
                if (context.Result is ViewResult viewResult && viewResult.ViewData.Model == null)
                {
                    //MVC
                    if (statusCode == StatusCodes.Status200OK)
                    {
                        viewResult.ViewData.Model = viewModel;
                    }
                }
        static async Task HandleRequest(HttpContext context)
        {
            var requestId = context.Request.Headers.GetComposedRequestIdHeaderOr(() => Guid.NewGuid().ToString());

            var(viewModel, statusCode) = await CompositionHandler.HandleRequest(requestId, context);

            context.Response.Headers.AddComposedRequestIdHeader(requestId);

            if (statusCode == StatusCodes.Status200OK)
            {
                string json = JsonConvert.SerializeObject(viewModel, GetSettings(context));
                context.Response.ContentType = "application/json; charset=utf-8";
                await context.Response.WriteAsync(json);
            }
            else
            {
                context.Response.StatusCode = statusCode;
            }
        }