在MVC 6中从DB渲染视图

Ser*_*giy 6 asp.net-mvc razor asp.net-core-mvc

我们正在开发ASP.NET MVC 6项目,并且有必要从文件系统源以外的地方呈现Razor视图(特别是Azure Blob存储,但这并不重要).之前(在MVC 5中)可以创建和注册自定义VirtualPathProvider,它可以从DB或资源DLL中获取视图内容(例如).

似乎MVC 6中的方法已经改变了.有人知道在哪里寻找吗?

UPD:这是我正在寻找的代码示例:

   public IActionResult Index()
    {

        ViewBag.Test = "Hello world!!!";
        string htmlContent = "<html><head><title>Test page</title><body>@ViewBag.Test</body></html>";

        return GetViewFromString(htmlContent);
    }
Run Code Online (Sandbox Code Playgroud)

问题是:如何实现该GetViewFromString功能?

Bar*_*xto 2

您需要配置一个ViewLocationExpander:

services.SetupOptions<RazorViewEngineOptions>(options =>
{
    var expander = new LanguageViewLocationExpander(
        context => context.HttpContext.Request.Query["language"]);
    options.ViewLocationExpanders.Insert(0, expander);
});
Run Code Online (Sandbox Code Playgroud)

这是 LanguageViewLocationExpander 的实现: https://github.com/aspnet/Mvc/blob/ad8ab4b8fdb27494f5dece6f1186acea03f9dd52/test/WebSites/RazorWebSite/Services/LanguageViewLocationExpander.cs

以此AzureBlobLocationExpander为基础应该会让你走上正轨。