使用数据库中的路由进行动态路由

Dynamically routing using routes from a database

我有一个 ASP.Net Core 5.0 项目。它使用 Razor 页面,而不是 MVC。我需要做的是让路由引擎查看 URL,如果它与页面不匹配,它需要进入数据库并查看该名称是否在数据库中。如果是,则需要转到通用页面。

所以我的数据库中有用户名:

|--------------|
|     Joey     |
|   Samantha   |
|     Doc      |
|--------------|

例如,如果我转到 https://www.example.com/Joey,它实际上应该加载 /Pages/Users/Index.cshtml 页面并提供该页面。

同样的事情,如果我去 https://www.example.com/Doc,它也应该加载 /Pages/Users/Index.cshtml 页面。

我找到了大量关于如何使用经典 ASP.Net 和 MVC 执行此操作的示例,但我似乎找不到任何使用 .NET Core 和 Razor Pages 的好示例。

我的直觉告诉我,我需要在 services.AddRazorPages(); 之后向我的启动文件添加一些内容,并且我需要制作某种自定义路由服务。有人可以为我指出一些好的文档吗?

在您的 Index.cshtml 页面中,将 @page 替换为 @page "/{name?}"。所以你应该有如下内容:

@page "/{name?}"
@model MyApplicationNamespace.Pages.IndexModel

之后更改 Index.cshtml.cs 如下所示:

public IActionResult OnGet(string name)
{
    // Here you check if name parameter given trough the URL an check with its existence in the database. if yes, then `return Page();`
    // Otherwise just redirect to the error page or something to let the user know what happened by using `return RedirectToPage("TheErrorPage");`
}