ASP.NET Core 中单页应用程序的路由

Routing for Single Page Application in ASP.NET Core

我有一个用 JavaScript 编写的单页应用程序,我使用 HTML5 历史记录 API 在客户端处理 URL。这意味着发送到服务器的任何 URL 都应该导致服务器呈现相同的页面。

在 ASP.NET MVC 5 中,我编写了这段代码来执行此操作:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        // ...
        routes.Add(new Route("{*path}", new MyRouteHandler()));
    }
}

public class MyRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return WebPageHttpHandler.CreateFromVirtualPath("~/index.cshtml");
    }
}

这非常有效。无论服务器得到什么 URL,它都会呈现 index.cshtml。请注意,我可以使用 .cshtml 文件(而不是 .html 文件),这意味着我可以使用一些 C# 代码来动态更改包含的 .js 脚本,附加版本号到 .css 文件,等等。更重要的是,我不必实现控制器和视图等来呈现这个 .cshtml 文件。

现在我们来谈谈这个问题:您如何在 ASP.NET Core 中执行此操作?我一直在阅读文档,但我看不出如何在不添加控制器 类、查看文件夹和其他繁琐的情况下呈现 .cshtml 文件。

有人知道 ASP.NET Core 中的等效代码吗?

目前 运行 ASP.NET 中的 CSHTML 页面 "the normal way" Core 需要使用 ASP.NET Core MVC。

但是,有一项计划中的功能正在开发中,它有点类似于 ASP.NET(非核心)网页,您可以在其中拥有独立的 CSHTML 文件。正在此处跟踪该功能:https://github.com/aspnet/Mvc/issues/494 (and as far as naming for the new feature, that is being tracked here: https://github.com/aspnet/Mvc/issues/5208).

还有一个示例说明如何将 MVC 视图呈现为字符串(例如生成电子邮件、报告等),该示例可在此处获取:https://github.com/aspnet/Entropy/tree/dev/samples/Mvc.RenderViewToString 但是要在您描述的场景中使用此示例,您必须进行一些额外的管道连接以将其作为自己的中间件进行连接(而不是 很多 管道;只是一点点!) .

还值得注意的是,在您的场景中,您可能不希望 所有 URL 转到这个视图,因为您仍然需要静态文件中间件 运行 ning首先要处理CSS、JS、图片等静态内容。大概您只是希望所有 other URL 都转到此动态视图。