使用数据库中的路由进行动态路由
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");`
}
我有一个 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");`
}