zoukankan      html  css  js  c++  java
  • ASP.NET Core中间件中渲染Razor视图

    在中间件中执行完MVC的处理之后检查返回状态,如果是错误状态就直接渲染视图并输出

    实现方式就是在Configure中注入ICompositeViewEngine实例,构造视图上下文,再渲染视图为字符串,最后输出。

            public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory, ICompositeViewEngine engine)
            {
                app.Use(async (context, next) =>
                {
                    //因为只是在请求最后处理,所以这里直接就运行下一个中间件
                    await next();
                    //返回后检查是否出现错误的状态
                    if (context.Response.StatusCode >= 400)
                    {
    
                        var viewResult = engine.GetView("~/", "~/Views/Home/Privacy.cshtml", true);
                        if (viewResult.Success)
                        {
                            //创建临时的StringWriter实例,用来配置到视图上下文中
                            using (var output = new StringWriter())
                            {
                                //视图上下文对于视图渲染来说很重要,视图中的前后台交互都需要它
                                var viewContext = new ViewContext()
                                {
                                    HttpContext = context,
                                    Writer = output,
                                    RouteData = new Microsoft.AspNetCore.Routing.RouteData()
                                    {
                                        //RouteData在这里传入视图,这样视图可以显示错误信息之类的数据
                                    },
                                    View = viewResult.View,
                                    FormContext = new FormContext(),
                                    ActionDescriptor = new Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor()
                                };
                                //渲染
                                await viewResult.View.RenderAsync(viewContext);
    
                                //输出到响应体
                                await context.Response.WriteAsync(output.ToString());
                            }
                        }
    
                    }
                });
  • 相关阅读:
    hive同环比实现
    hive中的to_date和to_char
    正则表达式匹配一个独立的字符
    Mysql Explain用法详解
    hadoop安装踩坑
    hadoop ssh localhost无密码登录
    Node.js第十二篇:图片随机验证码
    Node.js第十一篇:Koa框架基础
    Ajax第五篇:JQuery中使用Ajax
    Ajax第四篇:跨域JSONP、CORS
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/12716706.html
Copyright © 2011-2022 走看看