【问题标题】:Dynamically routing using routes from a database使用数据库中的路由动态路由
【发布时间】:2023-04-01 04:55:01
【问题描述】:

我有一个 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(); 之后向我的启动文件添加一些内容,并且我需要制作某种自定义路由服务。有人可以为我指出一些好的文档吗?

【问题讨论】:

    标签: c# asp.net-core razor-pages asp.net-core-5.0


    【解决方案1】:

    在您的 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");`
    }
    

    【讨论】:

    • 我还没有尝试过,但这不会破坏我的其他路线吗?由于它会进入此页面,因此检查名称,如果不匹配,则直接进入错误页面。我认为它需要首先检查静态路由,然后故障转移到该路由,然后故障转移到错误页面。那是对的吗?再说一次,我还没有尝试过,所以它可能足够聪明,只要知道这一点就可以工作
    • 所有处理路由的解决方案都存在破坏其他路由的风险。因此,您需要确切地知道您的应用程序正在处理什么样的路由。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 2017-09-25
    • 1970-01-01
    相关资源
    最近更新 更多