c# - 如何在 ASP.NET Core 中实现设置页面?
问题描述
我想为 Web 应用程序创建类似安装页面的东西。例如,用户可以选择使用哪个数据库(Microsoft SQL Server、Postgres 等)以建立与数据库的连接的页面。
您对如何实现这样的页面有任何想法吗?有没有这样的页面的项目?
解决方案
这是一个非常广泛的问题,并且高度依赖于您的应用程序。例如,您将连接字符串存储在哪里?您何时何地首次访问它?但是,我可以提供有关如何处理此问题的广泛概述,以及一些可以帮助您入门的参考资料。
基本步骤
- 确定缺少配置数据
- 重定向到设置页面
- 从用户那里收集缺失的配置数据
- 将缺少的配置数据保存到您的配置存储中
- 重定向回原来的
解决所有这些问题比任何一个 Stack Overflow 答案都涉及更多,但我可以提供一些有助于解决最可能的绊脚石的指针。
拦截请求
第一个要求是检测配置数据是否丢失并重定向到设置页面。这通常通过某种类型的 ASP.NET Core中间件或Filter来完成。中间件更加灵活,因为它们可以更早地发生并涵盖更广泛的请求,而过滤器更容易编写,因为它们可以轻松访问有关请求的更多上下文信息。
资源过滤器
一种常见的方法是创建一个ASP.NET Core 资源筛选器或检查是否存在关键配置资源(例如连接字符串),如果它们不存在,则将用户重定向到设置页面。可以对ASP.NET Core Middleware采取类似的方法。
异常过滤器
UnconfiguredApplicationException
另一种方法是在您需要配置变量但不存在的每个点上抛出一个自定义。然后,使用自定义 Exception Filter、自定义 Middleware 组件或现有UseExceptionHandler
middleware全局处理该异常。这需要更多代码,因为您必须在依赖配置数据的每个点添加检查,但无需为每个请求主动验证配置数据。
执行
Microsoft 过滤器文档为资源和异常过滤器的基本构造提供了一些很好的指导。它还包括一个操作过滤器的示例,可以将其添加到任何控制器操作中以获得更精细的方法。
检测配置
您如何检测未配置的应用程序取决于您存储配置变量的方式和位置。最常见的方法是使用IConfiguration
提供程序,例如appsettings.json
,它可以与选项模式结合使用。ASP.NET Core 过滤器文档提供了选项对象 ()的基本示例PositionOptions
,映射到IConfiguration
提供程序 ( appsettings.json
),并使用ASP.NET Core 的依赖注入容器进行配置。
设置页面
由于这通常是可再发行库的一部分,因此您的设置页面可能会通过Razor 类库处理,它允许您将 Razor 视图和其他资产与您的库一起打包(例如,作为 NuGet 包)。通常,您从用户那里收集特定于其安装的信息(例如用户名、密码和服务器名称),然后使用这些信息来建立连接字符串,然后将其保存到配置源中。
检测数据库
如果您不知道数据库的类型,通常会在设置页面中询问。不过,我想,您也可以遍历每个驱动程序,尝试根据提供的凭据进行连接,以确定哪个驱动程序成功。但是配置应用程序的人可能应该知道他们安装了什么类型的数据库服务器!
结论
如顶部所述,这是一个非常广泛的问题,并且有很多活动部分。不过,这应该可以帮助您入门,并使您熟悉此过程中涉及的主要组件,例如ASP.NET Core 过滤器、ASP.NET Core 配置系统等。
推荐阅读
- javascript - 如果条件正确,则在按键上执行功能
- javascript - 开机过程进度条模拟
- c++ - Eclipse/Netbeans 中的处理模型
- php - Eloquent 无法保存新对象:缺少 Illuminate\Database\Eloquent\Model::setAttribute() 的参数 2
- c - 如何在其他循环中使用 k-loop 解决这个问题
- css - 收缩
兄弟姐妹并保持响应 - reactjs - Material-UI - 单击菜单按钮打开所有可用的菜单项
- python - 与 Python 相关的查询 - 文件夹读取
- netlogo - 为什么 netlogo 给我 set [] of x 的错误
- ios - LinkedIn sdk iOS 错误,如果已经登录到 LinkedIn 应用程序