zoukankan      html  css  js  c++  java
  • ASP.NET Core 2.1 中 ViewResultExecutor 的变化

    之前在 ASP.NET Core 2.0 中可以正常运行的代码:

    var services = HttpContext.RequestServices;
    var executor = services.GetRequiredService<ViewResultExecutor>();
    var viewEngine = services.GetRequiredService<IRazorViewEngine>();
    var view = viewEngine.GetView(null, "~/Pages/IeAlert.cshtml", true)?.View;
    if (view != null)
    {
        using (view as IDisposable)
        {
            await executor.ExecuteAsync(ControllerContext, view, ViewData, TempData, "text/html; charset=utf-8", 200);
        }
        return new EmptyResult();
    } 

    升级到 ASP.NET Core 2.1 之后出现下面的错误:

    System.InvalidOperationException: No service for type 'Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor' has been registered.
       at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
       at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)

    查看 ViewResultExecutor 的定义发现 ViewResultExecutor 实现了  IActionResultExecutor<ViewResult> 接口,查看最新的 ASP.NET Core MVC 的源代码发现这样的注册:

    services.TryAddSingleton<IActionResultExecutor<ViewResult>, ViewResultExecutor>();

    原来 ViewResultExecutor 也被抽象了,于是改为下面的代码解决了问题:

    var services = HttpContext.RequestServices;
    var executor = services.GetRequiredService<IActionResultExecutor<ViewResult>>() as ViewResultExecutor
        ?? throw new ArgumentNullException("executor");
    var viewEngine = services.GetRequiredService<IRazorViewEngine>();
    var view = viewEngine.GetView(null, "~/Pages/IeAlert.cshtml", true)?.View;
    if (view != null)
    {
        using (view as IDisposable)
        {
            await executor.ExecuteAsync(ControllerContext, view, ViewData, TempData, "text/html; charset=utf-8", 200);
        }
        return new EmptyResult();
    }
  • 相关阅读:
    写代码如坐禅:你是哪一类程序员
    关于鸿蒙的商业讨论
    为什么你总是“把天聊死”?
    生活不易,唯有努力
    如何用一句话激怒一名程序员?
    华为正式开源方舟编译器,开源了,它真的开源了!
    为什么HTTPS比HTTP更安全?
    《管理者必读12篇》购买方法
    程序员都在用的电脑小技巧,看一遍就学会,每天早下班一小时
    一位程序员的一天工作清单:5:30下班,5:30起床
  • 原文地址:https://www.cnblogs.com/dudu/p/9060857.html
Copyright © 2011-2022 走看看