在 ASP.NET Core SPA 应用中配置 public 路由

Configuring public route in ASP.NET Core SPA app

我使用内置的 React/Redux 模板创建了一个 ASP.NET Core 2.1 SPA 应用程序,它可以很好地配置所有内容。

我的应用程序需要身份验证,因为它是 SPA app,我想使我的身份验证选项非常简单,所以我只配置了 jwt 身份验证和 MSAL 来处理 [=14] =] 代币.

但是,我想为 public/non-authenticated 用户提供一个简单的静态 HTML 页面。所以我的问题是如何为匿名用户创建这条路由并确保他们被重定向到它?

项目结构如下所示,这正是我在 VS 为我创建 React 应用程序时开箱即用的内容:

我在 Startup.cs 中看到的唯一路由以及 SPA 相关配置是:

app.UseStaticFiles();
app.UseSpaStaticFiles();

app.UseMvc(routes =>
{
    routes.MapRoute(
       name: "default",
       template: "{controller}/{action=Index}/{id?}");
});

app.UseSpa(spa =>
{
    spa.Options.SourcePath = "ClientApp";

    if (env.IsDevelopment())
    {
        spa.UseReactDevelopmentServer(npmScript: "start");
    }
});

所以,简而言之,我如何为我想为匿名用户创建的静态页面创建路由,并确保我的用户在没有使用 jwt令牌?

However, I'd like to have a simple static HTML page for public/non-authenticated users.

您正在做一个单页应用程序,因此 SPA 是您的用户首先点击的(按设计)并且只有客户端应用程序能够确定用户是否登录。

因此,如果您想将人们重定向到静态页面,那么这样做将是 SPA 的责任。因此,如果您的 JavaScript 中的简单设置 window.location 应该可以很好地重定向未登录的用户。

但实际上留在 SPA 内可能更有意义。毕竟,您也可以在那里向未经授权的用户显示一个单独的页面。而且您还应该考虑您需要有一种方法来允许用户实际进行身份验证!由于身份验证纯粹是客户端的,因此这很可能必须在您的 SPA 中发生。所以我不认为你想将人们重定向离开它,阻止他们登录。

也就是说,如果这确实是您想要的静态页面,那么您可以将其放入 ASP.NET 核心应用程序的 wwwroot 文件夹中。那里的文件直接提供。您也可以使用普通的 MVC 或 Razor 页面来动态呈现页面,但由于您没有在 SPA 模板中默认设置任何内容,您可能不想只为静态页面执行所有这些操作。