asp.net - 在 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
令牌时被重定向到它?
解决方案
但是,我想为公共/未经身份验证的用户提供一个简单的静态 HTML 页面。
您正在做一个单页应用程序,因此 SPA 是您的用户首先会遇到的(按设计),并且只有客户端应用程序能够确定用户是否已登录。
因此,如果您想将人们重定向到静态页面,那么这样做将是 SPA 的责任。window.location
因此,如果用户未登录,JavaScript 中的简单设置应该可以很好地重定向用户。
但实际上留在 SPA 中可能更有意义。毕竟,您也可以在那里向未经授权的用户显示一个单独的页面。而且您还应该考虑您需要有一种方法来允许用户实际进行身份验证!由于身份验证纯粹是客户端的,这很可能必须在您的 SPA 中发生。所以我认为你不想让人们远离它,阻止他们登录。
话虽如此,如果这确实是您想要的静态页面,那么您可以将其放入wwwroot
ASP.NET Core 应用程序的文件夹中。那里的文件直接提供。您也可以使用普通的 MVC 或 Razor 页面来动态呈现页面,但由于您在 SPA 模板中没有默认设置任何内容,您可能不想只为静态页面执行所有这些操作。
推荐阅读
- wordpress - Apache2 - Bitnami - Wordpress - httpd-adpp.conf - URL/URI 重写
- c - 这个 int 到 float 的转换是怎么回事,为什么它不准确?
- bash - 在特定模板中回显文件名
- python - 使用 Enter 按钮导航到下一帧
- python - 我无法在 Windows 上安装 pyaudio?如何解决“错误:需要 Microsoft Visual C++ 14.0。”?
- windows - cacls 命令在拒绝用户对文件夹的权限但授予权限时不会给出访问被拒绝错误。为什么?
- rspec - 如果没有断言,有没有办法让 RSpec 失败?
- c# - C# Timer 检查多线程是否完成失败
- html - 使用 CSS 在图像上绘制圆圈
- django - 在 Django 频道消费者中使用 asyncio.create_subprocess_shell