首页 > 解决方案 > 在 ASP.NET Core SPA 应用程序中配置公共路由

问题描述

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

我的应用程序需要身份验证,因为它是一个SPA app,我想让我的身份验证选项非常简单,所以我只配置了jwt身份验证和MSAL处理jwt令牌。

但是,我想为公共/未经身份验证的用户提供一个简单的静态 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令牌时被重定向到它?

标签: asp.netasp.net-coreasp.net-routingasp.net-spa

解决方案


但是,我想为公共/未经身份验证的用户提供一个简单的静态 HTML 页面。

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

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

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

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


推荐阅读