我正在使用 .NET Windows 应用程序并转向 Web 应用程序。
在我的应用程序中,Home 控制器及其索引操作被指定为默认控制器和操作方法。在主控制器中,我正在静态变量中初始化应用程序元数据(名字、姓氏、角色等),这些元数据旨在跨各种屏幕使用。
但是,我观察到用户直接访问控制器,例如“查看详细信息”和“添加新用户”,从而绕过了家庭控制器。这会导致静态变量无法正确初始化。
为了解决这个问题,我想实现一种机制,确保我的应用程序重定向到主控制器,无论用户尝试访问的初始页面如何。这将允许在任何其他交互之前初始化必要的值。
作为一名从 Windows 应用程序过渡的开发人员,我发现向 Web 开发的转变有些挑战性。
我遇到的主要问题包括:
我希望将我的应用程序重定向到Home/index(在program.cs中配置为默认值),即使用户第一次尝试访问任何其他控制器也是如此。
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
如果重定向不可行,我需要找到一种方法来初始化静态变量中的值,无论访问哪个 URL(例如,查看详细信息、添加用户等)。考虑到我目前有 10 个控制器和 32 个视图,我正在寻找一种更有效的方法来实现此初始化。
但是,我观察到用户直接访问控制器,例如“查看详细信息”和“添加新用户”,从而绕过了家庭控制器。这会导致静态变量无法正确初始化。
嗯,用户将使用到子页面的直接链接,或以任何类似的方式访问您的网站,所以我不确定重定向到主页是否会带来良好的用户体验,除非我们正在讨论重定向到登录页面未经授权的用户。
我不确定你需要这些静态变量做什么,但是我建议是创建一些保存这些静态变量的类,使用 DI 容器将其作为 Singleton 实例注入,如果需要,使用惰性获取所需的所有元数据加载,例如使用 Lazy<> https://learn.microsoft.com/en-gb/dotnet/api/system.lazy-1?view=net-8.0