码迷,mamicode.com
首页 > Web开发 > 详细

ASP.NET Core 2.1 中 ViewResultExecutor 的变化

时间:2018-05-19 18:33:06      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:最新   utf-8   return   services   .exe   dep   etc   sts   type   

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

 

ASP.NET Core 2.1 中 ViewResultExecutor 的变化

标签:最新   utf-8   return   services   .exe   dep   etc   sts   type   

原文地址:https://www.cnblogs.com/dudu/p/9060857.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!