我正在尝试使用ASP.Net核心和Razor页面创建动态路由。基本上,我有两页剃须刀。一个叫做Pages/Home.cshtml,另一个叫做Pages/Calendar.cshtml。每个登录的用户都有自己的用户名。假设我的数据库中有两个用户,Sam和Jessica,假设Sam登录并进入http://www.example.com/Sam,那么它应该呈现Pages/Home.cshtml。如果Sam登录并转到http://www.example.com/Sam/Calendar,那么它应该呈现Pages/Calendar.cshtml。如果杰西卡登录,并进入http://www.example/com/Jessica,那么它应该呈现Pages/Home.cshtml。
因此,基本上,ASP.Net核心应该查看URL,并将用户名与数据库中的用户名进行比较。如果已登录用户的用户名与URL匹配,则应该呈现他们的主页。如果它们的用户名与URL不匹配,则应该沿着路由管道继续进行。我不需要你帮我处理数据库之类的事情。我只需要关于如何设置路由的帮助。
如果这一切听起来令人困惑,那就想想Facebook吧。它应该和Facebook完全一样。如果你去http://www.facebook.com/<your.user.name>,它就会显示出你的时间线。如果你去http://www.facebook.com/<your.user.name>/friends,它会显示你的朋友名单。
我基本上是在复制Facebook在ASP.Net、Core和Razor中的相同行为。有人可以提供一个简单的例子或指向我的例子吗?我觉得这样做的方法是使用一些自定义中间件或自定义路由属性,但我不确定。
发布于 2022-11-28 03:46:08
你可以做这样的事。在Program.cs/startup.cs中,像这样修改AddRazorPages。
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages(options =>
{
options.Conventions.AddPageRoute("/Index", "{user}");
options.Conventions.AddPageRoute("/Calendar", "{user}/calendar");
});
var app = builder.Build();现在,当您访问像https://localhost:7131/sam/calendar这样的URL时,您将得到日历页面。您可以像这样访问user变量- @RouteData.Values["user"]
在日历页面上,你可以这样做。
public class CalendarModel : PageModel
{
public void OnGet()
{
var user = RouteData.Values["user"];
//Query the calendar information from Database.
//If empty redirect the user to the home page or something.
}
}您可以在这里找到更多关于此的详细信息- ASP.NET核中的剃须刀页面路由和应用程序约定。
https://stackoverflow.com/questions/74591103
复制相似问题