【问题标题】:Routing for Single Page Application in ASP.NET CoreASP.NET Core 中单页应用程序的路由
【发布时间】:2017-01-01 02:10:42
【问题描述】:

我有一个用 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 中做到这一点?我一直在阅读文档,但我看不到如何在不添加控制器类、视图文件夹和其他 rigmarole 的情况下呈现 .cshtml 文件。

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

【问题讨论】:

标签: asp.net asp.net-core asp.net-mvc-routing asp.net-core-mvc


【解决方案1】:

目前在 ASP.NET Core 中以“正常方式”运行 CSHTML 页面需要使用 ASP.NET Core MVC。

但是,有一个计划中的功能正在开发中,它有点类似于 ASP.NET(非核心)网页,您可以在其中拥有独立的 CSHTML 文件。此处正在跟踪该功能:https://github.com/aspnet/Mvc/issues/494(至于新功能的命名,正在此处跟踪:https://github.com/aspnet/Mvc/issues/5208)。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 2016-10-22
    • 2017-03-06
    • 2015-12-08
    • 2019-06-27
    • 2021-02-02
    • 2018-05-16
    相关资源
    最近更新 更多