在ASP.NET Core SPA应用程序中配置公共路由

时间:2018-05-18 18:04:24

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

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

我的应用需要身份验证,因为它是SPA app,我希望保持我的身份验证选项非常简单,因此我只配置了jwt身份验证,MSAL来处理jwt 1}}令牌。

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

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

enter image description here

我在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");
    }
});

因此,简而言之,我如何为我想为匿名用户创建的静态页面创建路由,并确保我的用户在没有{{1}的情况下被重定向到它令牌?

1 个答案:

答案 0 :(得分:1)

  

但是,我希望为公共/非认证用户提供一个简单的静态HTML页面。

您正在执行单页应用程序,因此SPA是您的用户首先点击的(按设计),只有客户端应用程序才能确定用户是否已登录。

因此,如果您想将人们重定向到静态页面,那么这样做将由SPA负责。因此,如果用户未登录,只需在JavaScript中设置window.location即可正常工作。

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

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