无法为请求的配置对象创建 Web API 配置文件

use*_*134 4 c# encryption asp.net-mvc asp.net-web-api

我正在尝试使用 aspnet_regiis 加密 web.config 文件中给出的连接字符串。所以我试图打开 aspnet_regiis.exe

  aspnet_regiis -pe "connectionStrings" -app "/NewTestAPI" -prov "RsaProtectedConfigurationProvider"
Run Code Online (Sandbox Code Playgroud)

或者

 aspnet_regiis -pe "connectionStrings" -app "/E:/Dropbox/NewTestAPI" -prov "RsaProtectedConfigurationProvider"
Run Code Online (Sandbox Code Playgroud)

它抛出一个错误,指出“无法为请求的配置对象创建配置文件。失败!” 我什至尝试共享文件夹

在此处输入图片说明

 aspnet_regiis -pe "connectionStrings" -app "/\\ABC\NewTestAPI" -prov "RsaProtectedConfigurationProvider"
Run Code Online (Sandbox Code Playgroud)

即使这会引发相同的错误,无法为请求的配置对象创建配置文件。失败!”

下面是我拥有的 connectionStrings

 <connectionStrings>
  <add name="ProConnection" connectionString="Data Source=J;User Id=T;Password=C;pooling=true;min pool size=5;Max Pool Size=60" providerName="Oracle.DataAccess.Client"/>
 </connectionStrings>
Run Code Online (Sandbox Code Playgroud)

我还尝试提供站点的物理路径以及站点 ID,如图所示,但错误相同

在此处输入图片说明

aspnet_regiis -pe "connectionStrings" -app "/E:\Dropbox\ABC\TestAPI" -site "3" -prov "RsaProtectedConfigurationProvider"

sni*_*kro 5

初步回答

首先,您应该确保通过以下方式授予对 RSA 加密密钥的访问权限:

.\aspnet_regiis.exe -pa "NetFrameworkConfigurationKey" "MySiteIdentity"
Run Code Online (Sandbox Code Playgroud)

如果您不知道自己的站点标识是什么,可以使用System.Security.Principal.WindowsIdentity.GetCurrent().Name.

然后,如果 web.config 位于与 DefaultWebsite 不同的网站下,您可能需要指定该-site选项。如果未指定该选项,则默认为-site 1(DefaultWebsite,具有 INSTANCE_ID 服务器变量“1”)。为了找到您站点的 INSTANCE_ID,您可以.cshtml像这样在页面中请求服务器变量:

    @foreach (string var in Request.ServerVariables)
    {
        Response.Write(var + " " + Request[var] + "<br>");
    }
Run Code Online (Sandbox Code Playgroud)

现在,假设您发现站点的实例 ID 为 2。您可以在命令中使用它,如下所示:

.\aspnet_regiis.exe -pe "connectionStrings" -app "/NewTestAPI" -site "2"
Run Code Online (Sandbox Code Playgroud)

注意:“/NewTestAPI”路径是一个虚拟路径,并假定您的应用程序作为应用程序托管在本地 IIS 中。此外,-site仅当您的应用位于与 DefaultWebSite 不同的网站下,或者您删除并再次创建 DefaultWebsite 时,才需要该选项。

更新:实际问题是该应用程序作为网站托管在 IIS 中,而不是应用程序(因此没有虚拟路径,只有物理路径)。这就是为什么 aspnet_regiis 在尝试为其提供虚拟路径(-app选项)时会失败的原因。要给 aspnet_regiis 一个物理路径,我们必须使用如下-pef选项:

.\aspnet_regiis.exe -pef "connectionStrings" "E:\DropBox\ABC\TestApi"
Run Code Online (Sandbox Code Playgroud)