【问题标题】:How to implement a setup page in ASP.NET Core? [closed]如何在 ASP.NET Core 中实现设置页面? [关闭]
【发布时间】:2021-07-31 15:57:54
【问题描述】:

我想为 Web 应用程序创建类似安装页面的内容。例如,用户可以选择使用哪个数据库(Microsoft SQL Server、Postgres 等)以建立与数据库的连接的页面。

您对如何实现这样的页面有任何想法吗?有没有这样的页面的项目?

【问题讨论】:

  • @JeremyCaney,我如何使用动作过滤器做到这一点?
  • 查看PostConfigure<TOptions> 配置验证方法。 andrewlock.net/…
  • @JeremyCaney,最后一个问题:如何动态选择数据库?我的意思是如何使用不同的数据库(MS SQL Server、Postgres...)
  • @alexseybobrovitch:根据您的要求,我已将我的反馈重新整理为答案。作为其中的一部分,我填补了一些空白,添加了额外的链接,并扩展了我的解释。 (我还删除了我上面的 cmets,因为它们现在是多余的。)这应该可以帮助你和其他有这个问题的人开始这种类型的项目。祝你好运!

标签: c# .net asp.net-core asp.net-core-configuration


【解决方案1】:

这是一个非常广泛的问题,并且高度依赖于您的应用程序。例如,您将连接字符串存储在哪里?您何时何地首次访问它?不过,我可以提供有关如何解决此问题的广泛概述,并提供一些有助于您入门的参考资料。

基本步骤

  1. 确定缺少配置数据
  2. 重定向到设置页面
  3. 从用户那里收集缺失的配置数据
  4. 将缺少的配置数据保存到您的配置存储中
  5. 重定向回原来的

解决所有这些问题比任何一个 Stack Overflow 答案都更复杂,但我可以提供一些指针来帮助解决最可能的绊脚石。

拦截请求

第一个要求是检测配置数据是否丢失并重定向到设置页面。这通常通过某种类型的 ASP.NET Core MiddlewareFilter 完成。中间件更加灵活,因为它们可以更早地发生并涵盖更广泛的请求,而过滤器更容易编写,因为它们可以轻松访问有关请求的更多上下文信息。

资源过滤器

解决此问题的常用方法是创建ASP.NET Core Resource Filter 或检查是否存在关键配置资源(例如连接字符串),如果不存在,则将用户重定向到设置页面。 ASP.NET Core Middleware 可以采用类似的方法。

异常过滤器

另一种方法是在您需要配置变量但没有配置变量的每个点抛出例如自定义UnconfiguredApplicationException。然后,使用a custom Exception Filtera custom Middleware componentthe existing UseExceptionHandler middleware 全局处理该异常。这需要更多代码,因为您必须在依赖配置数据的每个点添加检查,但无需为每个请求主动验证配置数据。

实施

Microsoft documentation for filters 为资源和异常过滤器的基本构造提供了一些很好的指导。它还包括一个操作过滤器的示例,可以将其添加到任何控制器操作中以获得更精细的方法。

检测配置

如何检测未配置的应用取决于您存储配置变量的方式和位置。最常见的做法是使用IConfiguration provider,例如appsettings.json,可以与Options Pattern结合使用。 ASP.NET Core Filter documentation 提供了选项对象 (PositionOptions) 的基本示例,映射到 IConfiguration 提供程序 (appsettings.json),并使用 ASP.NET Core's Dependency Injection container 进行配置。

设置页面

由于这通常是可再发行库的一部分,您的设置页面可能会通过 Razor Class Library 处理,它允许您将 Razor 视图和其他资产与您的库一起打包(例如,作为 NuGet 包)。通常,您会从用户那里收集特定于其安装的信息(例如用户名、密码和服务器名称),然后使用这些信息来建立连接字符串,然后将其保存到配置源中。

检测数据库

如果您不知道数据库的类型,通常会在设置页面中询问。不过,我想,您也可以遍历每个驱动程序,尝试根据提供的凭据进行连接,以确定哪个驱动程序成功。但是配置应用的人应该知道他们安装了什么类型的数据库服务器!

结论

如顶部所述,这是一个非常广泛的问题,并且有很多活动部分。不过,这应该有助于您入门,并让您熟悉此过程中涉及的主要组件,例如 ASP.NET Core FiltersASP.NET Core Configuration System 等。

【讨论】:

    猜你喜欢
    • 2018-06-15
    • 2021-12-29
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 2021-09-08
    • 2019-03-09
    • 1970-01-01
    • 2013-11-20
    相关资源
    最近更新 更多